中文 英语

多少核?(第1部分)

第1部分:设计团队正在重新考虑正确的核心数量和类型,它们需要多大,以及它们如何组织。

受欢迎程度

芯片设计中的最佳处理器核数正变得越来越不明显,部分原因是新的设计和架构选项使其更难进行清晰的比较,部分原因是仅仅在一个问题上投入更多的核并不能保证更好的性能。

这并不是一个新问题,但它确实有一个相当大的新组合和变量列表——大小合适的异构核心、编写得更好的软件、新的内存类型和多种打包选项。此外,虽然这看起来只是关于分区的又一个讨论,但它伴随着越来越强烈的紧迫感和担忧感。随着晶体管密度的不断增加,有必要对设计进行一些根本性的改变,以降低泄漏电流和动态功率密度,以及减少内存和I/O的争用。

解决这些问题的一种方法是添加更多所有类型的处理元素,更多地关注它们需要放置在哪里以及它们实际做什么的细节。但是,哪些、大小、时钟频率、放在哪里、如何利用它们,以及它们对整个系统设计有什么影响,这些都是越来越难以回答的问题。

大辩论
上述讨论的部分内容可能听起来很熟悉。自1961年Burroughs首次引入具有非对称多处理的双处理器主机以来,选择正确数量的处理元素一直是争论的焦点。随后出现了各种各样的方案,在计算机中添加更多的处理元素,从20世纪60年代中期的大型主机上的对称多处理开始,到20世纪90年代pc上的计算和图形加速器芯片。然后,从2006年开始,英特尔推出了双核处理器,作为在密集处理器核心中最小化热量的一种方式。

在那里,好处基本上已经停止了。除了少数令人尴尬的并行应用程序,如pc上的图像和视频处理,以及数据中心中与数据库和搜索相关的应用程序,更不用说计算密集型应用程序,如芯片设计中的硬件加速验证,CPU中的核心数量通常被证明只不过是旧的MIPS/MHz/GHz营销大战的延伸。越多越好,即使它们实际上并不影响性能。在某些情况下,额外的核心除了增加设计成本之外没有任何用处。

芯片制造商、软件开发商、研究机构和各种财团数十年来一直试图解决并行问题。大量的资金被用于开发新语言、并行编程方法和大学计算机科学专业的新课程。如果他们成功了,关于内核数量的争论就会消失。但是大多数消费者应用程序仍然不能利用多个计算核心。

这就解释了为什么大型复杂的soc实际上有几十个独立的计算元素。这似乎是违反直觉的,直到您考虑到这些核心中的一些是其他核心的加速器,而其他核心则作为孤岛—它们与设备中的任何其他功能很少或根本没有交互。用它们自己高度特定的处理器分离函数,尤其是IP子系统,通常比让这些函数在中央处理器单元上运行要简单得多。虽然这可能会导致涉及系统级一致性的问题,但这是一种更简单的设计芯片的方法,而且节能得多。

“这一切都归结为Amdahl法则阿温德·拉格拉曼说,他是该公司嵌入式系统部的工程师导师图形.“软件的规模有一个实际的限制。各种软件编程范例都有限制,比如在遇到顺序问题时将软件重新组合成微内核。在大多数情况下,这是一个重要的瓶颈。”

即使在最好的情况下,增加更多的内核也不会对功率或性能产生线性影响。在两个内核上以较慢的时钟速度运行进程并不比在一个内核上以更快的速度运行进程的性能提高一倍。对于那些可以轻松并行化的应用程序,在解析和重组阶段仍然存在开销。

“事实上,正如所有人都知道的那样,在SMP中增加四个核可能只能给你两个核的真正性能,”库尔特·舒勒说,该公司营销副总裁Arteris.“嵌入式世界中的很多东西,尤其是手机,都是单线程和事件驱动的,所以真的无法预测。”

这导致了许多不同的策略,以更有效地使用处理元素。这里最大的问题是,并不是所有的东西都是直接的苹果对苹果的比较。例如,如果软件是与异构多核芯片共同开发的,那么每个计算功能所需的周期可能比在类似处理器上运行的商业开发软件要少。同样地,在不同元素之间分割处理在规格表上可能看起来更有效,但内存吞吐量可能低于不同配置、不同芯片中的类似配置,甚至使用不同制造工艺的配置。

“如果你看看深度学习,你会发现它的策略是使用大量高度可并行化的核,”研究人员克里斯·罗文(Chris Rowen)说节奏的家伙。“目前的想法是,你可能想要1000个核,但使用1个核和1000个乘法器可能更容易、更快。这就像是在问,‘1只两岁的孩子和1000只蟑螂,哪个更聪明?“软件是其中的关键部分。在抽象的最高级别上,您可能运行Windows、Android或iOS,而在较低级别上,您使用的是依赖于升级原则的更面向实时的软件。最低级别的软件可以识别自己的限制并中断更高级别的进程。所以有更多的进程,但不一定有更多的处理器。”

选一个数字
几十个工程师和架构师之间的普遍共识是,智能手机CPU的最大核数是4到8个,而应用程序通常只使用一个核。其他的都是备用的,一般都是断电的。

“智能手机有20到30个核,”中兴通讯北美业务副总裁艾默生·萧(Emerson Hsiao)说安第斯山脉的技术.“他们中的很多人都在做简单的任务,比如测试控制。我们还看到针对功率或性能进行优化的专用内核,以及在特定任务上协同工作的其他内核。所以对于相机来说,你可以识别物体,而不仅仅是图像。这些通常是定制的处理器,而不是通用的。”

但即使在这里,数学也不总是正确的。例如,在黑箱IP子系统中,除了IP开发人员,没有人真正知道里面有多少处理元素。其中一些与子系统之外的任何东西都没有连接。

“如果你可以在没有太多集成负担的情况下做到这一点,那么子系统的灵活性当然会更容易,”at的CTO Drew Wingard说超音速.从封装的角度来看,这非常重要,因为您不需要考虑处理资源的争用。您不必处理中断,也不必担心数据处理是否在子系统中进行。从抽象的角度来看,这也很好,因为计算资源对系统的其余部分是不可用的。”

这种类型的方案中的其他处理元素仅零星地进行通信,例如当用户调用特定进程时启动加速器。智能手机多年来一直采用这种方法,它结合了dsp、gpu和mcu,为听音乐、流媒体视频或玩游戏等特定操作进行了优化。

根据定义,这些是异构核心。但其中一些比其他的更不均匀,并不是所有的都取决于核心。其他重要因素包括它们被放置在哪里,如何利用它们,以及在许多情况下谁在使用它们。通过将核心非常严格地匹配到某些任务,并适当地调整它们的大小,特别是针对这些任务和核心编写的软件,可以显著提高效率和性能。

雅典娜集团销售和营销副总裁帕特·鲁格说:“12年前,我们开始使用自己定制的指令集开发自己的加密微处理器。“它们可以做乘法、加法和减法,但也可以做AES和随机数生成。它们的效率也比使用单个内核高出10倍以上。”

这也是异构多核cpu背后的策略。手臂的大。LITTLE建筑就是一个例子。英特尔该公司还表示,计划在此基础上推出自己的产品,通过高速网桥将fpga连接到多核处理器。

Mentor的Raghuraman表示:“这里的挑战在于,要确定应该使用哪个核心并不总是那么容易。“这是设计方面的妥协。决定何时从大集群转移到小集群并不总是容易的,所以它可能无法满足延迟要求。”

在业务环境中,例如基于云的服务器,钟摆经常向相反的方向摆动。有许多方法可以同时使用多个核来实现并行化进程,这就是同构多核最有用的地方,或者异构多核体系结构发挥作用的地方。根据它们的使用方式以及数据是否需要一致,它们可以是缓存一致的,也可以是独立运行的。

总部位于巴黎郊外的处理器公司Kalray正在开发最多288个64位核的芯片,用于数据中心的网络和存储,以及自动驾驶汽车。“我们的重点是令人尴尬的并行应用程序,你不需要在一个处理器之间共享数据,”该公司销售和营销副总裁让-皮埃尔·德曼奇(Jean-Pierre Demange)说。“有许多过程彼此之间毫无关系。这里真正的关键是你需要吞吐量。”

软件
决定使用多少内核以及如何使用它们的关键因素之一是软件,这是关于内核的讨论真正令人困惑的一个领域。商业开发的软件可能能够跨多个核运行,但它通常不如与具有较少核的处理器一起开发的软件有效,无论这些核是异构的还是同质的。

“软件定义了核心的上限,”微软虚拟样机产品营销总监汤姆·德·舒特(Tom De Schutter)说Synopsys对此.“因此,通过嵌入式视觉,你可以拥有大量的并行性。gpu和fpga需要不同级别的并行。这就是为什么我们看到专用处理器的回归,这是过去几年的一个趋势。在很长一段时间里,我们看到了出售处理器的IP供应商的消亡。现在我们看到了一个相反的趋势,新的应用程序恢复了特定于应用的处理器。”

德舒特指出了多核软件的两个趋势。其中一项涉及到针对流行处理器的软件标准化,比如Linaro联盟正在对ARM内核做的事情。其次是更加专业化,包括专门的算法来最小化功耗。“这些都是非常特定的软件堆栈,越来越多的软件开发人员正变得高度专业化。”

第2部分:设计注意事项,如新的体系结构和内存策略,以及如何构建和测试这些系统。

有关的故事
异构多核头痛
餐桌上的专家:多核和多核
多核的疯狂



2的评论

卡尔·史蒂文斯 说:


我认为这一段是关键

“这就解释了为什么大型复杂的soc实际上有几十个独立的计算元素。这似乎是违反直觉的,直到您考虑到这些核心中的一些是其他核心的加速器,而其他核心则作为孤岛—它们与设备中的任何其他功能很少或根本没有交互。用它们自己高度特定的处理器分离函数,尤其是IP子系统,通常比让这些函数在中央处理器单元上运行要简单得多。虽然这可能会导致涉及系统级一致性的问题,但这是一种更简单的设计芯片的方法,而且节能得多
无论共享处理器上有多少个处理器核心,共享内存只有一个,内存访问可能会限制速度。(操作系统呢?)
函数分离,指令和数据都有本地内存,这意味着事情实际上可以并行工作。
但如果每个处理器都需要内存和缓存,那么它很快就会变得过于昂贵。这就是为什么应该使用小型/可伸缩的可编程互连块。(它适用于并行搜索,所以应该适用于并行函数)
必须有消息和数据传递的互连,这样才能传递数据和消息(请求/响应/数据)。
Altera Qsys就是一个可用的例子。我没有使用过Qsys,但在开发过程中参与过讨论,我相信这个概念。

埃德·斯珀林 说:

卡尔,关于软件和可编程性的观点很好。请继续关注第二部分。

留下回复


(注:此名称将公开显示)

Baidu