2

我的系统有 32GB 内存,但英特尔 OpenCL 实现的设备信息显示“CL_DEVICE_GLOBAL_MEM_SIZE: 2147352576”(~2GB)。

我的印象是,在 CPU 平台上,全局内存是“普通”内存,因此 OpenCL CPU 实现应该可以使用大约 30+GB 的内存。(当然我使用的是 64 位版本的 SDK)

是否有某种秘密设置告诉英特尔 OpenCL 驱动程序增加全局内存并使用所有系统内存?

4

1 回答 1

1

已解决:通过将所有内容重新编译为 64 位使其正常工作。看起来很愚蠢,但我认为 OpenCL 的工作方式类似于 OpenGL,您可以轻松地从 32 位进程分配例如 8GB 纹理内存,驱动程序会为您处理细节(当然,您不能一次分配 8GB,但例如传输多个纹理,加起来超过 4GB)。

我仍然认为将 OpenCL 内存抽象限制在进程的地址空间(至少对于 intel/amd 驱动程序)是令人讨厌的,但也许有一些微妙的细节或性能权衡为什么选择了这种实现。

于 2013-09-07T21:49:29.427 回答