私はGPU上で計算を実行するCUDAコードを持っています。 私はclock()を使用しています。タイミングを見つけるためにクロックを使った計算時間は0になる - Linux
私のコードの構造は、
__global__ static void sum(){
// calculates sum
}
extern "C"
int run_kernel(int array[],int nelements){
clock_t start, end;
start = clock();
//perform operation on gpu - call sum
end = clock();
double elapsed_time = ((double) (end - start))/CLOCKS_PER_SEC;
printf("time required : %lf", elapsed_time);
}
ですが、時間が、私は印刷開始と終了時刻を確認し、常に0.0000 です。 Startには値がありますが、終了時刻は常にゼロです。
考えられる原因は何ですか?時間を測定するための任意の選択肢。
ご協力いただければ幸いです。私はあなたが、最近の高解像度に経過時間を計測するCLOCK_MONOTONIC
でclock_gettime()を使用すべきであると信じている
おかげ
'elapsed_time'はゼロまたは' end'はゼロですか?私はCPUではなくGPUを使用しているので、CPU時間を測定してもGPU時間は得られません。 – devil
おそらく、測定している時間がクロックの細かさよりも小さいでしょうか? start = clock()とend = clock()の間でsleep(1)を一時的に叩いて、ゼロ以外の結果が得られたかどうか確認してください。 –
この質問と同じ理由があるかもしれません:http://stackoverflow.com/q/2134363/10077 –