インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® 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