cudaMemcpyAsync内存复制

cudaMemcpyAsync中的主机内存一定要是分页锁定内存吗?

普通malloc()出来的内存为何不行?

大恩不言谢。。。期待解释。。。

如果有要求,programming guide和reference manual上肯定会说的,不妨一查。

(1)对于你的第一个问题,答案是必须如此,因为手册(toolkit reference manual)如是说。

(2)对于你的第二个问题,答案是你的说法是错误的,malloc()出来的普通可分页内存可以。

什么?我的(1)(2)说法前后矛盾了?没有矛盾,一个是手册的要求,一个是实践的结论。

实际上无视手册的pinned memory要求即可,普通的,也能行。手册偶尔坑你还是可以的。

:L这样都可以,这是神马手册。

可能只是4.2(4.1忘记是否如此了)开始的版本对这个API的一个容错处理。

因为在3.2时代,这么干(对可换页的普通内存进行cudaMemcpyAsync)会出错。但是4.2不会。似乎4.2对此作了容错处理,例如分阶段的锁定(类似VirtualLock()?) + 传输, 或者先复制到一段不可分页的内存中+正常cudaMemcpyAsync处理。这是2种可能的容错方式。目的是为了照顾那些不看手册的人。具体的机制尚未跟踪分析,这只是2种可能的容错实现机制。但用来作为示意目的应该足矣。 :slight_smile: