インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。
オフロードコード内部で実行する stdout および stderr への C/C++ プログラムの出力をキャプチャーするには、fflush() を呼び出す必要があります。この関数は、コンパイラーやコンパイラーのランタイム・ライブラリーではなく、コプロセッサー・オフロード・インターフェイス (COI) レイヤーにより制御されます。
オフロードコードで実行される書き込みはバッファーに格納されることがありますが、非オフロードコードで実行される書き込みは直ちに行われます。バッファーのしきい値に達する前にアプリケーションが終了すると、出力データは失われます。このファイルへの出力データをキャプチャーするには、下記の sample.c の例で示されているように、コプロセッサーで別の明示的な fflush() を呼び出す必要があります。
/* sample.c: */
#pragma omp declare target
#include <stdio.h>
void sub()
{
printf("hello from MIC\n");
fflush(0);
}
#pragma omp end declare target
int main(int argc, char* argv[])
{
printf("hello from main\n");
#pragma omp target
sub();
}
上記の例を次のようにコンパイルして実行します。
$ icc –qopenmp –o sample sample.c $ ./sample > log.txt $ cat log.txt hello from MIC hello from main
fflush() を呼び出すと、stdout および stderr を同じまたは別の出力ファイルに記録することができます。
例えば、stdout (1) および stderr (2) を log.txt に記録するには、次のように入力します。
$ ./sample > log.txt 2>&1
stdout を log.txt、stderr を log_err.txt に記録するには、次のように入力します。
$ ./sample > log.txt 2> log_err.txt