我的OpenCL内核需要几MB的输入数据,大约300MB的临时全局内存才能工作,并且它只返回几MB。我知道为内核提供这个临时内存的唯一方法是使用malloc分配这个内存,然后用clCreateBuffer传递它,但是需要一些时间才能将300MB复制到GPU,并且还需要300MB的主机RAM。是否有可能跳过它并在内核中分配全局设备内存或者以某种方式声明300Mb的缓冲区,但是不要使用malloc创建它,并且不要将其复制到GPU?OpenCL全局内存
0
A
回答
2
如果您只是在不使用主机指针的情况下致电clCreateBuffer
,则内存将在设备上分配,而不从主机复制任何数据。例如:
buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err);
+0
但是,如果“输入数据”是从hsot提供给内核的东西,那么最终必须复制它(如果不是在clCreateBuffer中比使用clEnqueueWriteBuffer或使用映射)。除非您使用集成内存OpenCL设备,否则PCIe上的数据副本是游戏的一部分。 – Dithermaster
相关问题
- 1. OpenCL全局内存提取
- 2. openCL;全局内存同步;
- 3. 在OpenCL中写入全局内存
- 4. OpenCL中的全局内存限制
- 5. 在OpenCL内核的全局内存中读取/写入
- 6. OpenCL - 缓冲区和全局内存之间的区别
- 7. OpenCL - 全局内存读取预制比本地更好
- 8. 在OpenCL中使用大量恒定全局内存
- 9. OpenCL中本地和全局内存区别有什么区别?
- 10. 的OpenCL - 复制由全局结构到本地内存
- 11. 从全局到本地内存的OpenCL副本字符
- 12. OpenCL:将全局内存复制到每个工作组的本地内存
- 13. 如何将映像从全局内存复制到openCL中的本地内存
- 14. OpenCL粒子系统内存布局
- 15. OpenCL中的memset局部变量/内存
- 16. OpenCL写__全局变量
- 17. 全局设备变量OpenCL
- 18. CUDA全局内存
- 19. 全局内存与CUDA中的动态全局内存分配
- 20. OpenCL纹理内存
- 21. 全局内存访问
- 22. CUDA:curand_uniform全局内存对齐
- 23. 加载从全局内存
- 24. 全局内存和CUDA流
- 25. C全局和内存
- 26. OpenCL:从常量内存直接复制到全局输出损坏数据
- 27. 如何在OpenCL中同步本地到全局内存的结果
- 28. 从私有内存复制到全局OpenCL无效命令队列错误
- 29. 为什么Cuda/OpenCL在全局内存中没有银行冲突?
- 30. OpenCL中的全局同步可能吗?
如果您不发出读/写入队队列,那么如果参数是正确的,它将不会执行任何复制。 –
所以我应该调用clCreateBuffer(上下文,CL_MEM_READ_WRITE,300 * 1024 * 1024,NULL,NULL),这是全部? – Mike
我为我的流体建模内核做了这些,他们都使用了很多像这样的临时缓冲区。 300 * 1024 * 1024 * sizeof(cl_float)或cl_w您需要的任何内容。但这只适用于单GPU使用。对于许多GPU,你需要一种不同的方式。 –