我用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 s 分配
0.197 s 第一次复制
5.02 s 第二次复制
奇怪的是:虽然它显示第一次复制 0.197s 如果我看程序运行需要更长的时间。