У моего ядра версия 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) на количество выданных инструкций и количество выполненных инструкций?
Спасибо