CUDA: Можно ли передавать указатель на структуру функции устройства? - PullRequest
1 голос
/ 22 сентября 2011

Внутри ядра, нормально ли передавать адрес структуры, объявленной внутри ядра, функции устройства?Аргументом функции устройства является указатель на структуру.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Да, как показывает следующая программа:

#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 голос
/ 22 сентября 2011

Если вы выделили память на устройстве и используете ее только внутри устройства, то да, вы можете передать ее любой функции устройства по вашему желанию.

Единственное время, когда вам нужно беспокоиться о чем-либо подобном, это когда вы хотите использовать адрес с хоста на устройстве или адрес с устройства на хосте. В этих случаях вы должны сначала использовать соответствующую memcopy и получить новое устройство или конкретный адрес хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...