5

Thrust を使用するのは初めてで、理解できないことが 1 つあります。Thrust は非同期ですか、それとも同期ですか?

次のコードを書くと、かかった時間は0. しかし、他のタグでは、他のユーザーが0. 真実は何?

clock_t start,end;

start=clock(); 
thrust::sort_by_key(vettore.begin(), vettore.end(), counter.begin()); 

end=clock();

double time=((double)(end-start))/CLOCKS_PER_SEC; 

cout<<"execution time"<<time<<endl;// the result is 0.327
4

3 に答える 3

3

カーネルの起動は、CUDA 1.0 であっても常に非同期であったため、カーネルの起動のみが発生する Thrust 呼び出しは非同期になります。

marina.k で示唆されているように、ストリームのサポートがないため、memcpy を暗黙的にトリガーするすべての Thrust コードは同期的になります。

于 2012-06-21T03:04:37.380 に答える
0

clock() 関数の粒度は、Windows で考えるほど良くありません。また、Windows XP では、その粒度は 16 ミリ秒にもなります。

clock() を使用する代わりに、高解像度タイマーまたは Cutil ライブラリのタイミング関数を使用します (一般的に推奨されます)。

Windows の高解像度タイマーに関するディスカッション: Windows で の C++ の高精度時間測定

タイミングのための CUtil ライブラリの使用法に関する議論: CUDA: CUtil timer - 経過時間に関する混乱

于 2012-09-12T08:15:09.120 に答える
0

time.h を手動でインデクサーに追加し、[設定] -> [C/C++] -> [インデクサー] に移動して、次のように既存の「事前にインデックスを作成するファイル」の前に配置します。

time.h, cstdarg, stdarg.h, .....

それはうまくいく

于 2013-04-23T03:20:01.723 に答える