• Showing Page History #49207

新たに追加された並列化キーワード 新たに追加された「__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)。

表3 新たに導入されたキーワードとOpenMPの対応
キーワード同等のOpenMPディテクティブ
!__par#pragma omp parallel for
!__critical#pragma omp critical
!__taskcomplete S1#pragma omp single
!__task#pragma omp task

Windowsで利用できる非同期I/O関数 インテル独自の非同期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 Debugger Extension Parallel ComposerにはParallel Debugger Extensionという、Visual Studioのデバッガを拡張するプラグインも含まれている。Parallel Composerをインストールすることで、Visual Studioのデバッガに下記のような機能が追加される。

スレッドで共有されるデータに関する分析機能リエントラント(再入可能)な関数呼び出しの際にプログラムの実行を停止できる「スマートブレークポイント」機能OpenMPディレクティブの認識OpenMPを用いて並列化された処理の並列実行許可/禁止SSEで使用されるレジスタの情報表示/編集機能 これらの機能を利用することで並列処理を行うプログラムのデバッグをより容易にすることが可能だ。