gpt4 book ai didi

opencl - AMD 硬件上的 bank 冲突和 channel 冲突有什么区别?

转载 作者:行者123 更新时间:2023-12-01 10:38:44 25 4
gpt4 key购买 nike

我正在学习 OpenCL 编程并在 AMD GPU 上运行一些程序。我引用了 AMD OpenCL 编程指南来了解 GCN 架构的全局内存优化。我无法理解银行冲突和 channel 冲突之间的区别。
有人可以解释一下它们之间有什么区别吗?
提前致谢。

最佳答案

如果两个内存访问请求指向同一个 Controller ,则硬件将访问序列化。 这称为 channel 冲突。 这意味着,每个集成内存 Controller 电路一次可以服务于一个任务,如果您碰巧将任何两个任务的地址映射到访问同一个 channel ,它们将被串行服务。
类似地,如果两个内存访问请求进入同一个内存组,硬件会序列化访问。 这称为银行冲突。 如果有多个内存芯片,那么你应该避免使用硬件特殊宽度的步幅。
4 个 channel 和 2 个库的示例:(不是真实世界的示例,因为库必须大于或等于 channel )

address   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17
channel 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1
bank 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
所以你不应该这样读:
   address    1  3  5  7   9
channel 1 3 1 3 1 // %50 channel conflict
bank 1 1 1 1 1 //%100 bank conflict,serialized on bank level
也不是这个:
   address    1    5     9    13
channel 1 1 1 1 // %100 channel conflict, serialized
bank 1 1 1 1 // %100 bank conflict, serialized
但这可能没问题:
   address    1    6     11    16
channel 1 2 3 4 // no conflict, %100 channel usage
bank 1 2 1 2 // no conflict, %100 bank usage
因为步幅不是 channel 宽度的倍数,也不是银行宽度的倍数。
编辑:如果您的算法更多是本地存储优化,那么您应该注意本地数据存储 channel 冲突。最重要的是,一些卡可以使用恒定内存作为独立的 channel 源来加快读取速度。
编辑:您可以使用多个波前来隐藏基于冲突的延迟,也可以使用指令级并行性。
编辑:本地数据存储 channel 的数量比全局 channel 快得多,数量也更多,因此优化 LDS(本地数据共享)非常重要,因此在全局 channel 上统一收集然后在本地 channel 上分散不应该像在全局 channel 上分散那样有问题并在本地 channel 上统一收集。
http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/opencl-optimization-guide/#50401334_pgfId-472173
对于具有不错主板的 AMD APU,如果您的软件不可更改,您应该可以根据需要选择 n-way channel 交错或 n-way bank 交错。

关于opencl - AMD 硬件上的 bank 冲突和 channel 冲突有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629145/

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