1

現在、C と CUDA を使用してアプリケーションを作成しています。私はアルゴリズムを純粋な C で動作させ、それを CUDA に変換しました。

結果は問題なく、コードを最適化するプロセスに入っています。

簡単な方法を使用して、カーネルが結果を返すのにかかる時間をプロファイリングします。

clock_t start, end;
double cpu_time_used;
start = clock();

. . . my memcopies and my kernel . . . 

end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

驚いたことに、プログラム全体を数回続けて実行すると、処理時間が劇的に短縮されます。1 回だけ実行すると、平均で約 0.9 秒になります。10 回連続で実行すると、0.1 秒まで短縮できます。

私の本当の懸念は、Visual Profiler が 15 回の実行に基づいて統計を計算しているため、最初の実行が他の 14 回の非常に高速な実行に圧倒されることです。

私のプログラムは後で時々実行されるので、最適化したいのは最初の実行時です。

したがって、私の質問は、これを解決する方法はありますか、それともどこから来たのかを知っていますか?

どうも !

編集:

ネットブックで Windows 7、CUDA 4.2 Toolkit (2.1 機能) を実行しています

4

1 に答える 1

2

迅速な起動を提供することが目的の場合は、実行可能ファイルに、それが実行される GPU アーキテクチャのオブジェクト コードが含まれていることを確認してください。

実行時に適切なバージョンのコードが選択される、複数のアーキテクチャのオブジェクト コードを含む「ファット バイナリ」をコンパイルできます。どのオブジェクト コード バージョンも適していない場合 (将来のデバイスをサポートする場合など) に備えて、PTX コードを含めることもできます (また、そうすべきです)。

nvcc に複数の-gencodeオプションを指定するだけです。オブジェクト コードを含めたい物理アーキテクチャ ("sm_20") ごとに 1 つと、PTX コードを生成する仮想アーキテクチャ ("compute_20") で少なくとも 1 つです。

于 2012-10-15T17:56:11.377 に答える