鉴于最新两代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
答案 0 :(得分:3)
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;
与麦克斯韦的相比:
SUST.D.BA.2D.TRAP [R2], R8, 0x55;
开普勒指令中的“EA”代表“有效地址”,它是CISC指令集中LEA(加载有效地址)指令的一个更复杂的变体。
至于SURED/SUATOM
,那些必须是GRED/GATOM
的表面等价物。两者都执行原子操作,但ATOM
变量返回内存位置的先前值,RED
变量不返回。他们不需要不同的内在函数;编译器会自动发出正确的指令。