![]() |
HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
新たに追加された「__taskcomplete」や「__task」、「__par」、「__critical」というキーワードは、並列処理の実装に利用するもので、OpenMPを有効にした(コンパイルオプションとして「/Qopenmp」を使用する)場合に有効となる。たとえば下記のように「__par」キーワードを付けたforループはコンパイラによって自動的に並列化され、ループ内の処理が並列に実行される。
void func1() { int i; __par for( i = 0; i 100; i++ ) { func2(i); /* ここで複数のスレッドが生成され、func2(i)は複数のスレッドによって並列実行される */ } }
また、__criticalはクリティカルセクション(複数のスレッドが同じ処理を実行する際、複数のスレッド間で同時に行ってはいけない処理)を指定するキーワード、__taskは並列に実行させたい複数の処理を指定するキーワード、__taskcompleteは並列処理中に1スレッドだけで実行させたい処理を指定するキーワードだ。これらはOpenMPを利用しても記述できるが、これらのキーワードを利用することでよりシンプルにコードを記述できる(表3)。
キーワード | 同等のOpenMPディテクティブ |
---|---|
__par | #pragma omp parallel for |
__critical | #pragma omp critical |
__taskcomplete S1 | #pragma omp single |
__task | #pragma omp task |
インテル独自の非同期I/O拡張機能(C/C++ Asynchronous I/O Extensions、C/C++ AIO)はそれぞれ「aio.h」(Cライブラリ)および「aiostream.h」(C++テンプレートライブラリ)をインクルードすることで利用できる。これらはPOSIXで定義されている非同期I/O関数(AIO)をWindows向けに移植したもので、若干の違いはあるものの、POSIXのAIOとほぼ同様に利用できる。また、aiostreamを利用することで、C++のオブジェクトとしてこれらを利用することができる。
なお、インテル C++ コンパイラーやIPPについては過去に別記事でも取り上げているため詳細は割愛するが、Parallel Composerに付属するTBBやIPPも、インテル C++ コンパイラーに付属するものと同じものとのことで、これだけでもコストパフォーマンスは高い。
Parallel ComposerにはParallel Debugger Extensionという、Visual Studioのデバッガを拡張するプラグインも含まれている。Parallel Composerをインストールすることで、Visual Studioのデバッガに下記のような機能が追加される。
これらの機能を利用することで並列処理を行うプログラムのデバッグをより容易にすることが可能だ。
[PageInfo]
LastUpdate: 2009-11-18 20:37:00, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members