के अंदर स्मृति आवंटन मेरे पास कर्नेल का निम्न (स्निपेट) है।एक CUDA कर्नेल
__global__ void plain(int* geneVec, float* probs, int* nComponents, float* randomNumbers,int *nGenes)
{
int xid = threadIdx.x + (blockDim.x * blockIdx.x);
float* currentProbs= (float*)malloc(sizeof(float)*tmp);
.....
.....
currentProbs[0] = probs[start];
for (k=1;k<nComponents[0]; k++)
{
currentProbs[k] = currentProbs[k-1] + prob;
}
...
...
free(currentProbs);
}
जब यह स्थिर (यहां तक कि एक ही आकार) है वह बहुत तीव्र है, लेकिन जब CurrentProbs गतिशील (ऊपर) के रूप में आवंटित किया जाता है प्रदर्शन भयानक है।
इस सवाल ने कहा कि मैं एक कर्नेल के अंदर ऐसा कर सकता है: Efficiency of Malloc function in CUDA
यदि कोई अन्य तरीकों पत्र में प्रस्तावित एक से यह अन्य समाधान कर लिया है मैं सोच रहा था: CUDA allocate memory in __device__ function
यहाँ एक संबंधित सवाल है? यह हास्यास्पद लगता है कि इस तरह के जुर्माना के बिना कोई कर्नेल के अंदर malloc/free नहीं कर सकता है।
आपके छद्म कोड में 'tmp' कहां से आता है? – talonmies
क्षमा करें - tmp = ncomponents [0]; –
तो यह प्रति कर्नेल आमंत्रण निरंतर है? यदि हां, तो डायनामिक मेमोरी आवंटन से परेशान क्यों हो? – talonmies