如何記錄kernel啓動時間

    <pre class="cpp" name="code">    sdkStartTimer(&timer);
    cudaEventRecord(start, 0);
    cudaMemcpyAsync(d_a, a, nbytes, cudaMemcpyHostToDevice, 0);
    increment_kernel<<<blocks, threads, 0, 0>>>(d_a, value);
    cudaMemcpyAsync(a, d_a, nbytes, cudaMemcpyDeviceToHost, 0);
    cudaEventRecord(stop, 0);
    sdkStopTimer(&timer);



上面這個例子,可以利用sdkGetTimerValue(&timer)來計算kernel call的時間。因爲cudaMemcpyAsync是異步的拷貝。checkCudaErrors(cudaEventElapsedTime(&gpu_time, start, stop));可以用來計算GPU計算的時間。

 

這裏a是pinnedmemory。

 

如果把上面代碼改爲:

    sdkStartTimer(&timer);
    cudaEventRecord(start, 0);
    cudaMemcpy(d_a, a, nbytes, cudaMemcpyHostToDevice, 0);
    increment_kernel<<<blocks, threads, 0, 0>>>(d_a, value);
    cudaMemcpy(a, d_a, nbytes, cudaMemcpyDeviceToHost, 0);
    cudaEventRecord(stop, 0);
    sdkStopTimer(&timer);


這時,timer計算的時間不再是kernel啓動的時間了。  一會去測試下。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章