什么是PTX代码呢?类似于高级语言编译器编译出来的汇编指令,PTX代码就是可以在GPU端执行的汇编指令。查看PTX代码可以更加直观的修改kernel代码。
在这里举个查看PTX代码必要性的例子。了解GPU基础架构的小伙伴们都知道,在GPU的存储层次中有个存储位置叫做“local memory”,它是在寄存器数量不足的情况下的一种补充,虽然名字叫做local memory,但是它位于global memory,这就意味这它的速度远远要慢于寄存器,也就是说我们应该避免使用它。那在什么情况下会使用这块显存呢?翻阅了很多资料,只得出了一种结论——“在寄存器数量不足的情况下,编译器会自动将数据分配到local memory”。但是,在如下的代码中,local memory的使用量不为0,也就是说kernel函数中有变量使用了local memory:
__global__ void test(float *left, float *right, float *result, int size)
{
if(threadIdx.x < size)
result[threadIdx.x] = left[threadIdx.x] + right[threadIdx.x];
}
究竟是哪个变量使用了PTX代码呢?通过查看,发现变量size被分配到了local memory中,因为是值传递,如果是指针传递,就不会发生将size分配到local memory中的这种情况了。
小伙伴们也来谈谈PTX代码的特殊经历吧~!!