我注意到GPU可以拥有数百个内核,因此可以大大加快并行计算速度。似乎在OS内核中,没有并行算法用于加速。
人们在用户中使用OpenMP进行并行计算,但为什么不在内核空间呢?我想OS中有很多需要并行处理的任务,比如处理多个网络连接和数据包,进行加密操作,管理内存,搜索等等......有些防火墙通过匹配模式过滤和监控网络流量,研究型操作系统也可以在运行之前分析程序,这很费时并且可以并行化。
那么为什么操作系统不使用GPU来提高性能和吞吐量呢?在GPU上运行OS计算是否有意义?
答案 0 :(得分:21)
GPU并行处理应用程序要求您运行完全相同的操作数百次。此外,您可以做的操作有限 - 分支通常不是一个选项,也不是遍历指针链。
大多数内核操作都不适合这个模型;内核正在做的很多事情是通过指针管理资源,包括锁定。这根本不适合GPU模型。至于您引用的其他操作:
GPU非常适合数学内核,其中吞吐量是最重要的,延迟是一个小问题 - 数值模拟,这类事情。通常,它们不适合数据管理,或者延迟很关键 - 这正是OS内核所做的事情。这就是操作系统通常不使用GPU加速的原因。
OS内核可以并且确实可以使用其他类型的硬件加速 - 某些机器具有专门用于快速执行一次性加密计算的加密硬件核心。内核可以很好地利用它们,因为它们更适合于内核面临的特定问题。
答案 1 :(得分:4)
您对内核不并行化的印象是错误的。现代内核很好地适应了多核/多线程CPU,并且在这方面以“并行”的方式处理了几乎所有内容。
对于GPU,它们在从CPU处理的指令方面非常不同。更适合于矢量浮点计算。 Linux内核基本上从不使用这种操作。例外是密码和一些raid代码,可以很好地适应矢量型操作(可能还有其他操作,但仍然非常有限)。
因此,一般来说,内核本身并不需要GPU提供的那种操作。在它需要的时候,你会发现现代CPU核心包括特定的指令集(如SSE,AES-NI等)或专用的协处理器/卸载引擎(再次用于加密和raid计算,网络数据包校验等) ...)。
答案 2 :(得分:0)
现代GPU不仅可用于图形处理;他们也可以运行通用程序。虽然不太适合所有类型的程序,但它们在可以利用其高度并行性的代码方面表现出色。大多数使用所谓的“通用GPU'' (GPGPU)计算已超出系统软件的范围。但是,最近关于软件路由器和加密网络连接的工作已经举例说明了如何将GPGPU应用于传统上在操作系统领域内的任务。这些用途只是划伤表面。可以利用GPU的系统级任务的其他示例包括通用加密,模式匹配,程序分析和基本常用算法的加速。
答案 3 :(得分:-1)
是的,我同意Mat。今天计算世界的瓶颈是在虚拟线程上运行的操作系统。这在用户空间中创造了需求,用于创建使用GPU的应用程序。然而内核仍然按顺序运行操作系统。例如,搜索操作被集成为OS功能,它按顺序检查文件系统表,或者通过索引然后使用二进制搜索算法进行搜索。这两项操作都很耗时。为什么不将部分文件系统表发送到GPU并分叉搜索操作。在处理级别,大多数OS操作只是算术和逻辑计算,但这些操作等待CPU。这里涉及的问题是从CPU到GPU发送和接收操作/内存并返回CPU所涉及的延迟。需要进行大量研究以减少这种延迟。 但实际上这里的问题不是硬件延迟(在CPU和GPU之间),而是由OS估计这种延迟。操作系统必须估计延迟并决定CPU中的处理是否更好或GPU是否更好。这又是依赖于硬件平台的。可以解决和研究这些问题。它只需要对OS公司的研究投入巨大的资金。