我想比较一下我的 cuda 代码在 gpu 上的速度(数据已经复制)和我的代码在 CPU 上的速度。
cuda-code中的Measurement是这样完成的
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventRecord(start,0);
//Kernel Execution
transformKernel7<<<grid,threads>>>(dev_result, width, height, angle, N);
cudaEventCreate(&stop);
cudaEventRecord(stop,0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&cuTime, start,stop);
现在我想在 C# 中测量我的代码。 我有以下代码
var sw = Stopwatch.StartNew();
//making some calculation....
var elapsed = sw.ElapsedMilliseconds;
我的问题是 sw.ElapsedMilliseconds 不够精确。它在 0.02490834 的时间内给出了我的 0。
我会使用刻度,但我不确定如何重新计算刻度以获得正确的结果。我的 Cuda 代码中的时间可以给出我的值,例如 0.058938483。秒表不够精确。
有什么想法吗?
最佳答案
ElapsedMilliseconds
为您提供已经过去的整数时间。所以你不能通过那个属性得到小数部分。需要自己计算。
如果您想要更精确的时间,请将 ElapsedTicks
除以 Stopwatch.Frequency
以获得以秒为单位的时间。然后转换成你想要的时间单位。
var elapsedMilliseconds = (double)(sw.ElapsedTicks * 1000L) / Stopwatch.Frequency;
关于c# - 时间测量 CUDA 和 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804724/