中文 英语

硬件相关的软件为什么那么重要呢

它可能不是最迷人的一种软件开发,但要正确对任何硬件平台的成功至关重要。

受欢迎程度

硬件和软件是一个硬币的两面,但是他们经常生活在不同的世界。在过去,很少的硬件和软件的设计在一起,许多公司和产品失败了,因为总不能交付的解决方案。

最大的问题是该行业是否学到了什么。至少,人们普遍认为,硬件相关的软件有几个关键角色扮演:

  • 它使得软件开发人员可用的硬件的特点;
  • 它提供应用软件到硬件的映射;和
  • 它决定公开给应用程序开发人员的编程模型。

一个弱点在其中任何一个,或者对行业的期望不匹配,可以产生巨大的影响。

是错误的指责软件所有这些失败。“不是每个人都没有错在软件方面,”费Pikus说,首席科学家西门子EDA。“有时候,硬件问题是嵌入在一个革命性的想法。revolutionary-ness是自己的毁灭,基本上不需要革命。还有很多老无聊的空间解决方案。革命架构的威胁促使之前的快速发展停滞不前的系统,但这是真正需要的是什么。”

事实上,有时存在硬件是没有理由的。“人们想出了硬件架构,因为他们有硅,”Simon Davidmann说创始人兼首席执行官治之软件。“在1998年,英特尔推出了四核处理器,这是一个好主意。然后,硬件的世界里每个人都认为我们必须建立多核、多线程,非常令人兴奋。但没有软件需要。因为有很多硅可用摩尔定律和芯片是便宜,但是他们不能解决如何处理所有这些奇怪的架构。当你有一个软件问题,解决它与硬件,工作得很好。”

硬件通常需要包围一个完整的生态系统。“如果你只有硬件没有软件,它不做任何事情,“翼鹏Liu表示产品营销组主任Tensilica音频/语音IP节奏。”与此同时,你不能开发软件和说,“我做的。它总在发展变化。你需要一个大的生态系统在你的硬件。否则,它变得非常难以支持。”

软件工程师需要能够使用可用的硬件。“这一切都始于一个编程模型,”迈克尔·弗兰克说,研究员和系统架构师Arteris IP。“底层硬件是次要的部分。一切开始于摩尔定律的局限性,达到上限的时钟速度,内存墙,等。编程模型是理解如何使用硬件的一种方式,和规模的硬件或硬件的数量。这也是关于你如何管理你的资源可用。”

有例子的公司是正确的,从他们身上可以学到很多东西。“NVIDIA与并行编程模型并不是第一个,“西门子Pikus说。“多核cpu之前。他们甚至不是第一个SIMD,他们只是给了一个更大的规模。但英伟达做某些事情。他们可能会死亡,像其他人一样试图做同样的事情,如果他们没有得到正确的软件。通用GPU编程模型可能不同。但它不是在革命成功或失败的感觉。这是球员的区别革命要成功。其他人很大程度上注定自己离开他们的系统基本上unprogrammable。”

这同样适用于特定于应用程序的情况下,。“世界上的音频处理器,你显然需要一个良好的DSP和合适的软件的故事,“节奏的刘说。“我们与整个音频行业,特别是提供软件知识产权的公司,建立一个庞大的生态系统。从非常简单的编解码器到最复杂的,我们一直在与这些供应商优化DSP提供的资源。我们投入很多时间和精力去建立基本的DSP功能用于音频,如fft算法和biquads许多音频应用程序中使用。然后我们优化DSP本身,基于软件的样子。有些人称之为共同设计的硬件和软件,因为他们相互依存”。

正确的硬件
与硬件很容易得意忘形。“当一块计算机体系结构使它在一块硅,然后有人可以构建成一个产品部署工作负载,所有的软件,使得访问每个建筑特性必须到位,这样行尾软件开发人员可以利用它,”马克哈姆布赖顿说,副总统的开源软件手臂。“没有点特性添加到一个硬件除非是通过固件或中间件。除非所有的碎片,任何人购买的动机是什么,技术和构建成一个产品?这是硅死了。”

这些想法可以进一步扩展。“我们建造最好的硬件来满足市场需求,动力性能和面积,”刘说。“然而,如果你只有硬件没有软件可以使用它,你不能拿出,硬件方面的潜力PPA。你可以继续添加更多的硬件来满足性能需求,但当你添加硬件,加上电力和能源以及空间,这成为一个问题。”

今天,这个行业是关注多个硬件引擎。“异构计算开始与浮点单位当我们只有整数运算处理器,“说Arteris弗兰克。“然后我们得到第一个向量引擎,我们得到你最终拥有一个GPU异构处理器作为加速器。从这里,我们看到大量的专门的引擎,密切配合控制处理器。到目前为止,一个算法之间的映射这个硬件,聪明的程序员的工作。接着CUDA、周期和所有这些其他领域特有的语言。”

赛车对人工智能
的出现人工智能为硬件创造了一个巨大的机会。“我们看到的是人这些算法在机器学习和人工智能需要更好的硬件架构,“治之”Davidmann说。“但都是为了一个目的——加速这个软件基准。他们今天真的有软件在AI,他们需要加速。这就是为什么他们需要这些硬件架构。”

需要可能是暂时的。”有很多小规模的,通用公司想做人工智能芯片,对于那些有两个存在风险,“Pikus说。”一个是软件,另一个是当前风格的AI会消失。人工智能研究人员称反向传播需求。只要我们做的反向传播神经网络我们永远不会成功。这是反向传播,需要很多的专用硬件为我们今天做神经网络的方法设计的。匹配为他们创造机会,这是非常独特的,和其他类似于垄断市场。”

许多硬件AI的要求不同于其他基于数学的应用程序。“AI现在在音频中起着巨大的作用,”刘说。”这声音触发器和语音识别,现在继续使用神经网络等降噪。神经网络是MAC的核心引擎,而这些不改变戏剧性地从音频处理的要求。什么改变是激活函数,非线性函数,有时不同的数据类型。我们有一个加速器,我们已经与我们的紧密集成DSP。我们的软件提供一个抽象层的硬件,所以用户仍然是DSP编写代码。抽象层基本数据是否运行在加速器上,还是在DSP上运行。框架的用户,他们通常看编程一个DSP编程的具体硬件。”

该模型可以推广到许多应用程序。“我有这个特定的工作负载。什么是最适当的方式执行,在这个特殊的设备?”的哈姆布赖顿问道。”处理元素是能够执行工作流最有效,或处理元素不主张在那个特定的时间吗?数据中心是一个高度并行、高度线程的环境。可能有多个争夺一个特定处理元素,所以它不可能更快地使用一个专用的处理元素。相反,使用通用的CPU,因为专门处理元素是忙碌的。生成的图最好的方式来执行这个复杂的数学运算是一个非常动态的事情。”

从应用程序代码到硬件
编译器几乎是理所当然的,但他们可能非常复杂。“编译器通常试着安排的指令执行代码,以最优的方式对“哈姆布赖顿说。“但整个软件系统是一个阈值。一侧,这是世界上深深嵌入系统代码中手工制作的,在编译器优化专门为我们构建的硬件。系统自定义的一切。现在或在不久的将来,你更有可能运行标准操作系统经历了一个非常强烈的质量周期uplevel质量标准,以满足安全性至关重要的目标。在基础设施领域,他们跨过了这道门槛。这是完成了。唯一的特定于硬件的软件是运行在基础设施空间的固件。所有以上固件是一个通用的操作系统从AWS,或从SUSE,规范化,红色的帽子。 It’s the same with the mobile phone industry.”

编译器存在多个水平。“如果你看看TensorFlow,它是建立在某种程度上,你的编译器工具链知道一点关于你的处理器的功能,”弗兰克说。“你瓷砖向量或矩阵的尺寸吗?什么是最优块大小将数据从内存缓存。然后你建造很多这些东西到优化路径,有多次优化。块通过TensorFlow程序块,把它拆开,然后分裂成不同的地方或处理数据,得到最优使用的内存值。”

有限制的编译器优化任意指令集。“编译器通常没有任何的微架构的知识,或存在潜在的延迟在整个系统设计中,“哈姆布赖顿说。“你只能安排这些以最优的方式。如果你想做内部优化编译器为特定的微架构,它可以潜在的灾难性的不同的硬件上运行。我们通常做的是确保编译器生成我们认为最明智的指令流公分母是可能的。当你在根深蒂固的空间,你知道系统是什么样子的,你可以让一组不同的妥协。”

这个问题公开进行的x86架构。“在过去,有一个常数AMD和英特尔之间的战斗,”弗兰克说。“英特尔处理器会更好如果软件是使用英特尔编译器编译的,而AMD处理器将会从悬崖坠落。一些将此归因于英特尔被恶意和AMD试图玩坏,但这主要是由于编译器被调到英特尔处理器微架构。偶尔,会做坏事的AMD处理器,因为它不知道管道。有绝对的优势如果有内在的知识。人走在做这些类型的设计和在自己的编译器。”

嵌入式物联网市场空间和非常定制的今天。“每次我们添加新的硬件特性,总是有一些优化编译器,”刘说。“偶尔,我们的工程师会发现一点不是最优化的代码,所以我们用编译器实际工作团队以确保编译器的任务。有很多反馈来回在我们的团队。我们有工具概要文件汇编级的代码,我们确保编译器生成很好的代码。”

优化软件对很多人都很重要。“我们的客户正在构建的软件工具链和使用处理器模型来测试他们的软件工具,“Davidmann说。“我们已经标注技术在我们的模拟器,这样他们就可以将时间与指示,我们知道人们使用优化软件。他们在报告要求增强,从运行运行方式比较数据,重放和比较事物的能力。编译器和工具链开发人员肯定是使用先进的模拟器,帮助他们调整他们在做什么。”

但它远不止这样。“还有另一个群的人正试图调整他们的系统,他们从一个应用程序正在运行,“Davidmann补充道。“他们想看看的工具链做了一些算法。然后,他们意识到他们需要不同的指令。您可以优化您的编译器,但是到目前为止,只有让你。您还可以优化硬件和添加额外的指令,你的程序员可以目标。”

可以带来重大的发展延迟,因为编译器必须更新软件可以重新编译目标之前更新的硬件架构。“可用工具套件,可以帮助识别热点,或者应该是优化的,“说Zdeněk Přikryl,首席技术官Codasip。“一个设计师可以做快速设计空间迭代,因为他需要做的就是改变处理器描述和输出,包括编译器和再生的模拟器,准备下一轮的绩效评估。”

一旦硬件特性设置、软件开发仍在继续。”作为我们学习更多关于使用这个特性,我们可以适应的软件,利用它来优化特定的性能特征,”哈姆布赖顿说。“你可以提前做的基本实现功能,然后随着它越来越明显的工作量如何利用这个特性,您可以调整实施。构建硬件可能是一次性的,但是软件支持的尾巴持续许多,许多年。我们还增强我们烤成v8.0,这是10年前的事了。”

刘表示同意。“我们的硬件架构并没有真正改变了多少。我们添加了新的功能,一些新硬件加速的新需求。每次基础架构是相同的,但需要持续的软件开发从未放慢。只有加速。”

导致软件团队的增长速度超过了硬件团队。“在今天的手臂,我们有大约50/50分成硬件和软件,”哈姆布赖顿说。“这是八年前截然不同,当人们更像是四个硬件软件的一个人。硬件技术相对相似,无论是使用在移动领域,基础设施空间,或汽车空间。在硬件的主要区别是核心,互连的性能,记忆之路。与软件,每次你进入一个新领域,它是一个完全不同的软件技术,你处理——甚至一组不同的工具链。”

结论
软件和硬件相互紧密,但软件增加了灵活性。连续软件开发是需要调优之间的映射两个随着时间的推移,很久之后的硬件已经成为固定,并能够有效地在现有的硬件上运行新工作负载。

这意味着硬件不仅与好的软件被交付,但硬件必须确保它使软件能够充分利用它。



留下一个回复


(注意:这个名字会显示公开)

Baidu