我具有以下内联汇编功能,可在 32 位 Visual Studio 2008 的调试模式下正常工作:
__device__ void add(int* pa, int* pb)
{
asm(".reg .u32 s<3>;"::);
asm(".reg .u32 r<14>;"::);
asm("ld.global.b32 s0, [%0];"::"r"(&pa)); //load addresses of pa, pb
printf(...);
asm("ld.global.b32 s1, [%0];"::"r"(&pb));
printf(...);
asm("ld.global.b32 r1, [s0+8];"::);
printf(...);
asm("ld.global.b32 r2, [s1+8];"::);
printf(...);
...// perform some operations
}
pa 和 pb 在设备上全局分配,例如
__device__ int pa[3] = {0, 0x927c0000, 0x20000011};
__device__ int pb[3] = {0, 0xbb900000, 0x2000000b};
但是,此代码在发布模式下失败,在线asm("ld.global.b32 r1, [s0+8];"::);
如何在发布模式下使用内联 ptx 正确加载函数参数?
PS 使用 -G 标志(生成 GPU 调试信息)构建发布模式会导致代码在发布模式下正确运行。谢谢,