“格里德利,准备好了就开火。”这是杜威准将在1898年马尼拉湾战役中发出的著名命令。他可能没有意识到这一点,但他阐明了数据流计算的基本原理,即只要输入可用,就可以执行指令。长期以来,数据流一直吸引着计算机架构师,因为它可能是计算电路最“自然”的利用并行性能的方式。
当一个来访的外星人被告知我们如何在程序中处理并行时,他可能会被原谅。数学算法具有丰富的并行性;唯一的限制是数据依赖性(当操作符的输入可用时,可以对其进行计算)。我们用主流编程语言(C/ c++、Python等)编写代码,这些语言具有完全顺序的语义(零并行性)来理解对内存的读写。见图1在美国,编译器努力重新发现内部cdfg(控制和数据流图)中丢失的一些并行性,然后生成完全顺序的机器代码。当我们在现代的冯·诺依曼CPU上执行这一操作时,大问题、无序的电路会再次付出巨大的努力(消耗能量)来重新发现并行性。
20世纪70年代到90年代初,人们多次尝试避免这些“不必要的”序列化图2).数据流语言(大部分是纯函数)和机器代码(数据流图)从数学上保留了并行性。与程序计数器不同,每条指令直接指定接收其输出的后续指令。数据流cpu直接执行这个图形机器码。现在这种计算模型被缩写为EDGE,用于显式数据流图执行。
那么,为什么我们今天不都使用EDGE机器呢?一个简短的答案是,他们从来没有完全掌握空间或时间的局部性,在固有的顺序代码区域是低于标准的。相比之下,现代的冯·诺伊曼cpu在这方面做得很好,可以在快速昂贵的电路(寄存器、电线)、介质(缓存)和缓慢廉价的电路(dram)之间管理高效的数据流。
Tony Nowatzki、Vinay Gangadhar和Karthikeyan Sankaralingam在下面的论文中描述了一种利用这两种模型的创新方法。从CDFG,它们的编译器生成传统的顺序机器码和数据图,每一个都在适当的电路上执行(蓝色方块在图2),设有有效的交接机制。作者描述了对现有代码验证这种方法可行性的广泛研究。
EDGE计算正在经历复兴,许多研究人员都在追求相关的想法。有迹象表明,大型行业参与者也在考虑朝这个方向发展。一个
数字图书馆是由计算机协会出版的。版权所有©2019 ACM, Inc.
没有发现记录