我是一个CUDA编程的初学者,有一个问题。
当我按值传递参数时,就像这样:
自变量a和b作为副本值在函数调用堆栈中传递给内核函数add,所以我猜测需要复制一些内存空间。
如果我是正确的,那么这些参数被复制到GPU还是主机的主内存中?
我关心这个问题的原因是我应该将一个大的结构体传递给内核函数。
我也考虑过传递结构体的指针,但这种方式似乎需要为结构体和每个成员变量调用cudamalloc。
当我按值传递参数时,就像这样:
__global__ void add(int a, int b, int *c) {
// some operations
}
自变量a和b作为副本值在函数调用堆栈中传递给内核函数add,所以我猜测需要复制一些内存空间。
如果我是正确的,那么这些参数被复制到GPU还是主机的主内存中?
我关心这个问题的原因是我应该将一个大的结构体传递给内核函数。
我也考虑过传递结构体的指针,但这种方式似乎需要为结构体和每个成员变量调用cudamalloc。
__constant__
内存中,这是一种特殊类型的设备内存。通常,在内核代码的开头,需要的参数将从__constant__
内存复制到寄存器中。有关此内容,请参阅编程指南此处。 - Robert Crovella