cudaMemcpy()
一次将精确地1GB的数据复制到设备上。这需要5.9秒。而反过来只需要5.1秒。这正常吗?这个函数本身在复制之前有这么多开销吗? 理论上,PCIe总线的吞吐量至少为4GB/s。
由于Tesla C870不支持内存传输重叠,所以没有内存传输重叠。有什么提示吗?
编辑2:我的测试程序+更新时间;希望读起来不会太麻烦!
cutCreateTimer()
函数无法编译通过:“错误:未定义标识符“cutCreateTimer””,这可能与安装在机器上的旧CUDA版本(2.0)有关。 __host__ void time_int(int print){
static struct timeval t1; /* var for previous time stamp */
static struct timeval t2; /* var of current time stamp */
double time;
if(gettimeofday(&t2, 0) == -1) return;
if(print != 0){
time = (double) (t2.tv_sec - t1.tv_sec) + ((double) (t2.tv_usec - t1.tv_usec)) / 1000000.0;
printf(...);
}
t1 = t2;
}
main:
time(0);
void *x;
cudaMallocHost(&x,1073741824);
void *y;
cudaMalloc(&y, 1073741824);
time(1);
cudaMemcpy(y,x,1073741824, cudaMemcpyHostToDevice);
time(1);
cudaMemcpy(x,y,1073741824, cudaMemcpyDeviceToHost);
time(1);
显示的时间如下:
0.86秒 分配
0.197秒 第一次复制
5.02秒 第二次复制
奇怪的是:尽管第一次复制显示为0.197秒,但如果我观察程序运行时,它需要更长的时间。