【发布时间】:2019-12-27 02:22:26
【问题描述】:
如果我理解正确,CUDA 设备有几个不同的memory spaces。 (例如注册、本地、共享、全局等)。调用cudaMalloc()时,分配的内存驻留在哪个内存空间?
例如:
__global__ mykernel (void *p) {
/* What memory space does p point to? */
printf("p: %p\n", p);
}
int main() {
void *p;
assert(cudaMalloc (&p, 1024) == CUDA_SUCCESS);
mykernel<<<1,1024>>> (p);
}
documentation 没有提到分配内存的级别。它只是说
在设备上分配
size字节的线性内存并返回一个指向分配内存的指针。分配的内存适合任何类型的变量对齐。内存没有清空。
似乎内存必须驻留在全局/常量/纹理空间之一中,但哪个?
假设内存永远不会在本地/寄存器/共享内存空间中是否也安全?
【问题讨论】: