在使用 HIP C++ 的 AMD GPU 上使用 `shfl` 操作有什么要求?

问题描述 投票:0回答:1

AMD HIP C++,它与 CUDA C++ 非常相似。 AMD还创建了Hipify来将CUDA C++转换为HIP C++(可移植C++代码),它可以在nVidia GPU和AMD GPU上执行:https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP

nvidia 的要求

请确保您拥有 3.0 或更高计算能力设备,以便使用 warp shfl 操作,并在使用此应用程序时在 Makefile 中添加 -gencode arch=compute=30, code=sm_30 nvcc 标志。

此外,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
操作有哪些要求?

concurrency llvm gpgpu amd-gpu hip
1个回答
3
投票
  1. 是的,GPU GCN3中新增了

    ds_bpermute
    ds_permute
    等指令,可以提供
    __shfl()
    等功能,甚至更多

  2. 这些

    ds_bpermute
    ds_permute
    指令仅使用本地内存路径(LDS 8.6 TB/s),但实际上并不使用本地内存,这可以加速线程之间的数据交换: 8.6 TB/s < speed < 51.6 TB/shttp://gpuopen.com/amd-gcn-assemble-cross-lane-operations/

它们使用 LDS 硬件在波前的 64 个通道之间路由数据,但它们实际上并不写入 LDS 位置。

  1. 还有数据并行原语 (DPP) - 当您可以使用它时特别强大,因为操作可以直接读取相邻工作项的寄存器。 IE。 DPP 可以全速访问相邻线程(工作项)~51.6 TB/s

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内存

© www.soinside.com 2019 - 2024. All rights reserved.