クラスター環境でのGPUの高速化に関する記事を書いています
。そのために、基本的にc++拡張機能であるCUDAでプログラミングしています。しかし、私はac#開発者なので、c++の特殊性はわかりません。
経過時間の記録について懸念がありますか?読むべきいくつかの提案やブログ。
私の最初のアイデアは、大きなループを作成し、プログラムを数回実行することです。50〜100で、経過時間ごとに速度のグラフィックを作成した後までログに記録します。
クラスター環境でのGPUの高速化に関する記事を書いています
。そのために、基本的にc++拡張機能であるCUDAでプログラミングしています。しかし、私はac#開発者なので、c++の特殊性はわかりません。
経過時間の記録について懸念がありますか?読むべきいくつかの提案やブログ。
私の最初のアイデアは、大きなループを作成し、プログラムを数回実行することです。50〜100で、経過時間ごとに速度のグラフィックを作成した後までログに記録します。
ニーズに応じて、次のように簡単に行うことができます。
time_t start = time(NULL);
// long running process
printf("time elapsed: %d\n", (time(NULL) - start));
これをログに記録する方法(ファイルまたはコンソール)と、必要な精度(秒、ミリ秒、私たちなど)を伝える必要があると思います。「時間」は秒単位で表示します。
ブーストタイマーライブラリの使用をお勧めします。これはプラットフォームに依存せず、次のように単純です。
#include <boost/timer/timer.hpp>
boost::timer t;
// do some stuff, up until when you want to start timing
t.restart();
// do the stuff you want to time.
std::cout << t.elapsed() << std::endl;
もちろん、t.elapsed()は、変数に保存できるdoubleを返します。
のような標準機能time
は、解像度が非常に低いことがよくあります。そして、はい、これを回避するための良い方法は、テストを何度も実行して平均を取ることです。特にGPUのような複雑なリソースを使用している場合は、起動コストが隠れているため、最初の数回は非常に遅くなる可能性があることに注意してください。
プラットフォーム固有の呼び出しについては、QueryPerformanceCounter
WindowsとCFAbsoluteTimeGetCurrent
OS Xを見てください(私はPOSIX呼び出しを使用clock_gettime
していませんが、チェックする価値があるかもしれません)。
GPUは個別の命令を実行するリモート処理ユニットであるため、GPUパフォーマンスの測定には注意が必要です。多くの場合、多くの並列ユニットで実行されます。CUDAコードの測定と最適化に役立つさまざまなリソースとツールについては、NvidiaのCUDAゾーンにアクセスすることをお勧めします。( OpenCLに関連するリソースも非常に関連性があります。)
最終的には、結果が画面に表示されるまでの速さを確認したいですよね?そのため、time
あなたのニーズにはへの電話で十分かもしれません。