【发布时间】:2022-07-06 12:36:31
【问题描述】:
我的 GPU 有 12 GB 全局内存 (CL_DEVICE_GLOBAL_MEM_SIZE),但它只能分配 3 GB 内存 (CL_DEVICE_MAX_MEM_ALLOC_SIZE)。当我尝试加载大小超过 3 GB 的向量时,程序崩溃。问题是,如果可以将更大的向量加载到 GPU 内存中以完全利用它,该怎么做?
【问题讨论】:
标签: opencl boost-compute
我的 GPU 有 12 GB 全局内存 (CL_DEVICE_GLOBAL_MEM_SIZE),但它只能分配 3 GB 内存 (CL_DEVICE_MAX_MEM_ALLOC_SIZE)。当我尝试加载大小超过 3 GB 的向量时,程序崩溃。问题是,如果可以将更大的向量加载到 GPU 内存中以完全利用它,该怎么做?
【问题讨论】:
标签: opencl boost-compute
默认情况下,CL_DEVICE_MAX_MEM_ALLOC_SIZE 报告 CL_DEVICE_GLOBAL_MEM_SIZE 的 1/4,这意味着它只允许在 12GB GPU 上分配四个 3GB 缓冲区。
但是,Nvidia GPU 允许在单个缓冲区中分配其全部内存容量,即使它们也报告有 1/4 的限制。
一些 AMD GPU 的限制设置更高,例如 Radeon VII 允许您将 14/16GB 用于单个缓冲区。
我见过的唯一真正实施 1/4 限制的设备是 Intel HD 4600 和 5500,因此较旧的 Intel 集成 GPU。如果那里的缓冲区大小超过 1/4,cl::Buffer 构造函数将抛出错误 -61。
如果您遇到设备上的 1/4 内存限制,请将您的 12GB 大缓冲区拆分为 4 个较小的 4GB 缓冲区(例如,一个向量分别代表向量的 x、y、z、w 分量)。如果您使用 Windows,请注意您总共只能使用约 11.5GB,因为为操作系统保留了一些 VRAM。
【讨论】: