我已经使用
cudaMalloc3D
使用 cudaPitchedPtr
创建了 3D 矩阵,我也想从设备函数引用创建的矩阵。将倾斜指针复制到 __device__ cudaPitchedPtr
然后引用它是否有效?例如-
cudaPitchedPtr rho_pitchedPtr;
__device__ int doSomethingWithRho() {
rho_ptr = rho_pitchedPtr.ptr;
//use rho_ptr
}
int main() {
cudaMalloc3D(rho_pitchedPtr,...);
}
我无法直接在
rho_pitchedPtr
函数中引用 __device__
。有什么办法可以做到吗?
这样的东西应该有效:
cudaPitchedPtr rho_pitchedPtr;
__device__ int doSomethingWithRho(cudaPitchedPtr myrho) {
void *rho_ptr = myrho.ptr; // you would actually use something like int * or float *
//use rho_ptr
}
__global__ void k(cudaPitchedPtr myrho){
doSomethingWithRho(myrho);}
int main() {
cudaMalloc3D(rho_pitchedPtr,...);
k<<<1,1>>>(rho_pitchedPtr);
}
如果不通过参数列表传递它,您将无法直接在设备代码中使用
rho_pitchedPtr
,如我所示。一般来说,基于主机的变量(即 rho_pitchedPtr
是什么),即使在全局范围内,也不能在设备代码中直接引用,除了 const
变量的 exceptions之外。
const
变量例外不适用于结构(这就是rho_pitchedPtr
),而且无论如何你都无法将它合理地用作const
变量。