gpt4 book ai didi

cuda - 什么是银行冲突? (进行Cuda/OpenCL编程)

转载 作者:行者123 更新时间:2023-12-03 04:59:00 27 4
gpt4 key购买 nike

我一直在阅读 CUDA 和 OpenCL 的编程指南,但我不明白什么是库冲突。他们只是深入研究如何解决问题,而不详细说明主题本身。有人能帮我理解吗?如果帮助是在 CUDA/OpenCL 的背景下,或者只是计算机科学中一般的银行冲突,我没有偏好。

最佳答案

对于 nvidia(以及 amd)GPU,本地内存被分为多个内存库。每个存储体一次只能寻址一个数据集,因此如果 halfwarp 尝试从同一存储体加载/存储数据,则必须对访问进行序列化(这是存储体冲突)。对于 gt200 gpus,有 16 个存储体(fermi 有 32 个存储体),AMD gpus 有 16 或 32 个存储体(57xx 或更高:32,以下所有内容:16)),它们以 32 位的粒度交错(因此字节 0-3 位于银行 1、银行 2 中的 4-7、...、银行 1 中的 64-69 等等)。为了更好的可视化,它基本上看起来像这样:

Bank    |      1      |      2      |      3      |...
Address | 0 1 2 3 | 4 5 6 7 | 8 9 10 11 |...
Address | 64 65 66 67 | 68 69 70 71 | 72 73 74 75 |...
...

因此,如果 halfwarp 中的每个线程访问连续的 32 位值,则不会出现存储体冲突。此规则的一个异常(exception)(每个线程必须访问自己的存储体)是广播:如果所有线程访问相同的地址,则该值仅读取一次并广播到所有线程(对于 GT200,它必须是 halfwarp 中的所有线程访问相同的地址,iirc fermi 和 AMD gpus 可以对任意数量的访问线程执行此操作相同的值)。

关于cuda - 什么是银行冲突? (进行Cuda/OpenCL编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841877/

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