2011-09-21 81 views

回答

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

如果您已經在設備上分配了內存並僅在設備中使用它,那麼您可以將它傳遞給您想要的任何設備功能。

您唯一需要擔心的事情就是當您想要使用設備上主機的地址或主機上設備的地址時。在這些情況下,您必須先使用適當的memcopy並獲取新設備或主機特定地址。