如何解决是否可以并行访问HBM2?
我有一个代码,可以依次访问约4GB的内存, 它每个请求访问1024bits,随机访问所有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-我知道它取决于内存控制器,因此,如果您知道可以执行此操作的其他硬件,也请告诉我。
解决方法
是否可以并行访问HBM2?
是的,始终可以并行访问HBM2,但这取决于您。
您提出的两种优化都不起作用。 OpenCL不能控制如何使用内存总线或在哪里分配内存。这取决于驱动程序。如果您分配4GB,则不会仅在4个HBM2内存管芯之一上分配这4GB,而是自动在所有4个管芯上拆分以最大化带宽。
您能做的最好的事情是确保您具有合并的内存访问(结构数据布局数组),并使用完整的工作项/工作组使GPU饱和。 Radeon VII(我在其中也使用了很多)的理论带宽为1024GB / s,但实际上不要超过800GB / s。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。