<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啓動的時間了。 一會去測試下。