私のカーネルには、次のような 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 があり、それぞれに 32 個のスカラー プロセッサがあるため、上記のコードは SM で 10 回実行されます。予想どおり、実行された命令の数は 10*13 = 130 になるはずです。しかし、プロファイリングした後の結果は、発行された命令 = 130、実行された命令 = 100 です。1. 発行された命令の数と実行された命令の数が異なるのはなぜですか? 枝がないから対等じゃないの?2. 実行された命令の数が予想よりも少ないのはなぜですか? 少なくとも ptx バージョンのすべての命令を実行する必要がありますか? 3. キャッシュ ミス (L1 および L2) は、発行された命令の数と実行された命令の数に影響を与えますか? ありがとう