时间测量CUDA和C#

时间:2012-10-09 16:49:36

标签: c# c visual-studio-2010 cuda

Ich想比较我的cuda代码在gpu上的速度(已经复制的数据)以及代码在CPU上的速度。

cuda-code中的测量如下:

    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-Code中的时间可以给出我的值,如0.058938483。秒表不够精确。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

如果您想要更精确的时间,请将ElapsedTicks除以Stopwatch.Frequency,以便在几秒钟内获得时间。然后转换为您想要的时间单位。

var elapsedMilliseconds = (double)(sw.ElapsedTicks * 1000L) / Stopwatch.Frequency;

答案 1 :(得分:0)

根据MSDN,Ticks是一种长型,一毫秒就有10,000。所以,你可以手动做数学。

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