【发布时间】:2014-04-04 12:21:03
【问题描述】:
__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);
}
我想做类似上面的事情,但是我发现这样内核没有得到正确的缓冲区。有没有办法做到这一点?如果可能的话,我不想在内核中添加“if”条件
【问题讨论】:
标签: cuda