【问题标题】:Is there a way to load a vector equal by size to global memory size of GPU in OpenCl?有没有办法在 OpenCl 中加载大小等于 GPU 的全局内存大小的向量?
【发布时间】: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


    【解决方案1】:

    默认情况下,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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 2021-05-23
      • 2012-10-19
      • 2012-10-30
      相关资源
      最近更新 更多