2011-03-09 86 views
8

我注意到GPU可以有数百个内核,因此可以大大加快并行计算的速度。看起来在OS内核中,没有并行算法用于加速。在GPU上运行OS内核级计算有意义吗?

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

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

回答

17

GPU并行处理应用程序要求您运行完全相同的操作数百次。而且,你只限于你可以做什么操作 - 分支通常不是一个选项,也不能遍历指针链。

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

  • 密码:GPU来试图裂纹的加密算法,是伟大的,但是这不是内核的工作。它通常运行加密操作一次。在这种情况下,CPU速度要快得多,因为它只需要执行一次。
  • 处理网络流量:数据包在不同的时间到达,需要进行低延迟处理。 GPU 可能会能够进行无状态防火墙处理,但是您需要对数据包进行分批处理,并一次处理几百个数据包,以便获得好处 - 这会伤害延迟和抖动,因此工作留给CPU。而且,有状态的跟踪需要共享锁定的连接跟踪表,这是GPU不具备的。
  • 管理内存:这是一个有很多锁定的指针繁重操作,因此不是GPU甚至远程适合的操作。此外,延迟非常关键,向GPU发送作业意味着很多延迟。
  • 正在搜索:现代操作系统内核不搜索。这对于用户空间来说是一项工作 - 同样,这是一项非常重要的工作。

GPU非常适合数学内核,其中吞吐量至关重要,延迟是一个小问题 - 数值模拟,诸如此类的事情。一般来说,它们不适合数据管理,或者延迟非常重要 - 这正是OS内核所做的。这就是为什么操作系统通常不使用GPU加速的原因。

还有其他类型的硬件加速是操作系统内核可以而且确实使用的 - 部分机型拥有专为快速做一次性密码计算设计的特殊的加密硬件核心。内核可以很好地使用这些内核,因为它们更适合内核面临的特定问题。

+0

谢谢,我同意延迟是GPU计算的弱点。 PacketShader软件声称有数百微妙的延迟,不确定这是否仍然非常缓慢? 的密码,我不知道,如果文件西弗斯使用加密FS /盘与否,GPU可以帮助这类案件。 关于指针,看起来CUDA 4.0拥有统一的内存地址空间,不仅包含多个GPU内存,还包含主内存,对此不会有帮助吗? 我很好奇为什么人们不把有用的功能放到内核中,特别是安全的东西,我认为内核是我们唯一可以信赖的东西...... – 2011-03-09 07:09:08

+0

我们可以信任内核,因为人们尽可能少地放入内核: )即使服务器使用加密磁盘,将单个扇区发送到GPU进行解密比在CPU上执行要慢。为GPU的并行性提供足够的操作是非常困难的。即使你有统一的地址空间,GPU也不是为多指针寻址阶段而构建的。内核中的典型操作再一次不适合利用GPU的优势,因此可以充分发挥GPU的弱点。 – bdonlan 2011-03-09 07:31:54

4

您对内核不并行化的印象是错误的。现代内核已经很好地适应了多核/多线程CPU,并且在这方面以“并行”方式处理几乎所有内容。

至于GPU,它们在CPU可以处理的指令方面有很大的不同。尤其适用于矢量浮点运算。 Linux内核从未使用过这种操作。整个例外是加密和一些raid代码,可以很好地适应向量类型的操作(可能还有其他,但仍然非常有限)。

所以一般来说,内核本身并不需要GPU提供的操作类型。对于它所需要的时间,您会发现现代CPU内核包括特定的指令集(如SSE,AES-NI等)或专用协处理器/卸载引擎(再次用于加密和raid计算,网络数据包校验和等...)。

+0

引我觉得现代CPU不具备操作系统的并行处理足够的核心。 OS内核可以处理具有不同内核的多个网络队列,但是队列数量受到#core的限制。这会限制可伸缩性和吞吐量。我注意到有一个关于GPU网络的项目:PacketShader。它在GPU上查找IP转发,速度非常快。另一个问题是处理多个请求并不是全部的并行处理。在像OpenMP这样的并行计算中,更经常地分割单个请求并处理每个核心上的小任务。 – 2011-03-09 06:44:39

-1

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

0

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

https://code.google.com/p/kgpu/

相关问题