インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

オフロードコードの Stdout および Stderr の記録

このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

オフロードコード内部で実行する stdout および stderr への C/C++ プログラムの出力をキャプチャーするには、fflush() を呼び出す必要があります。この関数は、コンパイラーやコンパイラーのランタイム・ライブラリーではなく、コプロセッサー・オフロード・インターフェイス (COI) レイヤーにより制御されます。

オフロードコードで実行される書き込みはバッファーに格納されることがありますが、非オフロードコードで実行される書き込みは直ちに行われます。バッファーのしきい値に達する前にアプリケーションが終了すると、出力データは失われます。このファイルへの出力データをキャプチャーするには、下記の sample.c の例で示されているように、コプロセッサーで別の明示的な fflush() を呼び出す必要があります。

/* sample.c: */

#pragma offload_attribute(push,target(mic))
#include <stdio.h>

void sub()
{
  printf("hello from MIC\n");
  fflush(0);
}

#pragma offload_attribute(pop)

int main(int argc, char* argv[])
{
   printf("hello from main\n");
   #pragma offload target(mic)
   sub();
}

上記の例を次のようにコンパイルして実行します。

$ icc -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