GPU并行处理应用程序要求您运行完全相同的操作数百次。而且,你只限于你可以做什么操作 - 分支通常不是一个选项,也不能遍历指针链。
大多数内核操作不适合此模型;内核所做的大部分工作就是通过指针来管理资源,包括锁定。这根本不适合GPU模型。至于其他的操作你举:
- 密码:GPU来试图裂纹的加密算法,是伟大的,但是这不是内核的工作。它通常运行加密操作一次。在这种情况下,CPU速度要快得多,因为它只需要执行一次。
- 处理网络流量:数据包在不同的时间到达,需要进行低延迟处理。 GPU 可能会能够进行无状态防火墙处理,但是您需要对数据包进行分批处理,并一次处理几百个数据包,以便获得好处 - 这会伤害延迟和抖动,因此工作留给CPU。而且,有状态的跟踪需要共享锁定的连接跟踪表,这是GPU不具备的。
- 管理内存:这是一个有很多锁定的指针繁重操作,因此不是GPU甚至远程适合的操作。此外,延迟非常关键,向GPU发送作业意味着很多延迟。
- 正在搜索:现代操作系统内核不搜索。这对于用户空间来说是一项工作 - 同样,这是一项非常重要的工作。
GPU非常适合数学内核,其中吞吐量至关重要,延迟是一个小问题 - 数值模拟,诸如此类的事情。一般来说,它们不适合数据管理,或者延迟非常重要 - 这正是OS内核所做的。这就是为什么操作系统通常不使用GPU加速的原因。
还有其他类型的硬件加速是操作系统内核可以而且确实使用的 - 部分机型拥有专为快速做一次性密码计算设计的特殊的加密硬件核心。内核可以很好地使用这些内核,因为它们更适合内核面临的特定问题。
谢谢,我同意延迟是GPU计算的弱点。 PacketShader软件声称有数百微妙的延迟,不确定这是否仍然非常缓慢? 的密码,我不知道,如果文件西弗斯使用加密FS /盘与否,GPU可以帮助这类案件。 关于指针,看起来CUDA 4.0拥有统一的内存地址空间,不仅包含多个GPU内存,还包含主内存,对此不会有帮助吗? 我很好奇为什么人们不把有用的功能放到内核中,特别是安全的东西,我认为内核是我们唯一可以信赖的东西...... – 2011-03-09 07:09:08
我们可以信任内核,因为人们尽可能少地放入内核: )即使服务器使用加密磁盘,将单个扇区发送到GPU进行解密比在CPU上执行要慢。为GPU的并行性提供足够的操作是非常困难的。即使你有统一的地址空间,GPU也不是为多指针寻址阶段而构建的。内核中的典型操作再一次不适合利用GPU的优势,因此可以充分发挥GPU的弱点。 – bdonlan 2011-03-09 07:31:54