我有一个代码可以顺序访问约 4GB 的内存,每个请求访问 1024 位,随机访问所有 4GB ......我有一个 16GB HBM2 和 4096 位 BUS 的 RADEON VII。
可能的优化 1:每个内存请求 4GB 和 4x 数据!(不起作用,因为第一个请求告诉我跨 4GB 的第二个请求,所以第二个请求所需的数据可能在内存中很远)
可能的优化 2:每个内存请求 4+4+4+4GB 和 1x 数据!(不会提高性能,因为对 4GB 组的每个请求都会将其他请求延迟到 0.25 倍性能,所以我得到 4 个线程,每个线程的性能为 0.25 倍)
问题:
对于优化 1 - 是否可以拆分 4096 位 BUS,所以我可以以非阻塞方式并行获取 1024 位内存的不同区域?
对于优化 2 - 是否可以并行处理 4GB 的“块”,每个块都是独立的,而其他块是非阻塞的?
PS - 我知道这取决于内存控制器,所以如果你知道可以做到这一点的不同硬件,也请告诉我。