【问题标题】:OpenCL force buffer to stay on the GPUOpenCL 强制缓冲区停留在 GPU 上
【发布时间】:2012-03-11 10:19:11
【问题描述】:

有没有办法强制 OpenCL 将数据保存在芯片上的全局内存缓冲区中(即它永远不会被换出到系统内存)?基本上我想为自己的需要保留一部分 GPU 内存,并且我希望我放在那里的数据保留在 GPU 上,而不管其他应用程序是否开始使 GPU 的内存饱和。

谢谢!

【问题讨论】:

    标签: opencl


    【解决方案1】:

    GPU 没有链接到 CPU 内存管理单元,它们不会像 CPU 那样执行页面错误。它们是由设备驱动程序控制的块设备外设。

    对于 OpenCL,当您通过创建 cl_mem 对象并将其排队(写入)到 GPU 来在 GPU 上分配内存时,它将一直存在,直到您使用 clReleaseMemobject 显式释放它。要重用缓冲区,您需要不释放它并跟踪其 Cl_mem 对象。

    【讨论】:

    • 但是,当我在 GPU 上创建一个 128MB 缓冲区(通过 cl_mem)并在其中写入一些东西时,我怎么会这样:如果我立即读回数据,它将是即时的,而如果我在玩 GPU 内存密集型游戏时将它放在那里几个小时(当然没有释放它),然后尝试再次访问我的内存,大约需要一秒钟 - 正是需要的时间量从我的硬盘读取 128MB。当然,如果数据仍在 GPU 上,考虑到 PCI-E 带宽(我认为双向大约 4.5GB/s),读回它不需要一秒钟?
    • 我不妨接受这个答案,反正我想做什么并不重要。谢谢!
    • 好的,我更好地理解了这个问题。这是什么品牌和型号的 GPU?什么版本的 OpenCL?我会尝试重新解决这个问题。
    • Hd6950 2GB,Cayman(标准)。 OpenCL 1.1,不清楚细节,会在家检查(4小时后)。如果你愿意,我也可以给你 OpenCL 代码
    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2020-02-14
    • 2016-12-03
    • 2023-03-21
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多