本节介绍 PTX ISA 及其实现的变更历史。第一节描述当前 PTX ISA 9.4 版发布中的 ISA 与实现变更,其余各节则提供回溯至 PTX ISA 2.0 版的历史版本变更记录。
表 71 展示了 PTX 版本历史。
PTX ISA 版本 |
CUDA 版本 |
支持的目标架构 |
|---|---|---|
PTX ISA 1.0 |
CUDA 1.0 |
|
PTX ISA 1.1 |
CUDA 1.1 |
|
PTX ISA 1.2 |
CUDA 2.0 |
|
PTX ISA 1.3 |
CUDA 2.1 |
|
PTX ISA 1.4 |
CUDA 2.2 |
|
PTX ISA 1.5 |
驱动 r190 |
|
PTX ISA 2.0 |
CUDA 3.0,驱动 r195 |
|
PTX ISA 2.1 |
CUDA 3.1,驱动 r256 |
|
PTX ISA 2.2 |
CUDA 3.2,驱动 r260 |
|
PTX ISA 2.3 |
CUDA 4.0,驱动 r270 |
|
PTX ISA 3.0 |
CUDA 4.1,驱动 r285 |
|
CUDA 4.2,驱动 r295 |
|
|
PTX ISA 3.1 |
CUDA 5.0,驱动 r302 |
|
PTX ISA 3.2 |
CUDA 5.5,驱动 r319 |
|
PTX ISA 4.0 |
CUDA 6.0,驱动 r331 |
|
PTX ISA 4.1 |
CUDA 6.5,驱动 r340 |
|
PTX ISA 4.2 |
CUDA 7.0,驱动 r346 |
|
PTX ISA 4.3 |
CUDA 7.5,驱动 r352 |
|
PTX ISA 5.0 |
CUDA 8.0,驱动 r361 |
|
PTX ISA 6.0 |
CUDA 9.0,驱动 r384 |
|
PTX ISA 6.1 |
CUDA 9.1,驱动 r387 |
|
PTX ISA 6.2 |
CUDA 9.2,驱动 r396 |
|
PTX ISA 6.3 |
CUDA 10.0,驱动 r400 |
|
PTX ISA 6.4 |
CUDA 10.1,驱动 r418 |
|
PTX ISA 6.5 |
CUDA 10.2,驱动 r440 |
|
PTX ISA 7.0 |
CUDA 11.0,驱动 r445 |
|
PTX ISA 7.1 |
CUDA 11.1,驱动 r455 |
|
PTX ISA 7.2 |
CUDA 11.2,驱动 r460 |
|
PTX ISA 7.3 |
CUDA 11.3,驱动 r465 |
|
PTX ISA 7.4 |
CUDA 11.4,驱动 r470 |
|
PTX ISA 7.5 |
CUDA 11.5,驱动 r495 |
|
PTX ISA 7.6 |
CUDA 11.6,驱动 r510 |
|
PTX ISA 7.7 |
CUDA 11.7,驱动 r515 |
|
PTX ISA 7.8 |
CUDA 11.8,驱动 r520 |
|
PTX ISA 8.0 |
CUDA 12.0,驱动 r525 |
|
PTX ISA 8.1 |
CUDA 12.1,驱动 r530 |
|
PTX ISA 8.2 |
CUDA 12.2,驱动 r535 |
|
PTX ISA 8.3 |
CUDA 12.3,驱动 r545 |
|
PTX ISA 8.4 |
CUDA 12.4,驱动 r550 |
|
PTX ISA 8.5 |
CUDA 12.5,驱动 r555 |
|
CUDA 12.6,驱动 r560 |
||
PTX ISA 8.6 |
CUDA 12.7,驱动 r565 |
|
PTX ISA 8.7 |
CUDA 12.8,驱动 r570 |
|
PTX ISA 8.8 |
CUDA 12.9,驱动 r575 |
|
PTX ISA 9.0 |
CUDA 13.0,驱动 r580 |
|
PTX ISA 9.1 |
CUDA 13.1,驱动 r590 |
|
PTX ISA 9.2 |
CUDA 13.2,驱动 r595 |
|
PTX ISA 9.3 |
CUDA 13.3,驱动 r610 |
|
PTX ISA 9.4 |
CUDA 13.4,驱动 r615 |
|
表 72 展示了架构专用和系列专用 PTX 指令的发布历史。除 PTX 指令外,其他架构专用和系列专用的特性与构造将在以下小节中说明:
指令 |
变体 |
PTX ISA 版本 |
支持的目标架构 |
|---|---|---|---|
|
基础变体 |
8.3 |
|
8.6 |
|
||
8.8 |
|
||
9.0 |
|
||
|
8.6 |
|
|
8.8 |
|
||
9.0 |
|
||
|
8.7 |
|
|
8.8 |
|
||
9.0 |
|
||
|
8.8 |
|
|
9.4 |
|
||
|
基础变体 |
8.0 |
|
|
基础变体 |
8.0 |
|
8.6 |
|
||
8.8 |
|
||
9.0 |
|
||
|
类型 |
9.4 |
|
|
类型 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
8.6 |
|
|
8.8 |
|
||
9.0 |
|
||
|
|
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
8.7 |
|
|
8.8 |
|
||
|
9.1 |
|
|
|
9.1 |
|
|
|
9.1 |
|
|
|
9.2 |
|
|
|
9.4 |
|
|
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
|
9.4 |
|
|
|
|
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
8.6 |
|
|
8.8 |
|
||
9.0 |
|
||
|
8.6 |
|
|
8.8 |
|
||
9.0 |
|
||
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
|
|
8.6 |
|
8.8 |
|
||
9.0 |
|
||
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
|
类型 |
8.6 |
|
8.8 |
|
||
|
|
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
|
8.6 |
|
8.8 |
|
||
9.0 |
|
||
类型 |
9.4 |
|
|
|
|
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
限定符 |
9.4 |
|
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
限定符
|
9.4 |
|
|
限定符 |
9.4 |
|
|
|
基础变体 |
8.8 |
|
9.0 |
|
||
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
9.4 |
|
||
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
类别 |
8.6 |
|
|
9.0 |
|
||
参数 |
8.6 |
|
|
8.8 |
|
||
限定符 |
8.6 |
|
|
限定符 |
8.8 |
|
|
K 形状值 |
8.8 |
|
|
9.4 |
|
||
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
类别 |
8.6 |
|
|
9.0 |
|
||
类别 |
8.6 |
|
|
8.8 |
|
||
9.0 |
|
||
9.4 |
|
||
参数 |
8.6 |
|
|
8.8 |
|
||
限定符 |
8.6 |
|
|
限定符 |
8.8 |
|
|
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
|
|
基础变体 |
8.6 |
|
8.8 |
|
||
9.0 |
|
||
类别 |
8.6 |
|
|
9.0 |
|
||
限定符 |
9.4 |
|
|
|
|
8.7 |
|
8.8 |
|
||
|
|
8.7 |
|
8.8 |
|
||
类别 |
8.7 |
|
|
|
类型 |
9.2 |
|
|
类型 |
9.2 |
|
|
类型 |
9.4 |
|
FP8/FP6/FP4 x4 打包类型 |
9.4 |
|
|
|
基础变体 |
9.4 |
|
|
限定符 |
9.4 |
|
限定符 |
9.4 |
|
|
|
限定符 |
9.4 |
|
|
限定符 |
9.4 |
|
限定符 |
9.4 |
|
|
|
限定符 |
9.4 |
|
|
基础变体 |
9.4 |
|
|
基础变体 |
9.4 |
|
13.1. PTX ISA 9.4 版变更#
新增特性
PTX ISA 9.4 版引入以下新特性:
新增对
sm_107目标架构的支持。新增对目标架构
sm_107f的支持,该架构支持系列专用特性。新增对目标架构
sm_107a的支持,该架构支持架构专用特性。为
set指令新增.u8x4、.s8x4、.u16x2、.s16x2指令类型支持。为
cvt指令新增.pzo限定符支持。为
cvt指令新增.rz舍入模式支持,可用于目标类型.e4m3x2、.e5m2x2、.e2m3x2、.e3m2x2、.e2m1x2。为
mbarrier.expect_tx、mbarrier.complete_tx、mbarrier.arrive、mbarrier.arrive_drop、cp.async.bulk、cp.async.bulk.tensor与tcgen05.commit指令新增.multicast::cluster::32b限定符支持。为
tcgen05.commit指令新增.sync_restrict::shared::read::mma::a限定符支持。为
cp.async.bulk.prefetch与cp.async.bulk.prefetch.tensor指令新增.level::eviction_priority限定符支持。新增对
applypriority.async.bulk与applypriority.async.bulk.tensor指令的支持。为
cp.async.bulk.tensor、cp.reduce.async.bulk.tensor、cp.async.bulk.prefetch.tensor指令新增.override::global_address与.override_attribute限定符支持。为
cp.async.bulk.tensor与cp.reduce.async.bulk.tensor指令新增.im2col_no_offs::w限定符支持。为
tcgen05.ld与tcgen05.ld.red指令新增.spcompress限定符支持。新增对
spcompress与spdecompress指令的支持。为
cvt指令新增.ue5m3x2指令类型支持。为
cvt指令新增.scaled::n1::ue8m0限定符支持。将
UE5M3新增为tcgen05.mma与tcgen05.mma.sp指令的缩放类型。为
tcgen05.mma、tcgen05.mma.sp、tcgen05.mma.ws与tcgen05.mma.ws.sp指令新增.kind::ti16限定符支持。新增对
add、sub、mul与fma指令配合.f16x2/.bf16x2/.f32x2类型的支持。新增对
add、sub、mul与fma指令配合 FP8/FP6/FP4 x4 打包类型的支持。为
tcgen05.alloc与tcgen05.dealloc指令新增.exclusive限定符支持。为
cp.async.bulk与cp.async.bulk.tensor指令新增.report_mechanism限定符支持。为
tcgen05.mma指令新增.decompress::lut::b限定符支持。为
tcgen05.mma指令新增.collector::b::*限定符支持。新增对
.loc_intermediate指示符的支持,并新增用于中间 IR 源码位置映射的.nv_intermediate_source_section构造。为
prefetch指令新增.valid_addr与.L1::32B限定符支持。为
atom、red、cp.reduce.async.bulk与multimem.cp.reduce.async.bulk指令新增配合.f32类型使用的.noftz限定符支持。为
ld指令新增.proxy::readonly限定符支持。新增对
.minperctamemory指示符的支持,并新增用于 per-CTA 全局内存的%perctamemoryoffset、%perctamemorysize特殊寄存器。为
ldmatrix指令的.m8n16形状新增.s8.s4类型支持。为
fence.proxy.async::generic指令新增.sync_restrict::shared::cluster::read限定符支持。为
fence.proxy指令新增配合.alias限定符使用的.acquire与.release限定符支持。新增对
fabric.try_get.async.tensor、fabric.try_put.async.tensor与fabric.try_red.async.tensor指令的支持。新增对
fabric.try_atom指令的支持。新增对
createpolicy.range.fabric指令的支持。为
fabric.try_get、fabric.try_put与fabric.try_red指令新增.level::cache_hint限定符支持。
语义变更与澄清
无
13.2. PTX ISA 9.3 版变更#
新增特性
PTX ISA 9.3 版引入以下新特性:
新增对
mma_throughputpragma 的支持。新增对
clmad指令的支持。为
mbarrier.test_wait与mbarrier.try_wait指令新增.phase_type::*限定符支持。为
mbarrier.test_wait与mbarrier.try_wait指令新增reportPredicate与reportValue操作数支持。为 mbarrier 指令新增
.layout限定符支持,并新增对mbarrier.check_layout指令的支持。新增对
multimem.st.async与multimem.red.async指令的支持。为
cp.async.bulk、cp.reduce.async.bulk、multimem.cp.async.bulk与multimem.cp.reduce.async.bulk指令新增.sem与.scope限定符支持。新增对
fabric.try_get、fabric.try_put、fabric.try_red、fabric.try_pullred、fabric.wait、fabric.submit指令的支持。为
fence指令新增fence.proxy.to_proxykind::from_proxykind_fabric限定符支持。新增对
.language指示符的支持。
语义变更与澄清
澄清了
red.async指令支持sys作用域,而在使用.release限定符时不支持cluster作用域。
13.3. PTX ISA 9.2 版变更#
新增特性
PTX ISA 9.2 版引入以下新特性:
为
add、sub、min、max、neg指令新增.u8x4与.s8x4指令类型支持。新增对
add.sat.{u16x2/s16x2/u32}指令的支持。为
st.async指令新增.b128类型支持。为
cp.async.bulk指令新增.ignore_oob限定符支持。为
cvt指令新增.bf16x2目标类型支持,可用于源类型.e4m3x2、.e5m2x2、.e3m2x2、.e2m3x2、.e2m1x2。
语义变更与澄清
对于
.atype与.btype为.e4m3/.e5m2、且.dtype为.f32的wgmma.mma_async指令,当前实现的累加精度高于半精度、但低于单精度。
13.4. PTX ISA 9.1 版变更#
新增特性
PTX ISA 9.1 版引入以下新特性:
为
ld与st指令新增配合.local状态空间的.volatile限定符支持。为
cvt指令新增.f16x2与.bf16x2源类型支持,可用于目标类型.e2m1x2、.e2m3x2、.e3m2x2、.e4m3x2、.e5m2x2。为
mma/mma.sp指令新增.scale_vec::4X支持,在.kind::mxf4nvf4下以.ue8m0作为.stype。为
cvt指令新增.s2f6x2指令类型支持。新增对
multimem.cp.async.bulk与multimem.cp.reduce.async.bulk指令的支持。
语义变更与澄清
无。
13.5. PTX ISA 9.0 版变更#
新增特性
PTX ISA 9.0 版引入以下新特性:
新增对
sm_88目标架构的支持。新增对
sm_110目标架构的支持。新增对目标架构
sm_110f的支持,该架构支持系列专用特性。新增对目标架构
sm_110a的支持,该架构支持架构专用特性。新增对 pragma
enable_smem_spilling的支持,该 pragma 用于为一个函数启用共享内存溢出。新增对 pragma
frequency的支持,该 pragma 用于指定基本块的执行频率。新增对指示符
.blocksareclusters的支持,该指示符用于指定 CUDA 线程块映射到 cluster。扩展
st.bulk指令的size操作数以支持 32 位长度。新增对性能调优指示符
.abi_preserve与.abi_preserve_control的支持,这两个指示符用于指定由函数调用方保留的数据寄存器与控制寄存器数量。
语义变更与澄清
同一 kernel 内的所有
tcgen05指令(tcgen05.alloc、tcgen05.dealloc、tcgen05.relinquish_alloc_permit、tcgen05.cp、tcgen05.shift、tcgen05.mma、tcgen05.mma.sp、tcgen05.mma.ws, tcgen05.mma.ws.sp、tcgen05.commit)必须为.cta_group限定符指定相同的值。
13.6. PTX ISA 8.8 版变更#
新增特性
PTX ISA 8.8 版引入以下新特性:
新增对
sm_103目标架构的支持。新增对目标架构
sm_103a的支持,该架构支持架构专用特性。新增对
sm_121目标架构的支持。新增对目标架构
sm_121a的支持,该架构支持架构专用特性。引入了以 “f” 后缀表示的系列专用目标架构。用于系列专用目标的 PTX 与同一系列中的所有后续目标兼容。新增对
sm_100f、sm_101f、sm_103f、sm_120f、sm_121f的支持。扩展
min与max指令以支持三个输入参数。扩展
tcgen05.mma指令,新增对scale_vectorsize限定符.block16与.block32以及 K 维度 96 的支持。扩展
tensormap.replace指令的.field3以支持 96B 重排模式。新增对
tcgen05.ld.red指令的支持。扩展
ld、ld.global.nc与st指令以支持 256b 加载/存储操作。-
表 73 列出了在系列专用目标上受支持的特性:
表 73 提升为系列专用架构的特性列表 特性
受支持的目标
.m16n8、.m16n16、.m8n16形状以及.b8类型(用于ldmatrix/stmatrix)sm_100f、sm_101f、sm_120ftcgen05的形状.16x64b、.16x128b、.16x256b、.16x32bx2、.32x32b、.4x256b、.32x128b、.64x128b、.128x256b、.128x128b、.31x256bsm_100f、sm_101fsetmaxnregsm_100f、sm_101f、sm_120f.cta_group修饰符sm_100f、sm_101fcvt配合.e2m1x2、.e3m2x2、.e2m3x2、.ue8m0x2sm_100f、sm_101f、sm_120fmultimem配合.acc::f16与.e5m2、.e5m2x2、.e5m2x4、.e4m3、.e4m3x2、.e4m3x4类型sm_100f、sm_101ftensormap.replacesm_100f、sm_101f、sm_120ftcgen05.ld.redsm_101f、sm_103ftcgen05.ld/st/fence/wait/commit/cp/alloc/dealloc/relinquish_alloc_permitsm_100f、sm_101ftcgen05.mma{.ws}{.sp}(kind::mxf4/kind::mxf4nvf4的.sp除外)sm_100f、sm_101ftcgen05的.kind::mxf4nvf4、.kind::mxf4、.kind::mxf8f6f4、.kind::f16、.kind::tf32、.kind::f8f6f4sm_100f、sm_101f.ashift、.collector_usage修饰符(用于tcgen05)sm_100f、sm_101f修饰符
.b8x16、.b6x16_p32、.b4x16_p64sm_100f、sm_101f、sm_120f.block_scale修饰符sm_100f、sm_101f、sm_120fmma{.sp}配合.e3m2、.e2m3、.e2m1类型以及.kind、.block_scale、.scale_vec_size修饰符(.sp配合mxf4/mxf4nvf4的情况除外)sm_120f.scale_vec::1X/2X/4X修饰符sm_120f.block16/.block32修饰符(作为scale_vec的别名)sm_100f、sm_101f.warpx2::02_13、.warpx2::01_23、.warpx4、.pack::16b、.unpack::16b修饰符(用于tcgen05)sm_100f、sm_101fclusterlaunchcontrol.try_cancel的multicast::cluster::allsm_100f、sm_101f、sm_120f.tile::scatter4、.tile::gather4、.im2col::w、.im2col::w::128sm_100f、sm_101fredux.f32sm_100fscale-input-d(用于tcgen05)sm_100f
语义变更与澄清
澄清了浮点转整数转换针对
NaN输入的行为。
13.7. PTX ISA 8.7 版变更#
新增特性
PTX ISA 8.7 版引入以下新特性:
新增对
sm_120目标架构的支持。新增对目标架构
sm_120a的支持,该架构支持架构专用特性。扩展
tcgen05.mma指令以支持.kind::mxf4nvf4与.scale_vec::4X限定符。扩展
mma指令以支持.f16类型累加器与.m16n8k16形状(配合 FP8 类型.e4m3与.e5m2)。扩展
cvt指令以支持.rs舍入模式及目标类型.e2m1x4、.e4m3x4、.e5m2x4、.e3m2x4、.e2m3x4。扩展对
st.async与red.async指令的支持,新增.mmio、.release、.global与.scope限定符支持。扩展
tensormap.replace指令,为.elemtype限定符新增对取值13至15的支持。扩展
mma与mma.sp::ordered_metadata指令,新增对类型.e3m2/.e2m3/.e2m1以及限定符.kind、.block_scale、.scale_vec_size的支持。
语义变更与澄清
澄清了在
.tile::gather4、.tile::scatter4模式下,张量坐标需要指定为 {col_idx, row_idx0, row_idx1, row_idx2, row_idx3},即 {x, y0, y1, y2, y3},而不是 {x0, x1, x2, x3, y}。更新了
tcgen05.mma指令的指令描述符,以澄清为将来使用而保留的位。
13.8. PTX ISA 8.6 版变更#
新增特性
PTX ISA 8.6 版引入以下新特性:
新增对
sm_100目标架构的支持。新增对目标架构
sm_100a的支持,该架构支持架构专用特性。新增对
sm_101目标架构的支持。新增对目标架构
sm_101a的支持,该架构支持架构专用特性。扩展
cp.async.bulk与cp.async.bulk.tensor指令,新增.shared::cta作为目标状态空间。扩展
fence指令以支持.acquire与.release限定符。扩展
fence与fence.proxy指令以支持.sync_restrict限定符。扩展
ldmatrix指令以支持.m16n16、.m8n16形状与.b8类型。扩展
ldmatrix指令以支持.src_fmt、.dst_fmt限定符。扩展
stmatrix指令以支持.m16n8形状与.b8类型。新增对
clusterlaunchcontrol指令的支持。扩展
add、sub与fma指令以支持混合精度浮点运算:以.f32作为目标操作数类型,以.f16/.bf16作为源操作数类型。扩展
add、sub、mul与fma指令以支持.f32x2类型。扩展
cvt指令的.tf32类型,以在.rn/.rz舍入模式下支持.satfinite限定符。扩展
cp.async.bulk指令以支持.cp_mask限定符与byteMask操作数。扩展
multimem.ld_reduce与multimem.st指令以支持.e5m2、.e5m2x2、.e5m2x4、.e4m3、.e4m3x2与.e4m3x4类型。扩展
cvt指令以支持与.e2m1x2、.e3m2x2、.e2m3x2及.ue8m0x2类型之间的转换。扩展
cp.async.bulk.tensor与cp.async.bulk.prefetch.tensor指令以支持新的 load_mode 限定符.tile::scatter4与.tile::gather4。扩展
tensormap.replace指令以新增.swizzle_atomicity限定符支持,从而支持新的重排模式。扩展
mbarrier.arrive、mbarrier.arrive_drop、.mbarrier.test_wait与.mbarrier.try_wait指令以支持.relaxed限定符。扩展
cp.async.bulk.tensor与cp.async.bulk.prefetch.tensor指令以支持新的 load_mode 限定符.im2col::w与.im2col::w::128。扩展
cp.async.bulk.tensor指令以支持新限定符.cta_group。新增对
st.bulk指令的支持。新增对 tcgen05 特性及相关指令的支持:
tcgen05.alloc、tcgen05.dealloc、tcgen05.relinquish_alloc_permit、tcgen05.ld、tcgen05.st、tcgen05.wait、tcgen05.cp、tcgen05.shift、tcgen05.mma、tcgen05.mma.sp、tcgen05.mma.ws、tcgen05.mma.ws.sp、tcgen05.fence与tcgen05.commit。扩展
redux.sync指令以支持配合.abs与.NaN限定符使用的.f32类型。
语义变更与澄清
无。
13.9. PTX ISA 8.5 版变更#
新增特性
PTX ISA 8.5 版引入以下新特性:
新增对
mma.sp::ordered_metadata指令的支持。
语义变更与澄清
稀疏性元数据(操作数
e)的取值0b0000、0b0101、0b1010、0b1111均为无效值,指令mma.sp对它们的使用会导致未定义行为。
13.10. PTX ISA 8.4 版变更#
新增特性
PTX ISA 8.4 版引入以下新特性:
使用
.b128类型扩展ld、st和atom指令,以支持.sys作用域。扩展整数
wgmma.mma_async指令,分别支持将.u8.s8和.s8.u8用作.atype和.btype。扩展
mma和mma.sp指令以支持 FP8 类型.e4m3和.e5m2。
语义变更与澄清
无。
13.11. PTX ISA 8.3 版变更#
新增特性
PTX ISA 8.3 版引入以下新特性:
新增对 pragma
used_bytes_mask的支持,该 pragma 用于为加载操作指定已使用字节的掩码。扩展
isspacep、cvta.to、ld和st指令,使其接受::entry和::func子限定符,配合.param状态空间限定符使用。为指令
ld、ld.global.nc、ldu、st、mov和atom新增对.b128类型的支持。新增对指令
tensormap.replace、tensormap.cp_fenceproxy的支持,并新增对限定符.to_proxykind::from_proxykind在指令fence.proxy上的支持,以支持修改tensor-map。
语义变更与澄清
无。
13.12. PTX ISA 8.2 版变更#
新增特性
PTX ISA 8.2 版引入以下新特性:
为
ld和st指令新增对.mmio限定符的支持。扩展
lop3指令以允许谓词目标。扩展
multimem.ld_reduce指令以支持.acc::f32限定符,从而允许中间累加采用.f32精度。扩展异步 Warpgroup 级矩阵乘累加运算
wgmma.mma_async以支持.sp修饰符,该修饰符允许在输入矩阵 A 为稀疏时执行矩阵乘累加运算 。
语义变更与澄清
cp.async.bulk 和 cp.async.bulk.tensor 指令上的 .multicast::cluster 限定符已针对目标架构
sm_90a 进行了优化,在其他目标架构上性能可能大幅下降,因此建议将
.multicast::cluster 与 sm_90a 配合使用。
13.13. PTX ISA 8.1 版变更#
新增特性
PTX ISA 8.1 版引入以下新特性:
新增对
st.async和red.async指令的支持,分别用于共享内存上的异步存储与 异步归约操作。为半精度
fma指令新增对.oob修饰符的支持。为
cvt指令在.f16、.bf16、.tf32格式上 新增对.satfinite饱和修饰符的支持。将带
.e4m3/.e5m2的cvt指令支持扩展至sm_89。扩展
atom和red指令以支持向量类型。新增对特殊寄存器
%aggr_smem_size的支持。以 64 位
min/max操作扩展sured指令。新增对增至 32764 字节的 kernel 参数大小的支持。
在内存一致性模型中新增对 multimem 地址的支持。
新增对
multimem.ld_reduce、multimem.st和multimem.red指令的支持,用于在 multimem 地址上执行内存操作。
语义变更与澄清
无。
13.14. PTX ISA 8.0 版变更#
新增特性
PTX ISA 8.0 版引入以下新特性:
新增对支持架构特定特性的目标架构
sm_90a的支持。新增对异步 Warpgroup 级矩阵乘累加运算
wgmma的支持。以作用于大数据(包括张量数据)的批量操作扩展异步复制操作 。
引入打包整数类型
.u16x2和.s16x2。扩展整数算术指令
add以允许打包整数类型.u16x2和.s16x2。扩展整数算术指令
min和max以允许打包整数类型.u16x2和.s16x2,以及在.s16x2和.s32类型上的饱和修饰符.relu。新增对特殊寄存器
%current_graph_exec的支持,该寄存器标识当前正在执行的 CUDA 设备图。新增对
elect.sync指令的支持。为函数和变量新增对
.unified属性的支持。新增对
setmaxnreg指令的支持。为
barrier.cluster指令新增对.sem限定符的支持。扩展
fence指令,以允许使用op_restrict限定符进行指令操作码特定的同步。新增对
.cluster作用域的支持,可用于mbarrier.arrive、mbarrier.arrive_drop、mbarrier.test_wait和mbarrier.try_wait操作。在
mbarrier对象上新增对事务计数操作的支持,通过.expect_tx和.complete_tx限定符指定。
语义变更与澄清
无。
13.15. PTX ISA 7.8 版变更#
新增特性
PTX ISA 7.8 版引入以下新特性:
新增对
sm_89目标架构的支持。新增对
sm_90目标架构的支持。扩展
bar和barrier指令以接受可选作用域限定符.cta。以可选子限定符
::cta扩展.shared状态空间限定符。新增对
movmatrix指令的支持,该指令跨 warp 转置寄存器中的矩阵。新增对
stmatrix指令的支持,该指令将一个或多个矩阵存储到共享内存。扩展
.f64浮点类型mma运算,支持形状.m16n8k4、.m16n8k8、 和.m16n8k16。扩展
add、sub、mul、set、setp、cvt、tanh、ex2、atom和red指令以支持bf16备选浮点数据格式。新增对备选浮点数据格式
.e4m3和.e5m2的支持。扩展
cvt指令以转换.e4m3和.e5m2备选浮点数据格式。新增对
griddepcontrol指令的支持,作为控制相关 grid 执行的 通信机制。扩展
mbarrier指令以允许新的相位完成检查操作 try_wait。新增对线程作用域
.cluster的支持,它是一组协同线程阵列(CTA)。扩展
fence/membar、ld、st、atom和red指令以接受.cluster作用域。新增对共享状态空间可见性的支持,可延伸至 cluster 内的所有线程。
以
::cluster子限定符扩展.shared状态空间限定符,实现 cluster 级的 共享内存可见性。扩展
isspacep、cvta、ld、st、atom和red指令以接受 配合.shared状态空间限定符的::cluster子限定符。新增对
mapa指令的支持,将共享内存地址映射到 cluster 内不同 CTA 中的 相应地址。新增对
getctarank指令的支持,查询包含给定地址的 CTA 的 秩。新增对新的栅栏同步指令
barrier.cluster的支持。扩展内存一致性模型以包含新的 cluster 作用域。
新增对与 cluster 信息相关的特殊寄存器
%is_explicit_cluster、%clusterid、%nclusterid、%cluster_ctaid、%cluster_nctaid、%cluster_ctarank、%cluster_nctarank的支持。新增对 cluster 维度指示符
.reqnctapercluster、.explicitcluster和.maxclusterrank的支持。
语义变更与澄清
无。
13.16. PTX ISA 7.7 版变更#
新增特性
PTX ISA 7.7 版引入以下新特性:
扩展
isspacep和cvta指令以纳入用于 kernel 函数参数的.param状态空间 。
语义变更与澄清
无。
13.17. PTX ISA 7.6 版变更#
新增特性
PTX ISA 7.6 版引入以下新特性:
支持
szext指令,对指定值执行符号扩展或零扩展 。支持
bmsk指令,从指定位位置开始创建指定位宽的位掩码 。支持特殊寄存器
%reserved_smem_offset_begin、%reserved_smem_offset_end、%reserved_smem_offset_cap和%reserved_smem_offset<2>。
语义变更与澄清
无。
13.18. PTX ISA 7.5 版变更#
新增特性
PTX ISA 7.5 版引入以下新特性:
增强调试信息,以支持在
.section调试指示符中使用标签差值和负值。支持在
cp.async指令上使用ignore-src操作数。-
扩展内存一致性模型,引入以下新概念:
将 内存代理 作为对不同内存访问方法的抽象标签。
虚拟别名,即访问同一物理内存位置的不同内存地址。
支持新的
fence.proxy和membar.proxy指令,以允许对通过虚拟别名执行的 内存访问进行同步。
语义变更与澄清
无。
13.19. PTX ISA 7.4 版变更#
新增特性
PTX ISA 7.4 版引入以下新特性:
支持
sm_87目标架构。支持
.level::eviction_priority限定符,可在ld、ld.global.nc、st和prefetch指令上指定缓存驱逐优先级提示。支持
.level::prefetch_size限定符,可在ld和cp.async指令上指定数据预取提示。支持
createpolicy指令,可构造不同类型的缓存 驱逐策略。支持
.level::cache_hint限定符,可在ld、ld.global.nc、st、atom、red和cp.async指令上使用缓存驱逐策略。支持对缓存数据执行
applypriority和discard操作。
语义变更与澄清
无。
13.20. PTX ISA 7.3 版变更#
新增特性
PTX ISA 7.3 版引入以下新特性:
扩展初始值设定项中使用的
mask()运算符,使其也支持整数常量表达式。新增对栈操作指令的支持,这些指令允许使用
stacksave和stackrestore指令操作栈,并使用alloca指令分配每线程栈。
语义变更与澄清
较早 PTX ISA 规范中未实现的 alloca 版本已在 PTX ISA 7.3 版中
由新的栈操作指令取代。
13.21. PTX ISA 7.2 版变更#
新增特性
PTX ISA 7.2 版引入以下新特性:
增强
.loc指示符以表示内联函数信息。新增支持在调试节中定义标签。
扩展
min和max指令以支持.xorsign和.abs修饰符。
语义变更与澄清
无。
13.22. PTX ISA 7.1 版变更#
新增特性
PTX ISA 7.1 版引入以下新特性:
支持
sm_86目标架构。新增运算符
mask(),用于从初始值设定项中使用的变量地址提取特定字节 。扩展
tex和tld4指令以返回可选谓词,指示指定坐标处的数据是否 驻留在内存中。扩展单位形式
wmma和mma指令以支持.and运算。扩展
mma指令以支持.sp修饰符,该修饰符允许在输入矩阵 A 为稀疏时 执行矩阵乘累加运算。扩展
mbarrier.test_wait指令以测试特定相位奇偶校验的完成情况。
语义变更与澄清
无。
13.23. PTX ISA 7.0 版变更#
新增特性
PTX ISA 7.0 版引入以下新特性:
支持
sm_80目标架构。新增对异步复制指令的支持,这些指令允许将数据从一个状态空间异步复制到 另一个状态空间。
新增对
mbarrier指令的支持,这些指令允许在内存中创建 mbarrier 对象, 并使用这些对象来同步线程以及由线程发起的异步复制操作。新增对
redux.sync指令的支持,该指令允许在 warp 内的线程间执行归约操作 。新增对备选浮点数据格式
.bf16和.tf32的支持。扩展
wmma指令以支持形状为.m8n8k4的.f64类型。扩展
wmma指令以支持.bf16数据格式。扩展
wmma指令以支持形状为.m16n16k8的.tf32数据格式。扩展
mma指令以支持形状为.m8n8k4的.f64类型。扩展
mma指令以支持.bf16和.tf32数据格式,形状为.m16n8k8。扩展
mma指令以支持新形状.m8n8k128、.m16n8k4、.m16n8k16、.m16n8k32、.m16n8k64、.m16n8k128和.m16n8k256。扩展
abs和neg指令以支持.bf16和.bf16x2数据格式。扩展
min和max指令以支持.NaN修饰符及.f16、.f16x2、.bf16和.bf16x2数据格式。扩展
fma指令以支持.relu饱和模式以及.bf16和.bf16x2数据格式。扩展
cvt指令以支持.relu饱和模式及.f16、.f16x2、.bf16、.bf16x2和.tf32目标格式。新增对
tanh指令的支持,该指令计算双曲正切。扩展
ex2指令以支持.f16和.f16x2类型。
语义变更与澄清
无。
13.24. PTX ISA 6.5 版变更#
新增特性
PTX ISA 6.5 版引入以下新特性:
新增对半精度比较指令
set的整数目标类型支持。扩展
abs指令以支持.f16和.f16x2类型。新增对
cvt.pack指令的支持,该指令允许转换两个整数值并将结果打包在一起。为
mma指令新增.m16n8k8、.m8n8k16和.m8n8k32形状。新增对
ldmatrix指令的支持,该指令为mma指令从共享内存加载一个或多个矩阵。
已移除特性
PTX ISA 6.5 版移除以下特性:
移除了在浮点
wmma.mma指令上使用.satfinite限定符的支持。该支持自 PTX ISA 6.4 版起已弃用。
语义变更与澄清
无。
13.25. PTX ISA 6.4 版变更#
新增特性
PTX ISA 6.4 版引入以下新特性:
新增对
.noreturn指示符的支持,可用于指示某个函数不返回其调用方函数。新增对
mma指令的支持,该指令允许执行矩阵乘加运算。
已弃用特性
PTX ISA 6.4 版弃用以下特性:
在浮点
wmma.mma指令上使用.satfinite限定符的支持。
已移除特性
PTX ISA 6.4 版移除以下特性:
针对
.targetsm_70及更高架构,移除了不带.sync限定符的shfl和vote指令支持。如 PTX ISA 6.2 版所述,该支持自 PTX ISA 6.0 版起已弃用。
语义变更与澄清
澄清了解析
.weak符号的引用时,仅考虑同名的.weak或.visible符号,不考虑同名的局部符号。澄清了在
cvt指令中,仅当.atype或.dtype为.f32时才能指定修饰符.ftz。
13.26. PTX ISA 6.3 版变更#
新增特性
PTX ISA 6.3 版引入以下新特性:
新增对
sm_75目标架构的支持。新增对一条新指令
nanosleep的支持,该指令将线程挂起指定的时长。新增对
.alias指示符的支持,该指示符允许为函数符号定义别名。扩展
atom指令以执行.f16加法运算和.cas.b16运算。扩展
red指令以执行.f16加法运算。扩展
wmma指令以支持类型为.s8、.u8、.s4、.u4、.b1的被乘数矩阵以及类型为.s32的累加器矩阵。
语义变更与澄清
为所有
wmma指令引入了必需的.aligned限定符。规定了传递给
wmma.load和wmma.store的基地址与步长参数所需的对齐。澄清了
wmma运算返回的 fragment 布局依赖于架构,并且在为不同链接兼容 SM 架构编译的函数之间传递wmmafragment 可能无法按预期工作。澄清了
{atom/red}.f16x2}运算的原子性针对两个.f16元素分别保证,但不保证作为单个 32 位访问是原子的。
13.27. PTX ISA 6.2 版变更#
新增特性
PTX ISA 6.2 版引入以下新特性:
新增一条用于查询 warp 中活动线程的指令
activemask。扩展原子与归约指令以执行
.f16x2加法运算,需带必需的.noftz限定符。
已弃用特性
PTX ISA 6.2 版弃用以下特性:
不带
.sync的shfl和vote指令的用法被追溯性地自 PTX ISA 6.0 版起弃用,该版本引入了实现独立线程调度的sm_70架构。
语义变更与澄清
澄清了
wmma指令只能在已知 warp 中所有线程对条件的求值结果一致时,才可用于条件执行代码,否则行为未定义。在内存一致性模型中,更新了道德强操作的定义,将栅栏从完全重叠的要求中排除,因为栅栏不访问内存。
13.28. PTX ISA 6.1 版变更#
新增特性
PTX ISA 6.1 版引入以下新特性:
新增对
sm_72目标架构的支持。新增对
wmma指令中32x8x16和8x32x16新矩阵形状的支持。
语义变更与澄清
无。
13.29. PTX ISA 6.0 版变更#
新增特性
PTX ISA 6.0 版引入以下新特性:
新增对
sm_70目标架构的支持。规定了在
sm_70及更高架构上运行的程序的内存一致性模型。对内存指令的多项扩展,用于指定内存同步语义以及可观察到该同步的作用域。
新增用于矩阵运算的
wmma指令,允许从内存加载矩阵、对其执行乘加运算并将结果存储到内存。新增对新
barrier指令的支持。扩展
neg指令以支持.f16和.f16x2类型。新增一条
fns指令,允许查找整数中第 n 个被置位的比特。新增一条
bar.warp.sync指令,允许同步 warp 中的线程。扩展
vote和shfl指令,加入.sync修饰符,在执行vote和shfl运算前分别等待指定线程。新增一条
match.sync指令,允许在 warp 中的线程间广播并比较一个值。新增一条
brx.idx指令,允许跳转到从候选目标列表中索引的标签。新增对
.func的无大小数组参数的支持,可用于实现可变参数函数。新增对 dwarf-lines 中
.b16整数类型的支持。新增对使用
mov指令取设备函数返回参数地址的支持。
语义变更与澄清
更新了
bar指令的语义,指明执行线程会等待其 warp 中其他未退出的线程。从规范中移除了 PTX 2.1 引入但从未实现的间接跳转支持。
从规范中移除了取标签地址、在初始化器中使用标签等从未实现的支持。
从规范中移除了从未实现的可变参数函数支持。
13.30. PTX ISA 5.0 版变更#
新增特性
PTX ISA 5.0 版引入以下新特性:
新增对
sm_60、sm_61、sm_62目标架构的支持。扩展原子与归约指令以执行双精度加法运算。
扩展原子与归约指令以指定
scope修饰符。新增
.common指示符,允许链接包含同一符号不同大小声明的多个目标文件。新增
dp4a指令,允许执行带累加的 4 路点积运算。新增
dp2a指令,允许执行带累加的 2 路点积运算。新增对特殊寄存器
%clock_hi的支持。
语义变更与澄清
澄清了 ld 和 st 指令上缓存修饰符的语义,指明缓存运算仅被视为性能提示,不会改变程序的内存一致性行为。
澄清了 ld 和 st 指令上 volatile 运算的语义,指明优化编译器如何处理 volatile 运算。
13.31. PTX ISA 4.3 版变更#
新增特性
PTX ISA 4.3 版引入以下新特性:
新增
lop3指令,允许对 3 个输入执行任意逻辑运算。新增对扩展精度算术指令中 64 位计算的支持。
扩展
tex.grad指令以支持cube和acube几何类型。扩展
tld4指令以支持a2d、cube和acube几何类型。扩展
tex和tld4指令以支持偏移向量和深度比较的可选操作数。扩展
txq指令以支持从特定 LOD 查询纹理字段。
语义变更与澄清
无。
13.32. PTX ISA 4.2 版变更#
新增特性
PTX ISA 4.2 版引入以下新特性:
新增对
sm_53目标架构的支持。新增针对
.f16和.f16x2类型的算术、比较与纹理指令支持。新增对曲面
memory_layout字段的支持,以及用于查询该字段的suq指令支持。
语义变更与澄清
更新了 ABI 下参数传递的语义,指明用于参数传递的 ld.param 和 st.param 指令不能带谓词。
更新了 {atom/red}.add.f32 的语义,指明对全局内存的原子运算会将次正规输入和结果冲洗为保留符号的零;而对共享内存的原子运算会保留次正规输入和结果,不将其冲洗为零。
13.33. PTX ISA 4.1 版变更#
新增特性
PTX ISA 4.1 版引入以下新特性:
新增对
sm_37和sm_52目标架构的支持。新增对纹理的
array_size、num_mipmap_levels和num_samples新字段的支持,以及用于查询这些字段的txq指令支持。新增对曲面的
array_size新字段的支持,以及用于查询该字段的suq指令支持。新增对特殊寄存器
%total_smem_size和%dynamic_smem_size的支持。
语义变更与澄清
无。
13.34. PTX ISA 4.0 版变更#
新增特性
PTX ISA 4.0 版引入以下新特性:
支持
sm_32与sm_50目标架构。支持 64 位性能计数器特殊寄存器
%pm0_64,..,%pm7_64。新增
istypep指令。新增指令
rsqrt.approx.ftz.f64,用于计算值的平方根倒数的快速近似。支持用于指定变量特殊属性的新指示符
.attribute。支持
.managed变量属性。
语义变更与澄清
vote 指令的语义已更新,以明确说明 warp 中的非活动线程在参与 vote.ballot.b32 时,其对应条目贡献 0。
13.35. PTX ISA 3.2 版变更#
新增特性
PTX ISA 3.2 版引入以下新特性:
纹理指令支持从多重采样纹理与多重采样数组纹理中读取。
扩展
.section调试指示符,使其包含标签加立即数的表达式。扩展
.file指示符,使其包含时间戳与文件大小信息。
语义变更与澄清
vavrg2 与 vavrg4 指令的语义已更新,指明仅当 Va[i] + Vb[i] 非负时该指令才加 1,且加法结果右移 1 位(而不是除以 2)。
13.36. PTX ISA 3.1 版变更#
新增特性
PTX ISA 3.1 版引入以下新特性:
支持
sm_35目标架构。支持 CUDA 动态并行(CUDA Dynamic Parallelism),使 kernel 能够创建并同步新的工作。
ld.global.nc,经由非一致性纹理缓存加载只读全局数据。新增漏斗移位指令
shf。扩展原子指令与归约指令,以执行 64 位
{and, or, xor}运算以及 64 位整数{min, max}运算。新增对
mipmaps的支持。新增对纹理与表面的间接访问支持。
将通用寻址的支持范围扩展到
.const状态空间,并新增运算符generic(),用于为初始化器中使用的.global或.const变量构造通用地址。新增
.weak指示符,允许链接包含同一符号声明的多个目标文件。
语义变更与澄清
PTX 3.1 重新定义了初始化器中全局变量的默认寻址方式,由通用地址改为全局状态空间中的偏移。遗留 PTX 代码被视为在初始化器中使用的每个全局变量都带有隐式的 generic() 运算符。PTX 3.1 代码应当要么在初始化器中包含显式的 generic() 运算符,要么使用 cvta.global 在运行时构造通用地址,要么使用 ld.global 从非通用地址加载。
mad.f32 指令要求在 sm_20 及更高的目标上使用舍入修饰符。但对于 PTX ISA 3.0 及更早版本,ptxas 并不强制这一要求,mad.f32 会静默地默认为 mad.rn.f32。对于 PTX ISA 3.1 版,ptxas 会生成一条警告并默认为 mad.rn.f32;在后续发布版本中,ptxas 将针对 PTX ISA 3.2 及更高版本强制执行这一要求。
13.37. PTX ISA 3.0 版变更#
新增特性
PTX ISA 3.0 版引入以下新特性:
支持
sm_30目标架构。SIMD 视频指令。
新的 warp 洗牌指令。
指令
mad.cc与madc,用于高效的扩展精度整数乘法。支持 3D 与数组几何的表面指令。
纹理指令支持从 cubemap 与 cubemap 数组纹理中读取。
平台选项
.targetdebug,用于声明某个 PTX 模块包含DWARF调试信息。pmevent.mask,用于触发多个性能监视事件。性能监视计数器特殊寄存器
%pm4..%pm7。
语义变更与澄清
特殊寄存器 %gridid 已由 32 位扩展为 64 位。
PTX ISA 3.0 版在编译为应用二进制接口(ABI)时,弃用模块作用域的 .reg 与 .local 变量。在编译时不使用 ABI 的情况下,模块作用域的 .reg 与 .local 变量仍像以前一样受支持。编译包含模块作用域 .reg 或 .local 变量的遗留 PTX 代码(3.0 之前的 ISA 版本)时,编译器会静默地禁用 ABI 的使用。
shfl 指令的语义已更新,以明确说明对于 warp 内的非活动线程与被谓词关闭的线程,源操作数 a 的值是不可预测的。
PTX 模块不再允许重复的 .version 指示符。该特性此前从未实现,因此不存在语义变更。
未实现的指令 suld.p 与 sust.p.{u32,s32,f32} 已被移除。
13.38. PTX ISA 2.3 版变更#
新增特性
PTX 2.3 新增对纹理数组的支持。纹理数组特性支持访问由 1D 或 2D 纹理组成的数组:用一个整数索引纹理数组,随后使用一到两个单精度浮点坐标在所选的 1D 或 2D 纹理内进行寻址。
PTX 2.3 新增指示符 .address_size,用于指定地址的大小。
.const 与 .global 状态空间中的变量默认初始化为零。
语义变更与澄清
.maxntid 指示符的语义已更新,以与当前实现保持一致。具体而言,.maxntid 仅保证线程块中的线程总数不超过该最大值。此前的语义表明该最大值在各个维度上分别被强制执行,而事实并非如此。
位域提取与插入指令 BFE 与 BFI 现已指明 len 与 pos 操作数的取值限制在 0..255 范围内。
未实现的指令 {atom,red}.{min,max}.f32 已被移除。
13.39. PTX ISA 2.2 版变更#
新增特性
PTX 2.2 新增用于指定 kernel 参数属性的指示符;具体而言,新增了若干指示符,分别用于指定某个 kernel 参数是指针、指定该参数指向哪个状态空间,以及可选地指定该参数所指向内存的对齐要求。
PTX 2.2 在 .samplerref 不透明类型中新增了一个名为 force_unnormalized_coords 的字段。该字段用于独立纹理模式,以覆盖纹理头中的 normalized_coords 字段。之所以需要该字段,是为了支持 OpenCL 这类语言,它们在采样器头而非纹理头中表示归一化/未归一化坐标这一属性。
PTX 2.2 弃用显式常量存储体,并为 .const 状态空间支持一个较大的平坦地址空间。使用显式常量存储体的遗留 PTX 仍然受支持。
PTX 2.2 新增 tld4 指令,用于从构成给定纹理位置双线性插值覆盖范围的四个 texel 中加载某个分量(r、g、b 或 a)。该指令可用于在软件中计算精度更高的双线性插值结果,或用于执行带宽更高的纹理加载。
语义变更与澄清
无。
13.40. PTX ISA 2.1 版变更#
新增特性
PTX ISA 2.1 版为 sm_2x 目标支持底层的基于栈的 ABI。
sm_2x 目标已实现间接调用的支持。
新增指示符 .branchtargets 与 .calltargets,用于指定间接分支与间接函数调用的可能目标。新增 .callprototype 指示符,用于声明间接函数调用的类型签名。
.global 与 .const 变量的名称现在可以出现在变量初始化器中,以表示这些变量的地址。
新增一组 32 个驱动程序特定的执行环境特殊寄存器,命名为 %envreg0..%envreg31。
纹理与表面新增了通道数据类型与通道顺序字段,txq 与 suq 指令支持对这些字段进行查询。
指示符 .minnctapersm 取代了 .maxnctapersm 指示符。
新增指示符 .reqntid,允许指定确切的 CTA 维度。
新增指令 rcp.approx.ftz.f64,用于计算快速而粗略的近似倒数。
语义变更与澄清
若指定了 .minnctapersm 却未同时指定 .maxntid,则会输出一条警告。
13.41. PTX ISA 2.0 版变更#
新增特性
浮点扩展
本节介绍 PTX ISA 2.0 版针对 sm_20 目标的浮点变更。其目标是在尽可能实现 IEEE 754 兼容的同时,最大限度地保持与遗留 PTX ISA 1.x 代码及 sm_1x 目标的向后兼容性。
相对于 PTX ISA 1.x 版的变更如下:
对于
sm_20目标,单精度指令默认支持次正规数。可使用.ftz修饰符来强制保持与sm_1x的兼容性。对于
sm_20目标,单精度add、sub与mul现已支持.rm与.rp舍入修饰符。新增单精度融合乘加(fma)指令,支持符合 IEEE 754 的舍入修饰符并支持次正规数。
fma.f32指令还支持.ftz与.sat修饰符。fma.f32要求sm_20。mad.f32指令已扩展出舍入修饰符,因此对于sm_20目标它与fma.f32含义相同。对于sm_20目标,fma.f32与mad.f32都要求提供舍入修饰符。mad.f32指令不带舍入的形式予以保留,以便编译器为sm_1x目标生成代码。为sm_1x编译的代码在sm_20设备上执行时,mad.f32映射到fma.rn.f32。新增采用符合 IEEE 754 舍入的单精度与双精度
div、rcp与sqrt。这类形式通过是否使用舍入修饰符来标识,并要求sm_20。新增
testp与copysign指令。
新增指令
新增统一加载指令 ldu。
表面指令支持额外的 .clamp 修饰符,即 .clamp 与 .zero。
sust 指令现已支持格式化表面存储。
新增统计前导零个数指令 clz。
新增查找前导非符号位指令 bfind。
新增位反转指令 brev。
新增位域提取与插入指令 bfe 与 bfi。
新增位计数指令 popc。
新增投票 ballot指令 vote.ballot.b32。
指令 {atom,red}.add.f32 已实现。
针对 sm_20 目标,指令 {atom,red}.shared 已扩展以处理 64 位数据类型。
新增系统级 membar 指令 membar.sys。
bar 指令的扩展如下:
新增
bar.arrive指令。新增
bar.red.popc.u32与bar.red.{and,or}.pred指令。bar现已支持可选的线程计数与寄存器操作数。
新增标量视频指令(包含 prmt)。
新增 isspacep 指令,用于查询某个通用地址是否落在指定状态空间的窗口之内。
新增 cvta 指令,用于在全局、局部与共享地址和通用地址之间进行相互转换。
其他新增特性
指令 ld、ldu、st、prefetch、prefetchu、isspacep、cvta、atom 与 red 现已支持通用寻址。
新增特殊寄存器 %nwarpid、%nsmid、%clock64、%lanemask_{eq,le,lt,ge,gt}。
为指令 ld、st、suld 与 sust 新增了缓存操作,例如用于将数据prefetching到内存层次结构中的指定层级。此外还新增了指令 prefetch 与 prefetchu。
指示符 .maxnctapersm 被弃用,并由 .minnctapersm 取代,以更贴合其行为与用途。
新增指示符 .section,用于取代 @@DWARF 语法,以通过 PTX 传递 DWARF 格式的调试信息。
新增指示符 .pragma nounroll,允许用户禁用循环展开。
语义变更与澄清
修复了 PTX ISA 1.4 及更早版本中 cvt.ftz 的勘误:当源类型或目标类型的大小为 64 位时,单精度次正规输入与结果未被冲洗为零。在 PTX ISA 1.5 及更高版本中,cvt.ftz(以及针对 .target sm_1x 的 cvt,其中隐含 .ftz)指令会在浮点指令类型的所有组合下,将单精度次正规输入与结果冲洗为保留符号的零。为保持与遗留 PTX 代码的兼容性,若 .version 为 1.4 或更早,则仅当源与目标类型的大小都不是 64 位时,单精度次正规输入与结果才被冲洗为保留符号的零。
特殊寄存器 %tid、%ntid、%ctaid 与 %nctaid 的各分量已由 16 位扩展为 32 位。这些寄存器现在的类型为 .v4.u32。
PTX ISA 1.5 版中曾错误地将独立纹理模式下可用的采样器数量列为三十二个;正确的数量是十六个。