我的内核有这样的 ptx 版本:
.version 2.2
.target sm_20, texmode_independent
.entry histogram(
.param .u32 .ptr .global .align 4 histogram_param_0,
.param .u32 .ptr .global .align 4 histogram_param_1
)
{
.reg .f32 %f<2>;
.reg .s32 %r<12>;
_histogram:
mov.u32 %r1, %tid.x;
mov.u32 %r2, %envreg3;
add.s32 %r3, %r1, %r2;
mov.u32 %r4, %ctaid.x;
mov.u32 %r5, %ntid.x;
mad.lo.s32 %r6, %r4, %r5, %r3;
shl.b32 %r7, %r6, 2;
ld.param.u32 %r8, [histogram_param_0];
add.s32 %r9, %r8, %r7;
ld.param.u32 %r10, [histogram_param_1];
ld.global.f32 %f1, [%r9];
add.s32 %r11, %r10, %r7;
st.global.f32 [%r11], %f1;
ret;
}
我数了一下,我的内核中只有 13 条指令(不包括 ret 指令)。当我将工作项的数量设置为5120时,工作组大小为64。因为有16个SM,每个SM有32个标量处理器,所以上面的代码将在一个SM中执行10次。正如我预期的那样,执行指令的数量应该是10*13 = 130。但是经过我的分析,结果是:发出指令=130,执行指令=100。1. 为什么发出指令的数量与执行指令的数量不同?没有分支,所以它们不应该是平等的吗?2. 为什么执行的指令数比预期的少?至少应该执行 ptx 版本中的所有指令吗?3. 缓存未命中(L1 和 L2)对发出指令的数量和执行的指令数量有影响吗?谢谢