GPU

2011-03-09 15 views
5

पर गतिशील आवंटन स्मृति क्या कर्नेल के अंदर एक GPU की वैश्विक मेमोरी पर गतिशील रूप से स्मृति आवंटित करना संभव है?
मुझे नहीं पता कि मेरा जवाब कितना बड़ा होगा, इसलिए मुझे उत्तर के प्रत्येक भाग के लिए स्मृति आवंटित करने का एक तरीका चाहिए। CUDA 4.0 हमें रैम का उपयोग करने की अनुमति देता है ... क्या यह एक अच्छा विचार है या यह गति को कम करेगा ??GPU

उत्तर

10

कर्नेल के अंदर मॉलोक का उपयोग करना संभव है।

__global__ void mallocTest() 
{ 
    char* ptr = (char*)malloc(123); 
    printf(“Thread %d got pointer: %p\n”, threadIdx.x, ptr); 
    free(ptr); 
} 
void main() 
{ 
    cudaThreadSetLimit(cudaLimitMallocHeapSize, 128*1024*1024); 
    mallocTest<<<1, 5>>>(); 
    cudaThreadSynchronize(); 
} 

will output: 
Thread 0 got pointer: 00057020 
Thread 1 got pointer: 0005708c 
Thread 2 got pointer: 000570f8 
Thread 3 got pointer: 00057164 
+0

@ स्कैटमैन: मुझे लगता है कि आवंटित स्मृति डिवाइस पर होगी जब आप कर्नेल के भीतर malloc को कॉल करेंगे ... क्या मैं सही हूँ? – Manolete

+0

चूंकि एक सीपीयू gtx980 के 2048 कोर के रूप में तेजी से malloc नहीं कर सकता है, मुझे संदेह है कि यह gpu पर आवंटित करता है। अन्यथा यह केवल एकीकृत gpus के लिए अलग नहीं होगा। –

1

CUDA 4.0 से आप ग से malloc और free C++ के बजाय new और delete ऑपरेटरों का उपयोग करने में सक्षम हो जाएगा: जिसके बाद NVIDIA CUDA गाइड से लिया जाता है की जाँच करें।

संबंधित मुद्दे