主线 Linux 内核能够进行 GPGPU 编程吗?

主线 Linux 内核能够进行 GPGPU 编程吗?

Linux 内核中是否有通用 GPU 支持?

让我更详细地解释一下,因为这个话题太广泛了。我所说的“有能力”是指原生支持。这划掉了 OpenGL 和 OpenCL,因为它们只是帮助在用户模式下编写应用程序的 API。

一些常见的误解是,既然超级计算机使用 GPGPU 并运行 Linux,那么 Linux 就使用它们。嗯,不完全是。在超级计算机上运行的 Linux 发行版通常与我们所知道的普通发行版不同。到目前为止,它们已被修改为不再是 Linux,而是一个全新的操作系统。

另一个著名的答案可能是 GPU 的支持不佳。好吧,我们不要去那里消除所有其他因素,无论是瓶颈还是架构等其他因素。

让我们将问题改写如下:

主线 Linux 内核本身是否通过 GPU 的通用寄存器利用流处理?如果是的话,程度如何?

答案1

请注意,内核必须虚拟化和上下文切换数百个 GPU 寄存器的想法是可怕的,并且内核没有做任何可以从使用它们本身中受益的事情。内核中有代码来管理进程之间共享 GPU 资源(更多的代码正在稳定地迁移到内核中),并且共享 GPU 进行计算的进程通过 opencl 和 cuda 等来完成,但任何 GPU 上下文它们所做的切换不会与任何 CPU 线程绑定,因为见上文。我强烈怀疑 GPU 完全独立运行,并通过某种总线报告、面向 CPU 的寄存器读出或中断等来报告其结果。

答案2

简单回答是不。经过一些研究和阅读代码后,我相信 3.12 版的主线 Linux 内核对 GPU 通用寄存器的支持很少甚至不支持。这源于几十年来以 CPU 为中心的观念,如果要朝着流处理的方向发展,就需要进行彻底的改变。

不过,我承认这个问题的质量很差,因此,我没有得到直接的答案。我仍然认为 user50849 已经接近回答了这个问题。

相关内容