並列コードを追加する前に、並列フレームワークを選択する必要があります。
スレッドを使用するには、高レベルの並列フレームワークを使用するか、明示的なスレッド化 API を使用する 2 つの主要なメカニズムがあります。容易性と最適化の観点から、並列フレームワークの導入が推奨されます。
C# のマネージドコードには、Microsoft* タスク並列ライブラリー (TPL) を使用します。
このドキュメントでは、インテル® ソフトウェア開発ツールと多くのコンパイラーに含まれる、ネイティブコード向けの広範に使用されている並列フレームワークの使い方を説明します。
インテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB)
OpenMP*
インテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB) は、C++ コード向けの並列プログラミング・フレームワークです。oneTBB は、ヘッダーファイルとランタイム・ライブラリーで構成される標準的な C++ ライブラリーとして構造化されているため、多くの C++ コンパイラーで使用できます。インテルでは、oneTBB を使用して C++ プログラムに並列処理を導入することを推奨しています。oneTBB プログラムは、oneTBB ライブラリーが移植されたプラットフォーム (OS/アーキテクチャー) で実行できます。例えば、インテル® oneAPI DPC++/C++ コンパイラーは oneTBB を含みます。
OpenMP* は、C、C++、および Fortran をサポートする高レベルのフレームワークです。OpenMP* は、コンパイラーによってサポートされるため、型、変数、呼び出しではなくコンパイラー・ディレクティブを使用してソースコードを変更します。環境変数を設定するか、コンパイルオプションを省略してコンパイラーに OpenMP* ディレクティブを無視させることで、OpenMP* プログラムを並列実行からシリアル実行に変更することができます。OpenMP* 2.0 は Microsoft*、インテル、および GNU* の C、C++、Fortran コンパイラーなどでサポートされています。OpenMP* 3.0 標準で TASK のサポートが追加されています。インテル® コンパイラーはバージョン 11.0 以降で OpenMP* 4.0 をサポートします。Microsoft* および GNU* コンパイラーを使用する場合、サポートされる OpenMP* 仕様を確認するためコンパイラーのドキュメントをご覧ください。
また、異なる並列フレームワークを使用することもできます。
Fortran プログラムでは、OpenMP* が利用可能な唯一の高レベル並列フレームワークです。次の表は、Windows* システムでは、 Microsoft* とインテル® コンパイラーでサポートされる C/C++ プログラム向けの推奨される並列フレームワークを示します。
言語とコンパイラー |
oneTBB |
OpenMP* |
|---|---|---|
C プログラム、インテル® C++ コンパイラー・クラッシック |
サポート |
|
C++ プログラム、インテル® C++ コンパイラー・クラッシック |
サポート |
サポート |
C プログラム、Microsoft* Visual C++* コンパイラー |
サポート |
|
C++ プログラム、Microsoft* Visual C++* コンパイラー |
サポート |
サポート |
oneTBB および OpenMP* に関する詳細は、インテル® Advisor ヘルプの関連セクションをご覧ください。
Fortran プログラムでは、OpenMP* が利用可能な唯一の高レベル並列フレームワークです。次の表は、Linux* 上の GNU* gcc とインテル® コンパイラーでサポートされる C/C++ プログラム向けの推奨される並列フレームワークを示します。
言語とコンパイラー |
oneTBB |
OpenMP* |
|---|---|---|
C プログラム、インテル® C++ コンパイラー・クラッシック (icc) |
サポート |
|
C++ プログラム、インテル® C++ コンパイラー・クラッシック (icc) |
サポート |
サポート |
C プログラム、GNU* gcc コンパイラー (gcc) |
サポート |
|
C++ プログラム、GNU* gcc コンパイラー (gxx) |
サポート |
サポート |
oneTBB および OpenMP* に関する詳細は、インテル® Advisor ヘルプの関連セクションをご覧ください。詳細な手順については、コンパイラーのドキュメントおよび関連情報に記載されているリソースを参照してください。