【问题标题】:Difference between surface memory Kepler vs Maxwell表面记忆开普勒与麦克斯韦之间的区别
【发布时间】:2015-08-05 01:36:13
【问题描述】:

鉴于最新两代 NVIDIA GPU (ref http://docs.nvidia.com/cuda/cuda-binary-utilities/index.html) 上的以下低级 (SASS) 指令,硬件/内存层次结构设计(和性能影响)有哪些(可能是推测的)差异?

表面记忆指令MAXWELL

SUATOM  Surface Reduction
SULD    Surface Load
SURED   Atomic Reduction on surface memory
SUST    Surface Store

表面记忆指令KEPLER

SUCLAMP Surface Clamp
SUBFM   Surface Bit Field Merge
SUEAU   Surface Effective Address
SULDGA  Surface Load Generic Address
SUSTGA  Surface Store Generic Address

【问题讨论】:

  • 附加:SURED 到底是做什么的?是由 ROP 处理的吗?我在 PTX 指令集中看到了它,但它似乎没有被 C 语言扩展(直接和间接表面 API)暴露出来

标签: cuda nvidia kepler maxwell


【解决方案1】:

CUDA 阵列包含 NVIDIA 的专有阵列布局,这些布局针对 2D 和 3D 局部性进行了优化。开发人员故意混淆了从坐标到地址的转换,因为它可能会从一种架构更改为另一种架构。看起来 NVIDIA 选择了从 Kepler 到 Maxwell 以不同的方式包装这个翻译,Kepler 实现了一种更“类似 RISC”的方法。 CUDA 手册 (https://github.com/ArchaeaSoftware/cudahandbook/blob/master/texturing/surf2Dmemset.cu) 中surf2dmemset 样本的 SASS 反汇编显示了 6 条写入输出的指令:

 SUCLAMP PT, R8, R7, c[0x0][0x164], 0x0;
 SUCLAMP.SD.R4 PT, R6, R6, c[0x0][0x15c], 0x0;
 IMADSP.SD R9, R8, c[0x0][0x160], R6;
 SUBFM P0, R8, R6, R8, R9;
 SUEAU R9, R9, R8, c[0x0][0x154];
 SUSTGA.B.32.TRAP.U8 [R8], c[0x0][0x158], R10, P0;

与 Maxwell 相比:

 SUST.D.BA.2D.TRAP [R2], R8, 0x55;

Kepler 指令中的“EA”代表“有效地址”,它是 CISC 指令集中的 LEA(加载有效地址)指令的更复杂变体。

对于SURED/SUATOM,它们必须是GRED/GATOM 的表面等价物。两者都执行原子操作,但ATOM 变体返回内存位置的先前值,而RED 变体不返回。他们不需要不同的内在函数;编译器会自动发出正确的指令。

【讨论】:

  • “CUDA 阵列封装了 NVIDIA 的专有阵列布局,这些布局针对 2D 和 3D 局部性进行了优化。从坐标到地址的转换被开发人员故意混淆,因为它可能会从一种架构更改为另一种架构。” ... 嗯,当然咯。不过,我希望得到一个技术性的答案。 SUEAU 是否计算“专有”布局?
  • 是的,看起来SUEAU 接受SUBFM 的输出并使用它来计算有效地址。我看不出任何答案是非技术性的。
猜你喜欢
  • 2017-08-09
  • 2020-11-27
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2016-09-14
  • 2018-11-24
  • 2020-08-26
  • 1970-01-01
相关资源
最近更新 更多