这是我的代码
#include "stdafx.h"
#include <iostream>
using namespace std;
#define n 10
__device__ int glMem[n];
__global__ void initVals()
{
for(int i=0;i<n;i++)
glMem[i] = 0;
}
__global__ void test(int *out)
{
for(int i=0;i<n;i++)
out[i] = 10;
}
int main()
{
const size_t sz = size_t(n)*sizeof(int);
initVals<<<1,1>>>();
int *devMem;
cudaMalloc((void **)&devMem, sz);
test<<<1, 1>>>(devMem);
int *hoMem=new int[n];
cudaMemcpy(hoMem, devMem,sz, cudaMemcpyDeviceToHost);
//print
for(int i=0;i<n;i++)
cout<<hoMem[i]<<endl;
return 0;
}
在这段代码中我定义了
glMem
尺寸为n。如果我之前不知道尺寸,我可以定义吗? 例如我需要这样定义。
__device__ int *glMem;
它不起作用。请给出一些代码示例..
最佳答案
在这种情况下,您需要为设备分配内存。
// size of data
unsigned int size_of_glMem = n * sizeof(int);
// allocate device memory for result
int* glMem = NULL;
cudaMalloc( (void**) &glMem, size_of_glMem );
希望这对您有所帮助。
关于c++ - CUDA 全局内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465575/