2016-03-23 24 views
-1

Udacity aracılığıyla CUDA programlamayı öğrenmeye başladım. Dinamik paylaşılan anılarını kullanmaya çalışırken bile şu hatayı aldım.CUDA - dinamik paylaşımlı bellek, aşağıdakileri tetikler :: system :: system_error

Oldukça çok arama yaptım ama burada yanlış giden bir ipucu yoktu. Ben

compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*1000>>>(d_inputVals, d_inputPos, d_outputVals, d_outputPos, numElems, 0); 
    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*1000>>>(d_inputVals, d_inputPos, &d_outputVals[numElems/2], &d_outputPos[numElems/2], numElems, 1); 

son iki satırı değiştirmek İlginçtir eğer kod çalıştırırken, hata atıldı. Bununla birlikte, dinamik bellek ayırma alanı sabitle sınırlı olmaması gerektiğinden anlam ifade etmez. Belki benim kodum değil, Udacity'deki ayarlar mı? Yazdığım kod aşağıda. Herhangi bir yardım büyük takdir edilecektir.

__global__ void compact_kernel(unsigned int* const d_inputVals, 
    unsigned int* const d_inputPos, 
    unsigned int* const d_outputVals, 
    unsigned int* const d_outputPos, 
    const size_t numElems, 
    const size_t refBit) 
{ 
    const size_t tid = blockIdx.x * blockDim.x + threadIdx.x; 

    // predicate 
    const bool predicate = (d_inputVals[tid] & 1) == refBit; 
    extern __shared__ int s[]; 
} 

void your_sort(unsigned int* const d_inputVals, 
    unsigned int* const d_inputPos, 
    unsigned int* const d_outputVals, 
    unsigned int* const d_outputPos, 
    const size_t numElems) 
{ 
    const size_t numBlocks = numElems/512; 
    const size_t numThreadsPerBlock = 256; 
    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*numElems>>>(d_inputVals, d_inputPos, d_outputVals, d_outputPos, numElems, 0); 
    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*numElems>>>(d_inputVals, d_inputPos, &d_outputVals[numElems/2], &d_outputPos[numElems/2], numElems, 1); 

} '

DÜZENLEME: numElems değeri 220480. olan bu sayı dinamik hafıza ayırma için çok büyük mü? paylaşılan hafıza mevcut tüm CUDA cihazlar için

+1

"numElems" değeri nedir? – talonmies

+0

Paylaşılan bellek, iş parçacığı başına 48 KB ile sınırlıdır. Numaranız bu sınırı aşıyor. – havogt

+1

@havogt Çok teşekkür ederim. İşte bu. : D Yorumunuzu cevap olarak gönderebilir misiniz? – Maverobot

cevap