gpt4 book ai didi

opencl - OpenCL 中的最大内存分配大小仅为可用主内存的四分之一——为什么?

转载 作者:行者123 更新时间:2023-12-02 16:00:32 25 4
gpt4 key购买 nike

对于设备信息参数CL_DEVICE_MAX_MEM_ALLOC_SIZE,OpenCL 标准(2.0,早期版本类似)有这样的规定:

Max size of memory object allocation in bytes. The minimum value is max (min(1024*1024*1024, 1/4th of CL_DEVICE_GLOBAL_MEM_SIZE), 128*1024*1024) for devices that are not of type CL_DEVICE_TYPE_CUSTOM.

事实证明,AMD 和 Intel CPU OpenCL 实现一次只提供四分之一的可用内存(在我的机器上大约 2 GiB,在 8 GiB 上,在其他机器上类似)来分配。我认为这没有很好的技术理由。我知道 AMD GPU 有类似的限制,由 GPU_MAX_ALLOC_PERCENT 环境变量控制,但即使如此,我也不太明白仅仅提供所有内存进行分配的困难在哪里。

总结:限制一次分配的内存量的技术原因是什么?毕竟,我可以一口气使用 malloc() CPU 上的所有内存。是否有一些我不理解的性能问题?

最佳答案

AMD GPU 在硬件中使用分段内存模型,每个段的大小受到用于访问内存的硬件寄存器大小的限制。然而,OpenCL 需要 OpenCL 实现提供非分段全局内存模型。因此,为了在所有情况下都通过一致性,AMD 必须限制全局内存位于同一硬件内存段内,即提供减小的 CL_DEVICE_MAX_MEM_ALLOC_SIZE。

如果您增加 CL 运行时可用的 GPU 内存量,AMD 编译器将尝试将内存缓冲区拆分为不同的硬件内存段以使其正常工作,例如总共 512Mb,您可以正确使用两个 256Mb 缓冲区,但不能正确使用单个 512Mb 缓冲区。

我相信在更新的硬件中,段大小会增加。

在CPU方面:您运行的是32位程序还是64位程序?根据您对 malloc() 的最后评论,我假设是 64 位,所以它不是通常的 32 位东西。然而,AMD 和 Intel 可能在内部使用 32 位变量作为内存,并且无法或不愿意将其代码迁移到完全 64 位。但这纯粹是猜测。

关于opencl - OpenCL 中的最大内存分配大小仅为可用主内存的四分之一——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20408504/

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