为什么计算机不配备诸如分类网络之类的专用硬件?


10

为什么不对常规任务进行规范(例如“排序”),然后让环境对其进行编译以最好地利用其硬件,而不是按照我们的方式进行编程?这样,我们可以为计算机提供新的专用硬件(例如分拣网络),并且它将自动与现有代码一起使用。


2
购买PCI FPGA板并实现您喜欢的任何扩展。
SK-logic

硬件不是魔术。专用硬件无法(或根本无法)加速很多事情,即使可以,现有硬件通常也必须进行调整(或至少重新编译)。参见yosefk.com/blog/its-done-in-hardware-so-its-cheap.html


3
@WorldEngineer我看不到它是如何进入图片的。您的普通用户不知道现代CPU中80%的功能是什么,他们很高兴,因为他们被告知这可以使他们的程序更快(这是事实的核心)。如果排序确实像OP假定的那样普遍并且可以通过专用硬件进行优化,他们会将其放在分支预测变量的旁边(“那是什么,在园艺吗?”),发布新闻稿说他们使应用程序X和Y占5%更快,然后出售。

1
这让我想起了“ 保护核心 ”的概念,该核心旨在提高能源效率而不是达到最佳性能。
保罗·克莱顿

Answers:


19

首先,计算机带有专用硬件。现在售出的每台笔记本电脑和台式机都已经有相当多年的历史了,它都有一个专门的协处理器,即图形处理单元,可以处理视觉处理算法,例如视频和游戏应用程序所需的算法。大型计算机(例如,“超级计算机”,IBM的System Z系列)具有各种专用处理器来处理数字处理(“矢量处理”)

其次,排序是计算机研究最深入的方面之一,事实证明排序过于复杂,以至于无法比最简单的情况更多地内置到硬件中。排序是关于速度和正确性的。速度取决于算法的选择,数据的类型和变化以及数据量。正确性取决于数据的类型和上下文。对中等大小的整数数组进行排序是很简单的,这些数组适合CPU的本机字长(例如,31或63位加号)。对不仅仅包含ASCII值的字符串进行排序是非常复杂的-20年前,IBM出版了500多页的书,讨论的是国家边界和通用用法下的字符集问题。然后是非连续数据的问题-对链表进行排序涉及在整个内存中追逐指针。


10

主要问题是排序算法(1)需要很大的灵活性,而(2)无论如何都很难通过硬件来加速。

一件事是排序算法已经足够容易地快到足以超出处理器的内存带宽-处理器将已经花费大量时间等待数据来回移动到主内存。硬件加速的排序协处理器或特殊的排序指令将具有相同的问题。

解决此内存带宽的方法是通过使用具有更好“局部性”的更好算法和数据结构,并且在该领域仍然有大量工作要做,尤其是“缓存忽略算法”(它们在工作上就被忽略了)与缓存的详细信息无关,而“缓存感知”算法针对特定的缓存页面大小进行了调整等)。

相比之下,媒体应用程序(音频和图形,尤其是3D图形)利用了一些非常重复的结构-当然也有灵活性,但是它是建立在庞大且结构良好的基础之上的。这样就可以通过Blitting(可配置但仍非常结构化的块复制操作)和线条/多边形绘图等操作来简化图形加速。这意味着随着图形和声音处理变得越来越复杂,矢量运算已成为优化的明显目标-首先是MMX(整数矢量),然后是SSE(浮点矢量)。这意味着在将旧的固定功能3D图形管道移至3D图形硬件上时,3D图形引擎的工作方式定义得相当明确。

然而,有了3D图形,曾经在硬件上完成的工作现在可以在软件中完成,以提高灵活性-例如,着色器就是软件,这就是我们如何获得大量不同着色器的方式,从而赋予了不同的材质外观。但是,该软件仍比一般软件以更结构化的方式工作,因此仍可以使用更专业的硬件平台。这就是为什么您的图形卡现在可以加快从物理到破解密码的所有速度的原因-这些应用程序也适用于同一模型,并且可以使用现代图形处理器提供的指令集有效地实现。

图形处理器现在是数字信号处理器的精神上或实际的后代,它们曾经是(并且可能仍然是)一种用于处理数字信号(例如音频)的专用处理器。

最终得出结论-排序算法可以通过硬件加速。根据您的数据,可以使用处理器上的MMX或SSE(单指令多数据)指令来处理排序,但是由于内存带宽问题,可能没有太多意义-也许可以节省一些电能那样,虽然。但是,您也可以使用图形硬件。这样,您可以从通常更好的图形卡内存带宽中受益。您将无法以这种方式替换所有类型,但是这肯定是可能的,并且可能在适当的地方完成了。

IOW由于存在各种经济和实际问题,因此专门设计硬件来加速诸如分类之类的相对狭窄的任务并没有什么意义。一项功能可以加速更广泛的任务,或者使现有的加速硬件适用于更广泛的任务,这通常更具意义。


3

但是他们做到了!它们称为指令集扩展。(像SSE之类的东西)

某些任务在软件中具有非常好的实现。通常,这些实现足以胜任这项工作,因此不需要专门的硬件。如果要制造某种专用硬件,则需要具有广泛的应用程序才能使其物有所值。

如果您看一下可以使之工作的硬件,那么我猜想您将在看FPGA之类的东西。正如您在FPGA上所看到的那样,该芯片将变得更加昂贵,但不适用于许多应用。


我将不得不在Google上搜索SSE,但预先排序可能是通用的。它是在硬件级别实现的吗?
MaiaVictor

嗯,就像我们在那里,您会推荐书吗?
MaiaVictor

我只是在谈论一般在CPU样式处理器上实现的特定于作业的优化,因为排序网络仅作为示例。我不知道SSE或任何其他指令集是否包括排序特定的优化。我做了谷歌排序网络,并且由于有优化的通用实现,我认为如果实现正确,软件实现也可以完成这项工作。
Onno

我确实必须指出,大多数指令集扩展的工作级别都比您作为示例使用的排序网络低,但并非没有可能设计出可以以这种方式进行排序的多寄存器优化。但是对于CPU制造商来说,问题是:“它是否能偿还足够的成本以证明其合理性?”。
Onno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.