CUDA:将指向struct的指针传递给设备函数是否可以?

时间:2011-09-21 21:40:48

标签: cuda

在内核中,是否可以将在内核中声明的结构的地址传递给设备函数?设备函数的参数是指向结构的指针。

2 个答案:

答案 0 :(得分:2)

是的,正如以下程序所示:

#include <stdio.h>

struct my_struct
{
  int x;
};

// foo receives its argument by pointer
__device__ void foo(my_struct *a)
{
  a->x = 13;
}

__global__ void kernel()
{
  my_struct a;
  a.x = 7;

  // expect 7 in the printed output
  printf("a.x before foo: %d\n", a.x);

  foo(&a);

  // expect 13 in the printed output
  printf("a.x after foo: %d\n", a.x);
}

int main()
{
  kernel<<<1,1>>>();
  cudaThreadSynchronize();
  return 0;
}

结果:

$ nvcc -arch=sm_20 test.cu -run
a.x before foo: 7
a.x after foo: 13

答案 1 :(得分:1)

如果您已在设备上分配内存并仅在设备中使用它,那么您可以将其传递给您想要的任何设备功能。

您唯一需要担心的是,您希望使用设备主机上的地址或主机上设备的地址。在这些情况下,您必须首先使用适当的memcopy并获取新设备或主机特定地址。