2011-06-24 48 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