【发布时间】:2017-10-01 08:26:56
【问题描述】:
我目前正在用 OpenCL 编写一个较小的项目,并试图找出真正导致内存合并的原因。每本关于 GPGPU 编程的书都说 GPGPU 应该如何编程,而不是为什么硬件更喜欢这样。
那么它是某种特殊的硬件组件来合并数据传输吗?还是只是为了更好地利用缓存?还是完全不同?
【问题讨论】:
-
一方面,硬件内存获取操作宽度为 128 位,如果您使用 32 位值,则可以在单个指令中从内存中获取其中的 4 个(如果它们是连续的地址)来馈送一次 4 个工作项。另一个,如果都访问相同的地址,所有工作项在一次操作中获得相同的数据,并带有广播。至少对于gcn。此外,128 位由多个通道组成,当它们是不同的地址而不是相同的模值时,它们可以提供最好的服务。此外,内存读/写是在硬件中流水线化的,因此最好使用独立的地址、独立的存储区。
标签: caching opencl gpgpu coalescing