2011-06-24 105 views
0

这是我的代码CUDA全局内存

#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; 

它不起作用。请给出一些代码示例。

+0

请详细说明您的配置:设备生成和CUDA框架版本 – jopasserat

回答

1

在这种情况下,您需要将内存分配到设备中。

// 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); 

希望得到这个帮助。

+0

感谢您的回复。我试过这个,但它不工作..当我打电话给功能测试它给一些随机数字。 – user570593

+0

你是什么意思随机值?你的代码可以作为例外。它打印数字'10'十次。 – pQB

+0

是的我的代码工作正常,但是当我像__device__ int * glMem定义数组时;并分配它不工作的内存。给出错误的结果.. – user570593