インテル® Advisor は、シリアルプログラムのデータを収集して解析するように設計されています。インテル® Advisor のスータビリティーと依存関係ツールを使用して部分的に並列化されたプログラムを調査する前に、それぞれの並列サイトがシングルスレッドのシリアルプログラムとして実行されるようプログラムを変更します。
プログラムの現在のバージョンをシリアルプログラムとして実行するため、スレッド数を 1 に制限する必要があります。シングルスレッドでプログラムを実行するには、次の操作を行います。
インテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB) では、メインスレッドで tbb::task_scheduler_init init(1); オブジェクトを作成して、実行ファイルを再度実行します。次に例を示します。
int main() { tbb::task_scheduler_init init(1); // ...プログラムの残りのコード... return 0; }
task_scheduler_init の効果は、ユーザーが生成したそれぞれのスレッドに対し個別に適用されます。そのため、プログラムがほかの場所でスレッドを生成する場合、スレッドのライフタイムに適用する tbb::task_scheduler_init init(1); を実行する必要があります。インテル® oneTBB の特定の機能を使用すると、プログラムがシリアル実行されない場合があります。詳細は、oneTBB のドキュメントを参照してください。
OpenMP* では次のいずれかを行います。
プログラムを実行する前に、OpenMP* の環境変数 OMP_NUM_THREADS に 1 を設定します。
OpenMP* プラグマとディレクティブの認識を有効にするコンパイラー・オプションを指定します。Windows* では /Qopenmp、Linux* では -openmp オプションを使用します。
詳細は、コンパイラー・ドキュメントを参照してください。
並列処理を排除できない場合、並列コード領域にアノテーションを追加してマークすることで、並列コードがインテル® Advisor ツールのレポートにどのような影響を与えるか知ることができます。