在 CUDA 中,给定指针的值或变量的地址,是否有一个内在的或另一个 API 将内省指针所指的地址空间?
问问题
278 次
1 回答
6
CUDA头文件sm_20_intrinsics.h
定义函数
__device__ unsigned int __isGlobal(const void *ptr)
{
unsigned int ret;
asm volatile ("{ \n\t"
" .reg .pred p; \n\t"
" isspacep.global p, %1; \n\t"
" selp.u32 %0, 1, 0, p; \n\t"
#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__)
"} \n\t" : "=r"(ret) : "l"(ptr));
#else
"} \n\t" : "=r"(ret) : "r"(ptr));
#endif
return ret;
}
1
如果通用地址ptr
在全局内存空间中,则此函数返回。0
如果ptr
在共享、本地或常量内存空间中,则返回。
PTX 指令isspacep
完成了繁重的工作。看起来我们应该能够以这种方式构建类似的函数:
__device__ unsigned int __isShared(const void *ptr)
{
unsigned int ret;
asm volatile ("{ \n\t"
" .reg .pred p; \n\t"
" isspacep.shared p, %1; \n\t"
" selp.u32 %0, 1, 0, p; \n\t"
#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__)
"} \n\t" : "=r"(ret) : "l"(ptr));
#else
"} \n\t" : "=r"(ret) : "r"(ptr));
#endif
return ret;
}
于 2013-05-21T20:17:26.587 回答