【发布时间】:2013-08-15 19:10:57
【问题描述】:
GPU 对我来说是新的。这个 OpenCL sn-p 说它在 7ms 内将 7mb 传输到 GPU。这听起来是对的还是我错过了什么?
const int dim1Size = 960000;
int* dim1 = new int[dim1Size];
int* dim2 = new int[dim1Size];
long size = sizeof(int)*dim1Size*2;
size = size / 1024 / 1024;
cout << size << "mb to transfer" << endl;
cl_mem mem_d1 = clCreateBuffer(*context, 0, sizeof(int)*dim1Size, NULL, NULL);
cl_mem mem_d2 = clCreateBuffer(*context, 0, sizeof(int)*dim1Size, NULL, NULL);
GetSystemTime(&time);
WORD start = (time.wSecond * 1000) + time.wMilliseconds;
clEnqueueWriteBuffer(*queue, mem_d1, CL_TRUE, 0, sizeof(int)*dim1Size, dim1, 0, NULL, NULL);
clEnqueueWriteBuffer(*queue, mem_d2, CL_TRUE, 0, sizeof(int)*dim1Size, dim2, 0, NULL, NULL);
GetSystemTime(&time);
WORD end = (time.wSecond * 1000) + time.wMilliseconds;
cout << (end - start) << "ms to transfer";
【问题讨论】:
-
哇!我觉得听起来很快。这是一台较旧的工作计算机,所以也许这就是它听起来很慢的原因。
-
其实,opencl运行时不处理是否使用主存吗?所以在这种情况下,它可能永远不会真正转移到 gpu 内存?
-
PCI-e 3.0 带宽超过 5GB/s 所以超过 5MB/ms 所以超过 35MB/7ms 但是你的已经老了所以 pci-e 2.0 几乎一半所以 17MB/7ms 你说它的 7mb/7ms 所以它可能更旧的 pci-e 1.0 所以你可能是对的。如果您的卡支持 cl/gl 互操作,那么您可以在卡中进行计算,因此不会复制。