Cudamaloc是否引发任何内核调用?

Cudamaloc是否引发任何内核调用?,cuda,linux-kernel,linux-device-driver,Cuda,Linux Kernel,Linux Device Driver,我正在阅读HSA规范,它说用户模式应用程序可以直接将作业提交到GPU队列中,而无需任何操作系统交互。我认为这一定是因为应用程序可以直接与GPU驱动程序对话,因此不需要进行任何操作系统内核调用 所以我的问题是,举一个非常简单的例子,在CUDA应用程序中,当我们制作一个cudamaloc()时,它会引起任何操作系统内核调用吗?这个问题的整个前提是有缺陷的。“提交作业”和分配内存不是一回事。即使在主机CPU上运行的调用malloc的用户空间进程(大多数情况下)也会导致内核调用,因为标准库通常通过sbr

我正在阅读HSA规范,它说用户模式应用程序可以直接将作业提交到GPU队列中,而无需任何操作系统交互。我认为这一定是因为应用程序可以直接与GPU驱动程序对话,因此不需要进行任何操作系统内核调用


所以我的问题是,举一个非常简单的例子,在CUDA应用程序中,当我们制作一个cudamaloc()时,它会引起任何操作系统内核调用吗?

这个问题的整个前提是有缺陷的。“提交作业”和分配内存不是一回事。即使在主机CPU上运行的调用malloc的用户空间进程(大多数情况下)也会导致内核调用,因为标准库通常通过
sbrk
mmap
将物理内存收集或释放到其内存堆中


因此,是的,
cudamaloc
导致操作系统内核调用-如果运行strace,您将看到GPU驱动程序调用
ioctl
向GPU MMU/TLB发出命令。但在主机代码中运行
malloc
也是如此,毫无疑问,在理论HSA平台上运行malloc也是如此

您对操作系统内核调用的理解是什么?这有什么关系?顺便说一下,Cudamaloc还可以分配主机内存。为此,必须向操作系统发出一些通知。@LumpN
cudamaloc
仅分配设备内存。@fynang29 Try?谢谢您的回复。我知道malloc将导致内核调用。我的问题来自HSA规范,它说“工作负载数据流的HSA方法通过允许直接连接(使用用户空间队列)来减少内核模式转换。”在TCU和用户模式应用程序之间。这与传统的GPU模式形成对比,后者依赖于复制工作负载、修补命令缓冲区以及用户模式和内核模式之间的大量转换。”这就是我无法理解的地方。我相信在驱动程序或硬件中一定有一些技巧,我想知道它是什么。