Bir çekirdeğin aşağıdaki (snippet) bölümüne sahibim.bellek ayırma
__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);
}
statik (hatta aynı ebatlarda) var çok hızlı, ama CurrentProbs dinamik (yukarıdaki gibi) tahsis edildiğinde performans korkunç olduğunda. Efficiency of Malloc function in CUDA
başka yöntemler bildiride önerilen olandan bu diğer çözmüş merak ediyordum: CUDA allocate memory in __device__ function İşte
ilgili soru:
Bu soru bir çekirdek içinde bu yapabileceğini söyledi? Bu tür bir ceza olmaksızın bir çekirdeğin içinde mal/serbest kalmaması gülünç görünmektedir.
Sözde kodunuzda 'tmp' nereden geliyor? – talonmies
Üzgünüz - tmp = nComponents [0]; –
Yani, çekirdek çağrısına göre sabittir? Eğer öyleyse, neden dyanmik bellek ayırma ile hiç rahatsız? – talonmies