有关memcpy函数的问题

大家好,我想请教一个问题。众所周知,C++中有专门的拷贝函数,如memcpy函数,我想请问一下CUDA中有类似的拷贝函数吗(在内核函数内部执行的)?
谢谢!

LZ您好,CUDA中有类似的memcpy的函数,您可以在手册中查看cudaMemcpy系列函数。

但是这系列函数是host端执行的,而不是如您所说在kernel内部执行的。

您可以在kernel中各个线程读取,再写入这样实现copy的功能。

大致如此,祝您好运~

以及,需要补充说明的是,2#给出的是一般推荐的用法,即host端使用cudaMemcpy,kernel中自己实现读取和写入。

此外,NV在kernel中也提供了malloc,free,memcpy,等函数,但是并不推荐使用这个memcpy。

因为这里的memcpy会导致严重的访存不合并,使得访存效率大为降低。

所以,推荐您在kernel中进行copy的时候,使用自己读取再写入的方式,以获得更好的执行效率。

祝您编码顺利~

好的!谢谢版主!我会认真考虑的!!

不客气的,欢迎您对问题展开思考,并和论坛诸君分享心得。

祝您好运~

malloc、free这些函数在runtime_API中有吗,还是说要用到Thrust API呢?附加一句:能不能在device函数里面调用这些函数? 谢谢

LZ您好:

CUDA Runtime API提供的函数是host端使用的,一般以cuda开头,如cudaMalloc(), cudaMemcpy(), cudaMemset()这些。

CUDA Runtime API没有提供“malloc”,“free”,而是提供了cudaMalloc(),cudaFree()供您在host端的代码中申请或者释放device端的存储空间。

以及,自fermi架构开始,您可以在kernel中使用malloc,free函数,作为host端申请存储空间的补充。您可以将其看做是某种特别的实现,但这些在device端使用的函数并非是CUDA Runtime API的函数,以及CUDA Runtime API的函数是在host端运行的。

大致如此,供您参考。

祝您好运~

以及,这些函数的用法和介绍,您可以在CUDA C Programming Guide和CUDA Toolkit Reference Manual中找到。

祝您编码顺利~