Parallel processing 在GPU上运行操作系统内核级计算有意义吗?

Parallel processing 在GPU上运行操作系统内核级计算有意义吗?,parallel-processing,operating-system,gpu,Parallel Processing,Operating System,Gpu,我注意到一个GPU可以有数百个内核,因此使用它们可以大大加快并行计算的速度。在操作系统内核中,似乎没有并行算法用于加速 人们用OpenMP在用户中进行并行计算,但为什么不在内核空间呢?我猜操作系统中有很多任务需要并行处理,比如处理多个网络连接和数据包、执行加密操作、管理内存、搜索?。。。一些防火墙通过匹配模式过滤和监控网络流,面向研究的操作系统也可能在运行程序之前分析程序,这非常耗时,而且可能是并行的 那么,为什么操作系统不使用GPU来提高性能和吞吐量呢?在GPU上运行操作系统计算有意义吗?你认

我注意到一个GPU可以有数百个内核,因此使用它们可以大大加快并行计算的速度。在操作系统内核中,似乎没有并行算法用于加速

人们用OpenMP在用户中进行并行计算,但为什么不在内核空间呢?我猜操作系统中有很多任务需要并行处理,比如处理多个网络连接和数据包、执行加密操作、管理内存、搜索?。。。一些防火墙通过匹配模式过滤和监控网络流,面向研究的操作系统也可能在运行程序之前分析程序,这非常耗时,而且可能是并行的


那么,为什么操作系统不使用GPU来提高性能和吞吐量呢?在GPU上运行操作系统计算有意义吗?

你认为内核没有并行化是错误的。现代内核已经很好地适应了多核/多线程CPU,并在这方面以“并行”的方式处理几乎所有的事情

至于GPU,它们可以从CPU处理的指令非常不同。特别适合于向量浮点计算。Linux内核基本上从不使用这种操作。例外情况可能是加密和一些raid代码,它们可以很好地适应向量类型的操作(也可能是其他类型,但仍然非常有限)


所以一般来说,内核本身并不需要GPU提供的那种操作。在需要它们的时候,您会发现现代CPU核心包括特定的指令集(如SSE、AES-NI等)或专用协处理器/卸载引擎(同样用于加密和raid计算、网络数据包检查等)。

GPU并行处理应用程序要求您运行数百次完全相同的操作。此外,您所能做的操作是有限的——分支通常不是选项,也不是遍历指针链

大多数内核操作不适合此模型;内核所做的大部分工作是通过指针管理资源,包括锁定。这根本不适合GPU模型。至于你提到的其他行动:

  • 密码学:GPU非常适合尝试破解密码,但这不是内核的工作。它通常运行一次加密操作。在这种情况下,CPU要快得多,因为它只需要做一次
  • 处理网络流量:数据包在不同的时间到达,需要以低延迟进行处理。GPU可能能够进行无状态防火墙处理,但您需要对数据包进行批处理,并让它一次处理几百个数据包,这样才有好处——这会影响延迟和抖动,因此工作留给CPU。此外,有状态跟踪需要共享、锁定对连接跟踪表的访问,这是GPU无法做到的
  • 内存管理:这是一个指针繁重的操作,有很多锁,因此GPU根本就不适合。此外,延迟非常关键,将作业发送到GPU意味着大量延迟
  • 搜索:现代操作系统内核不进行搜索。这是用户空间的一项工作——而且,这是一项非常繁重的工作
GPU非常适合于数学内核,在数学内核中,吞吐量是最重要的,延迟是一个次要问题——数值模拟,诸如此类的事情。一般来说,它们不太适合于数据管理,也不适合延迟很关键的地方——这正是操作系统内核所做的。这就是操作系统通常不使用GPU加速的原因


还有其他类型的硬件加速,操作系统内核可以也确实可以利用——一些机器有专门设计用于快速进行一次性加密计算的特殊加密硬件核心。内核可以很好地使用它们,因为它们更适合内核面临的特定问题。

是的,我同意Mat。当今计算世界的瓶颈是在虚拟线程上运行的操作系统。这在用户空间中创造了一个需求,用于创建使用GPU的应用程序。但是内核仍然按顺序运行操作系统。例如,搜索操作集成为操作系统功能,它按顺序检查文件系统表,或者通过索引,然后使用二进制搜索算法进行搜索。这两个操作都很耗时。为什么不将部分文件系统表发送到GPU并执行搜索操作呢。在处理级别,大多数操作系统操作都是算术和逻辑计算,但这些操作需要等待CPU。这里涉及的问题是从CPU到GPU再到CPU发送和接收操作/内存所涉及的延迟。为了减少这种延迟,需要进行大量的研究。 但实际上这里的问题不是硬件延迟(CPU和GPU之间),而是由操作系统来估计这个延迟。操作系统必须估计延迟,并决定CPU中的处理是更好还是GPU更好。这同样依赖于硬件平台。这些问题是可以解决和研究的。它只需要操作系统公司的巨额研究投资

现代GPU不仅可以用于图形处理;他们也可以运行通用程序。虽然不是很适合所有类型的程序,但它们在代码方面表现出色,可以利用它们的高度并行性。所谓的“通用GPU”(GPGPU)计算的大多数用途已经超出了系统软件的范围。然而,最近关于软件路由器和加密网络连接的工作给出了GPGPU如何应用于操作系统领域内更传统的任务的例子。这些用途只是表面上的。可以利用GPU的系统级任务的其他示例包括通用加密、模式匹配、程序分析和加速