1

我想比较一下我的 cuda 代码在 gpu 上的速度(数据已经复制)和我的代码在 CPU 上的速度。

cuda代码中的测量如下

    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 时间为 0.02490834。

我会使用刻度,但我不确定如何将刻度重新计算为正确的结果。我的 Cuda 代码中的时间可以给出我的值,例如 0.058938483。秒表不够精确。

有任何想法吗?

4

2 回答 2

2

ElapsedMilliseconds给你已经过去的整数时间。因此,您无法通过该属性获得小数部分。你需要自己计算。

如果您想要更精确的时间,请除以ElapsedTicksStopwatch.Frequency获得您的时间(以秒为单位)。然后转换为您想要的时间单位。

var elapsedMilliseconds = (double)(sw.ElapsedTicks * 1000L) / Stopwatch.Frequency;
于 2012-10-09T17:09:53.613 回答
0

根据 MSDN,Ticks 是 long 类型,每毫秒有 10,000 个。所以,你可以手动计算。

sw.ElapsedMilliseconds 属性的部分问题可能是您使用了 var 数据类型。您的输出表明 var 正在编译为 int。自己定义变量的类型,编译器不会给它错误的类型。 http://msdn.microsoft.com/en-us/library/bb383973.aspx

于 2012-10-09T16:54:50.150 回答