我正在阅读HSA规范,它说用户模式应用程序可以直接将其作业提交到GPU队列,而无需任何操作系统交互。我认为这必须是因为应用程序可以直接与GPU驱动程序通信,因此不需要招致任何操作系统内核调用。
所以我的问题是,对于一个非常简单的例子,在CUDA应用程序中,当我们创建一个cudaMalloc()时,是否会引发任何OS内核调用?
答案 0 :(得分:1)
这个问题的整个前提是有缺陷的。 “提交工作”和分配内存不是一回事。即使在调用malloc的主机CPU上运行的用户空间进程(大多数情况下)也会导致内核调用,因为标准库通常会通过sbrk
或{{1 }}
所以是的,mmap
导致操作系统内核调用 - 如果你运行strace,你会看到GPU驱动程序调用{{1}}向GPU MMU / TLB发出命令。但在主机代码中运行cudaMalloc
也是如此,因此,毫无疑问,它也会在理论上的HSA平台上运行malloc。