大佬教程收集整理的这篇文章主要介绍了c – 带有动态共享内存的模板化CUDA内核,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
template<typename T> __global__ void kernel(T* ptr) { extern __shared__ T smem[]; // calculations here ... } template<typename T> void call_kernel( T* ptr,const int n ) { dim3 dimBlock(n),dimGrid; kernel<<<dimGrid,dimBlock,n*sizeof(T)>>>(ptr); } int main(int argc,char *argv[]) { const int n = 32; float *float_ptr; double *double_ptr; cudaMalloc( (void**)&float_ptr,n*sizeof(float) ); cudaMalloc( (void**)&double_ptr,n*sizeof(doublE) ); call_kernel( float_ptr,n ); call_kernel( double_ptr,n ); // problem,2nd instantiation cudaFree( (void*)float_ptr ); cudaFree( (void*)double_ptr ); return 0; }@H_734_2@main.cu(4): error: declaration is incompatible with prevIoUs "smem" (4): here detected during: instantiation of "void kernel(T *) [with T=double]" (12): here instantiation of "void call_kernel(T *,int) [with T=double]" (24): here
我知道我遇到了@L_607_7@冲突,因为共享内存被声明为extern.然而,据我所知,如果我想在运行时定义它的大小,那就无法解决这个问题.
所以,我的问题是:有没有任何优雅的方式来获得所需的行为?优雅我的意思是没有代码重复等.
以上是大佬教程为你收集整理的c – 带有动态共享内存的模板化CUDA内核全部内容,希望文章能够帮你解决c – 带有动态共享内存的模板化CUDA内核所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。