gpt4 book ai didi

c++ - 使用 OpenCL,如何获取 GPU 内存使用情况?

转载 作者:行者123 更新时间:2023-11-30 01:38:23 29 4
gpt4 key购买 nike

我正在寻找一种可靠的方法来确定 OpenCL 的当前 GPU 内存使用情况。

我找到了 NVidia API:cudaMemGetInfo( size_t* free, size_t* total )获取当前设备上的可用内存和总内存。

但我正在寻找适用于 AMD 和 OpenCL 的解决方案。我没有发现 OpenCL 中是否有类似的功能,我不知道 AMD 是否有类似的功能。

我不想在分配缓冲区之前知道 OpenCL 设备上有多少空闲内存,而是在分配缓冲区之后才知道空闲内存。先验如 How do I determine available device memory in OpenCL? 中所示,有了OpenCL,没有办法,也不需要知道。

最佳答案

devices before allocating buffers but free memory afer allocating buffers.

对于 AMD,也许可以尝试 cl_amd_device_attribute_query extension 中的 CL_DEVICE_GLOBAL_FREE_MEMORY_AMD - 不过,此扩展可能只适用于专有驱动程序。

在一般情况下,这是不可能的,因为 AFAIK 无法知道何时 缓冲区被分配(在设备上)。从这个意义上说,OpenCL 比 CUDA 更高级。缓冲区属于上下文,而不属于设备。调用 clCreateBuffer() 可以但不必在任何设备上分配任何内存;这些实现会在执行需要这些缓冲区的内核之前自动将缓冲区迁移到设备内存,并在需要为下一个内核释放内存时将它们移离设备。即使您获得了设备的空闲内存,您也不能 100% 可靠地使用它来决定是否运行内核,因为 clEnqueueNDRange() 不一定立即启动内核(它只是将它排入队列;如果有队列中的其他东西,它可以被延迟),并且同一台计算机上的一些其他应用程序可以同时在 GPU 上调度。

如果您想避免交换内存,您必须确保 1) 您的应用程序是唯一使用 GPU 的应用程序,2) 对于您的每个内核,总缓冲区参数大小必须 <= GLOBAL_MEM_SIZE。

关于c++ - 使用 OpenCL,如何获取 GPU 内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47988633/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com