大家好,我想请教一个问题。众所周知,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中找到。
祝您编码顺利~