我有以下(片段)内核。
__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是动态分配的时候(如上所示),性能很差。
这个问题说我可以在内核中做到这一点: CUDA allocate memory in __device__ function
这是一个相关的问题: Efficiency of Malloc function in CUDA
我想知道是否有其他方法解决了这个问题,除了在论文中提出的方法之外? 似乎荒谬的是不能在内核内malloc/free而不带有这种惩罚。
tmp
是从哪里来的? - talonmies