我有一个连续访问~4GB内存的代码,它在所有4GB的内存中随机访问每个请求1024位.我有一个16 VII HBM2的RADEON,4096位总线。
可能优化1: 4GB和4x数据每mem请求!(因为第一个请求告诉我这4GB的第二个请求,所以第二个请求可能在内存中很远)可能优化2: 4+4+4+4GB和每mem请求1x数据!(没有提高性能,因为每个对4GB组的请求都会将其他请求延迟到0.25x性能,因此我得到了4个线程,每个线程的性能为0.25x )
问题:
用于优化1的
-是否可以拆分4096位总线,这样我就可以以一种非阻塞的方式并行地获取1024位内存的不同区域?对于优化2-是否可以并行地处理4GB的“块”,使每个块是独立的,而对于其他块则是非阻塞的?
PS -我知道这取决于内存控制器,所以如果你知道一个不同的硬件可以做到这一点,请告诉我也。
发布于 2020-10-17 08:47:53
可以并行访问HBM2吗?
是的,HBM2总是并行访问的,但这并不取决于您。
两种建议的优化都不起作用。OpenCL没有为您提供如何使用内存总线或在何处分配内存的控制权;这取决于驱动程序。如果分配4GB,这4GB不是仅在4个HBM2内存死亡中的一个上分配的,而是自动在所有4个死掉上分配,以最大限度地扩大带宽。
您所能做的最好的就是确保您已经合并了内存访问(结构数组、数据布局),并将GPU填充到了enouth /工作组中。Radeon (我也用了一堆)的理论带宽为1024 in /s,但在实际中不要期望超过800 in/s。
https://stackoverflow.com/questions/64397376
复制相似问题