【发布时间】:2014-09-15 09:29:36
【问题描述】:
我正在编写一些程序,我需要在主机和设备之间重复执行一些数据传输。我会尽量减少,但有没有更快的方法来执行此操作?在这里,复制到设备的数组在每次迭代时都会发生变化,因此需要使用新的数组值更新设备。任何建议/指针/帮助将不胜感激。
for (i = 0; i <= SEVERALCALLS; i++) {
wrtBuffer = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR, sizeof(double) * num, NULL, &ret);
if (ret != 0) {
printf("clCreateBuffer wrtBuffer error: %d. couldn't load\n", ret);
exit(1);
}
// update cti array
ret = clEnqueueWriteBuffer(command_queue, wrtBuffer, CL_TRUE, 0, sizeof(double) * num, cti, 0, NULL, NULL);
if (ret != 0) {
printf("clEnqueueWriteBuffer wrtBuffer error: %d. couldn't load\n", ret);
exit(1);
}
// NDRange Kernel call
ret = clEnqueueReadBuffer(command_queue, readBuffer, CL_TRUE, 0, sizeof(double) * num, newcti, 0, NULL, NULL);
if (ret != 0) {
printf("clEnqueueReadBuffer readBuffer error: %d. couldn't load\n", ret);
exit(1);
}
}
【问题讨论】:
-
您使用独立 GPU 吗?你现在的 IO 速度是多少?你的机器上的 PCI-E 总线速度是多少?
-
是的,它是一个独立的 GPU。我正在使用 GEForce GTX 630 KEPLER geforce.com/hardware/desktop-gpus/geforce-gt-630/specifications
-
将您的结果与不同传输量的 PCI-E 带宽进行比较。如果超过理论最大值的 75%,通常表示传输速度还可以。如果这还不够,请查看 Nvidia OpenCl 最佳实践中描述的固定内存技术。
-
好的,谢谢。我会尝试分享结果..
-
您需要交错复制和执行。这可以通过拥有 2 个缓冲区和 2 个队列来实现。这样您就可以在旧数据仍在运行时复制新数据。
标签: opencl