我的系统有32GB内存,但英特尔OpenCL实现的设备信息显示为“CL_DEVICE_GLOBAL_MEM_SIZE:2147352576”(~2GB)。
我的印象是,在CPU平台上,全局内存是“正常”内存,因此OpenCL CPU实现应该可以使用~30 + GB。 (当然我使用的是64位版本的SDK)
是否有某种秘密设置告诉Intel OpenCL驱动程序增加全局内存并使用所有系统内存?
答案 0 :(得分:1)
已解决:通过将所有内容重新编译为64位来实现它。看起来很愚蠢,但我认为OpenCL的工作方式类似于OpenGL,你可以轻松分配,例如来自32位进程的8GB纹理内存和驱动程序为您处理细节(当然,您无法在一次扫描中分配8GB,但例如传输多个纹理,总计超过4GB)。
我仍然认为将OpenCL内存抽象限制到进程的地址空间(至少对于intel / amd驱动程序)是令人恼火的,但也许有一些微妙的细节或性能权衡,为什么选择这个实现。