在设备函数 CUDA 中引用倾斜指针

问题描述 投票:0回答:1

我已经使用

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__
。有什么办法可以做到吗?

cuda
1个回答
0
投票

这样的东西应该有效:

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
变量。

© www.soinside.com 2019 - 2024. All rights reserved.