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)。

表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で使用されるレジスタの情報表示/編集機能

 これらの機能を利用することで並列処理を行うプログラムのデバッグをより容易にすることが可能だ。