我想在设备函数内调用cudaMalloc,cudaMemecpy, cudaFree 的函数动态的管理内存。发现出现下面错误。原来这些是主机端函数。
error: calling a host function(“cudaMalloc”) from a device function
请问,对应C语言的 malloc,memcpy, realloc, free, 在cuda中有什么函数与之对应吗?
我想在设备函数内调用cudaMalloc,cudaMemecpy, cudaFree 的函数动态的管理内存。发现出现下面错误。原来这些是主机端函数。
error: calling a host function(“cudaMalloc”) from a device function
请问,对应C语言的 malloc,memcpy, realloc, free, 在cuda中有什么函数与之对应吗?
楼主您好,
(1)
在有DP支持的设备上,kernel里可以直接使用cudaMalloc/cudaFree, 将直接映射成设备端的malloc/free调用。
在无DP支持的设备上(2.0-3.0),您可以在kernel里使用malloc/free。
在无DP支持的古老硬件上(1.x),您无法使用任何。
(2)memcpy您可以直接用,但建议您自己写代码完成复制。
(3)realloc据我所知,似乎不能用的。
感谢您的来访。
版主你好,我在kernel里面使用malloc,提醒错误error: calling a host function(“malloc”) from a global function(“cudamp”) is not allowed,我的显卡是GTX 650的
请您在编译的时候,指定为2.0或者以上的计算能力,以使用这一功能。
怎么样在编译时指定2.0或者以上的计算能力?
vs2008里面怎么没找到这个选项
VS2008的话,请在项目右键选择属性——配置属性——CUDA Runtime API——GPU——GPU Architecture中选为sm_30,并只保留这个,这是最适合您的配置参数(默认有3项,将另外两个设为0或者设为sm_20,sm_21,或sm_35中的任意两个都行,无影响)。
祝您好运~
非常感谢版主,解决了问题。
不客气的,欢迎您常来论坛~
祝您好运!
非常感谢!!
您好, 谢谢您的帮助,后来在《C_Programming_Guide》5.5版的“C Language Extensions”章的“B18”节里有介绍这个的使用,确实没有提到realloc,只能够重新分配内存然后把原来的内容复制过去。
还想再请教一个问题:DP是什么,什么事DP支持,什么类的显卡支持DP?(不好意思啊,确实不懂,网上也搜不出什么东西。)
非常感谢版主,后来查了一下,在《cuda c programming guide》5.5版的 c language extension 章 的 B.18节中也有阐述这个问题,确实没有realloc。
还想问一个问题:什么是DP,DP支持的设备有那类?(不好意思,确实不懂,网上确实没收到相关资料。)
LZ您好:
DP这里指的是:Dynamic Parallelism,您可以在CUDA 5.5的CUDA C Programming Guide的Appendix.C这个章节看到介绍。(或者看CUDA 5.0 自带的CUDA Dynamic Parallelism Programming Guide)
祝您好运~