1
__constant__ float constbuf[MAXSIZE]
__device__ float *d_buf;
__global__ void
simple (float *buf2){
//access buf2;
}
main(){
int size, asize;
float *abuf, *d_buf2, *h_buf;
//...
if(size > MAXSIZE){
cudaMalloc(&d_buf2, asize);
cudaMemcpy(d_buf2, h_buf, asize);
cudaMemcpyToSymbol(d_buf, &d_buf2, sizeof(d_buf2));
cudaGetSymbolAddress((void **) &abuf, d_buf);
}else{
cudaMemcpyToSymbol(constbuf, h_buf, asize);
cudaGetSymbolAddress((void **) &abuf, constbuf);
}
simple<<<grid, block, 0 ,stream>>>(abuf);
}
我想要做類似上面的事情,但我發現這樣內核沒有得到正確的緩衝區。無論如何要實現這一目標?我不想在內核如果可能的話有沒有什麼辦法讓內核使用恆定或全局內存取決於數據大小
感謝您的答覆。如果沒有簡單的解決方案,我想我必須用這種方法 – fliman