有 AMD HIP C++,它与 CUDA C++ 非常相似。 AMD还创建了Hipify来将CUDA C++转换为HIP C++(可移植C++代码),它可以在nVidia GPU和AMD GPU上执行:https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP
shfl
操作有要求:https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/tree/master/samples/2_Cookbook/4_shfl#requirement-for-nvidianvidia 的要求
请确保您拥有 3.0 或更高计算能力设备,以便使用 warp shfl 操作,并在使用此应用程序时在 Makefile 中添加 -gencode arch=compute=30, code=sm_30 nvcc 标志。
shfl
64 波大小(WARP-size):https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/blob/master/docs/markdown/hip_faq.md#why -直接使用hip而不是支持cuda此外,HIP 定义了可移植的机制来查询架构特征,并支持更大的 64 位 Wavesize,这将诸如 ballot 和 shuffle 等跨通道函数的返回类型从 32 位整数扩展到 64 位整数。
但是哪些 AMD GPU 确实支持功能
shfl
,或者任何 AMD GPU 都支持shfl
,因为在 AMD GPU 上它是使用本地内存实现的,没有硬件指令寄存器到寄存器?
nVidia GPU 需要 3.0 或更高的计算能力 (CUDA CC),但是使用 HIP C++ 在 AMD GPU 上使用
shfl
操作有哪些要求?
是的,GPU GCN3中新增了
ds_bpermute
和ds_permute
等指令,可以提供__shfl()
等功能,甚至更多这些
ds_bpermute
和 ds_permute
指令仅使用本地内存路径(LDS 8.6 TB/s),但实际上并不使用本地内存,这可以加速线程之间的数据交换: 8.6 TB/s < speed < 51.6 TB/s: http://gpuopen.com/amd-gcn-assemble-cross-lane-operations/它们使用 LDS 硬件在波前的 64 个通道之间路由数据,但它们实际上并不写入 LDS 位置。
http://gpuopen.com/amd-gcn- assembly-cross-lane-operations/
现在大部分向量指令都可以满速进行跨通道读取 吞吐量。
例如,
wave_shr
-扫描算法的指令(波前右移):
有关 GCN3 的更多信息:https://github.com/olvaffe/gpu-docs/raw/master/amd-open-gpu-docs/AMD_GCN3_Instruction_Set_Architecture.pdf
新说明
“SDWA” – 子双字寻址允许访问 VALU 指令中 VGPR 的字节和字。
...- “DPP”——数据并行处理允许 VALU 指令访问相邻通道的数据。
- DS_PERMUTE_RTN_B32、DS_BPERMPUTE_RTN_B32。
DS_PERMUTE_B32 前向排列。
不写入任何LDS内存。