为什么不对常规任务进行规范(例如“排序”),然后让环境对其进行编译以最好地利用其硬件,而不是按照我们的方式进行编程?这样,我们可以为计算机提供新的专用硬件(例如分拣网络),并且它将自动与现有代码一起使用。
为什么不对常规任务进行规范(例如“排序”),然后让环境对其进行编译以最好地利用其硬件,而不是按照我们的方式进行编程?这样,我们可以为计算机提供新的专用硬件(例如分拣网络),并且它将自动与现有代码一起使用。
Answers:
首先,计算机带有专用硬件。现在售出的每台笔记本电脑和台式机都已经有相当多年的历史了,它都有一个专门的协处理器,即图形处理单元,可以处理视觉处理算法,例如视频和游戏应用程序所需的算法。大型计算机(例如,“超级计算机”,IBM的System Z系列)具有各种专用处理器来处理数字处理(“矢量处理”)等。
其次,排序是计算机研究最深入的方面之一,事实证明排序过于复杂,以至于无法比最简单的情况更多地内置到硬件中。排序是关于速度和正确性的。速度取决于算法的选择,数据的类型和变化以及数据量。正确性取决于数据的类型和上下文。对中等大小的整数数组进行排序是很简单的,这些数组适合CPU的本机字长(例如,31或63位加号)。对不仅仅包含ASCII值的字符串进行排序是非常复杂的-20年前,IBM出版了500多页的书,讨论的是国家边界和通用用法下的字符集问题。然后是非连续数据的问题-对链表进行排序涉及在整个内存中追逐指针。
主要问题是排序算法(1)需要很大的灵活性,而(2)无论如何都很难通过硬件来加速。
一件事是排序算法已经足够容易地快到足以超出处理器的内存带宽-处理器将已经花费大量时间等待数据来回移动到主内存。硬件加速的排序协处理器或特殊的排序指令将具有相同的问题。
解决此内存带宽的方法是通过使用具有更好“局部性”的更好算法和数据结构,并且在该领域仍然有大量工作要做,尤其是“缓存忽略算法”(它们在工作上就被忽略了)与缓存的详细信息无关,而“缓存感知”算法针对特定的缓存页面大小进行了调整等)。
相比之下,媒体应用程序(音频和图形,尤其是3D图形)利用了一些非常重复的结构-当然也有灵活性,但是它是建立在庞大且结构良好的基础之上的。这样就可以通过Blitting(可配置但仍非常结构化的块复制操作)和线条/多边形绘图等操作来简化图形加速。这意味着随着图形和声音处理变得越来越复杂,矢量运算已成为优化的明显目标-首先是MMX(整数矢量),然后是SSE(浮点矢量)。这意味着在将旧的固定功能3D图形管道移至3D图形硬件上时,3D图形引擎的工作方式定义得相当明确。
然而,有了3D图形,曾经在硬件上完成的工作现在可以在软件中完成,以提高灵活性-例如,着色器就是软件,这就是我们如何获得大量不同着色器的方式,从而赋予了不同的材质外观。但是,该软件仍比一般软件以更结构化的方式工作,因此仍可以使用更专业的硬件平台。这就是为什么您的图形卡现在可以加快从物理到破解密码的所有速度的原因-这些应用程序也适用于同一模型,并且可以使用现代图形处理器提供的指令集有效地实现。
图形处理器现在是数字信号处理器的精神上或实际的后代,它们曾经是(并且可能仍然是)一种用于处理数字信号(例如音频)的专用处理器。
最终得出结论-排序算法可以通过硬件加速。根据您的数据,可以使用处理器上的MMX或SSE(单指令多数据)指令来处理排序,但是由于内存带宽问题,可能没有太多意义-也许可以节省一些电能那样,虽然。但是,您也可以使用图形硬件。这样,您可以从通常更好的图形卡内存带宽中受益。您将无法以这种方式替换所有类型,但是这肯定是可能的,并且可能在适当的地方完成了。
IOW由于存在各种经济和实际问题,因此专门设计硬件来加速诸如分类之类的相对狭窄的任务并没有什么意义。一项功能可以加速更广泛的任务,或者使现有的加速硬件适用于更广泛的任务,这通常更具意义。
但是他们做到了!它们称为指令集扩展。(像SSE之类的东西)
某些任务在软件中具有非常好的实现。通常,这些实现足以胜任这项工作,因此不需要专门的硬件。如果要制造某种专用硬件,则需要具有广泛的应用程序才能使其物有所值。
如果您看一下可以使之工作的硬件,那么我猜想您将在看FPGA之类的东西。正如您在FPGA上所看到的那样,该芯片将变得更加昂贵,但不适用于许多应用。