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。秒表不够精确。
有什么想法吗?
答案 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