2011-06-24 3 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; 
} 

である私は、サイズnに

glMem 

を定義します。私が以前にサイズを知っていなければ、私は定義できますか? たとえば、私はこのように定義する必要があります。

__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番の数字が10回印刷されます。 – pQB

+0

はい私のコードは正常に動作しますが、__device__ int * glMemのような配列を定義すると、それが動作しないメモリを割り当てます。間違った結果を返します。 – user570593

関連する問題