使用stream的奇怪的开销问题

#include <stdio.h>
#include <time.h>

int main() {
int Times, Size;
scanf(“%d%d”,&Times, &Size);
float* hmem, *dmem;
cudaHostAlloc(&hmem, Size, cudaHostAllocDefault);
cudaMalloc(&dmem, Size);
cudaStream_t stream;
cudaStreamCreate(&stream);
size_t start = clock();
for (int i=0; i<Times; i++)
cudaMemcpyAsync(dmem, hmem ,Size, stream);
size_t asyncEnd = clock();

cudaThreadSynchronize();
size_t syncEnd = clock();
cudaStreamDestroy(stream);
printf(“%d\n%d\n”,asyncEnd-start, syncEnd-start);

return 0;
}

当指定Times较小时候,比如1000以下,打印出来的asyncEnd-start时间为0, 而当Times大于1030(在我的机器上是这样的sdk 3.0)时候,答应出来的ayncEnd-start开始随着Times线性增大!

这是为什么?

有什么不对的吗?

没看懂6

有问题么?小于1000时时间过短测不出来,当你逐渐增加循环次数的时候用时线性增长不对么?

[

我估计楼主期盼的是微秒级的精确记时,他可能想要随着times几乎成正比的时间。那样的话他就不应该在host端用clock()来测。。。用StopWatch或者QueryHighPerformanceCounter()之类的比较好。