gpt4 book ai didi

c - 二维数组的倾斜内存分配是否更有效?

转载 作者:太空狗 更新时间:2023-10-29 17:23:48 29 4
gpt4 key购买 nike

我正在使用具有计算能力 1.3 GPU 的 CUDA 实现一个应用程序,该应用程序涉及扫描二维数组以查找较小的二维数组出现的位置。到目前为止,这两个数组都是使用 cudaMallocPitch() 分配的,并使用 cudaMemcpy2D() 传输的,以满足合并的内存对齐要求。

在第一个优化步骤中,我试图通过将数据集中读取到共享内存来合并对全局内存的内存访问。作为对未优化代码的测试(例如,存在发散分支并且对全局内存的内存访问未合并),我使用 cudaMalloc() 分配了更大的数组,发现性能提高了高达 50%。这怎么可能?

最佳答案

cudaMallocPitch()保证二维数组(row-major)中每一行的起始地址是2^N的倍数(N为7~10取决于计算能力)。

访问是否更高效不仅取决于数据对齐,还取决于您的计算能力、全局内存访问方式,有时还取决于缓存配置。

此博客解释了早期计算能力上未对齐数据访问的带宽大幅减少,这可能是您的问题的 A。

https://developer.nvidia.com/content/how-access-global-memory-efficiently-cuda-cc-kernels

由于性能取决于许多因素,您可能需要发布您的设备模块类型和内核代码,以便进一步调查。

关于c - 二维数组的倾斜内存分配是否更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715343/

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