例如:要对数组执行算法,我们必须使用由数组创建的缓冲区。 但是对于Intel/AMD CPU,它使用像Global Memory这样的系统的DDR。 最后,表格创建两次。有没有办法在没有分配缓冲区的情况下使用已经在内存中的表。内存位置和分配
Q
内存位置和分配
1
A
回答
4
可以问的OpenCL通过创建缓冲区时设置CL_MEM_USE_HOST_PTR标志使用原来的内存区域。
如果内核在CPU上运行,则不会发生内存复制。如果OpenCL运行认为这是更适合
如果在GPU上运行的副本可能发生。
3
CPU可以访问机器的内存,但无法访问GPU的内存。同样,GPU可以访问自己的内存,但不能访问主机。这就是你必须在这两者之间传递信息的原因 - 它们是两个完全分离的存储空间。
与gpgpu相反,使用OpenCL,内核可以在CPU上运行,因此不需要复制缓冲区;但OpenCL仍然要求您明确地传输内存,只是它的实现会在主机上运行时忽略它。
相关问题
- 1. Android位图内存分配
- 2. 64位内存分配
- 3. 64位机内存分配
- 4. 结构/值类型内存分配和解除位置
- 5. 确定内核中内存分配的位置
- 6. Ç - 内存分配和释放内存
- 7. 内存分配和释放内存
- 8. 内存分配和动态内存分配
- 9. System.Web.Cache和HttpRuntime.Cache内存位置
- 10. 属性和分配内存
- 11. 内存分配和释放
- 12. int char *和内存分配
- 13. malloc分配内存和SIGSEGV
- 14. JSON树和内存分配
- 15. 模板和内存分配
- 16. fork和内存分配
- 17. 分配和释放内存
- 18. 内存分配和结构
- 19. Ptrace和内存分配
- 20. Enumerable.Range和内存分配
- 21. Mariadb配置分配的内存
- 22. 64位操作系统内存分配
- 23. 内存分配
- 24. 内存分配
- 25. 内存分配
- 26. 内存分配
- 27. 内存分配
- 28. 内存分配
- 29. 内存分配
- 30. 分配内存
因此,这些数据在OpenCL CPU平台上分配了两次,并且有任何技巧可以解决这个问题? 在图像处理中,对性能造成很大的浪费。 –
@AlexPlacet我想我还不够清楚......如果你使用OpenCL并且你的目标设备是CPU,那么数据**不会被分配两次。如果你在GPU上使用完全相同的代码,它会。 – Oak