1
在內核中,可以將在內核中聲明的結構地址傳遞給設備函數嗎?設備函數的參數是一個指向結構體的指針。CUDA:是否可以將指針傳遞給設備函數的結構?
在內核中,可以將在內核中聲明的結構地址傳遞給設備函數嗎?設備函數的參數是一個指向結構體的指針。CUDA:是否可以將指針傳遞給設備函數的結構?
是,如下面的程序演示:
#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
如果您已經在設備上分配了內存並僅在設備中使用它,那麼您可以將它傳遞給您想要的任何設備功能。
您唯一需要擔心的事情就是當您想要使用設備上主機的地址或主機上設備的地址時。在這些情況下,您必須先使用適當的memcopy並獲取新設備或主機特定地址。