为什么不混合无序,大规模并行?

问题描述 投票:1回答:5

预测超标量乱序CPU会像dodo一样流行,并且将被大量简单,标量,有序内核取代。 实际上,这似乎没有发生,因为即使明天解决了并行化软件的问题,仍然还有大量的旧版软件。 此外,并行化软件不是一个小问题。

我知道GPGPU是一种混合模型,其中CPU是为单线程性能而设计的,而图形卡是为并行性而设计的,但这是一个丑陋的过程。 程序员需要显式地重写代码才能在图形卡上运行,据我所知,高效地表示图形卡并行性要比高效地表示多核通用CPU困难得多。

混合模型有什么问题,其中每台PC都配备一个或两个“昂贵”的超标量乱序内核以及32或64个“便宜”的内核,但指令集与昂贵的内核相同,并且可能在同一内核上硅? 操作系统将意识到这种不对称性,并会首先以最高优先级的线程调度乱序内核。 这种优先级甚至可以通过OS API明确地向程序员公开,但是除非程序员希望控制调度的细节,否则程序员不会被迫关心区别。

编辑:如果投票表决结束是因为这可能与编程无关,那么请驳斥一下:我认为这与编程有关,因为我想听听程序员对于这种模型的优缺点或观点的看法想要对其编程。

cpu multicore computer-architecture parallel-processing
5个回答
2
投票

W00t,多么大的问题= D

乍一看,我看到了两个问题。 我建议您,现在,在公开参数时,我将考虑使用CPU限制的并行应用程序。

第一个是施加给操作系统的控制开销。 请记住,操作系统负责将进程调度到将在其上运行的CPU。 此外,操作系统需要控制对包含此信息的数据结构的并发访问。 因此,您遇到的第一个瓶颈就是让操作系统抽象出任务计划。 这已经是一个缺点。

以下是一个不错的实验。 尝试编写一个使用CPU的应用程序。 然后,使用atsar之类的其他应用程序获取用户和系统时间的静态信息。 现在,更改并发线程的数量,并查看系统时间如何。 绘制数据可能有助于估计无用处理的增长(不是这样)。

其次,在向系统添加内核时,还需要功能更强大的总线。 CPU内核需要与内存交换数据,以便可以进行计算。 因此,有了更多的内核,您将可以同时访问总线。 有人可能会争辩说可以设计一个具有多个总线的系统。 是的,的确可以设计这样的系统。 但是,必须采用额外的机制来保持内核使用的数据的完整性。 某些机制确实存在于高速缓存级别,但是在主内存级别部署它们非常昂贵。

请记住,每次线程更改内存中的某些数据时,此更改必须在其他线程访问此数据时传播给其他线程,这在并行应用程序(主要是数字应用程序)中很常见。

但是,我确实同意您的观点,即当前的模型很丑陋。 是的,如今,在GPGPU编程模型中表达并行性要困难得多,因为程序员完全负责移动位。 我急切希望为多核和GPGPU应用程序开发提供更简洁,高级和标准化的抽象。


2
投票

@aikigaeshi感谢您提及我的论文。 我是耶鲁·帕特(Yale Patt)的学生,实际上是该论文的第一作者,标题为“加速关键部分”。 经过大量研究,我们提出了这个想法。 实际上,我最近在一次行业会议上就此做了重要演讲。 这是我学习几年后的看法:

@dsimcha,应将问题分为两部分,以进行良好的分析。

  1. 我们是否需要运行某些代码的能力比其余代码快? 然后,这个问题引出了一个更简单的问题:某些代码比其他代码更关键。 我将关键代码定义为线程内容所在的任何代码。 当线程争夺一些代码来完成执行时,线程正在等待的代码显然变得更加关键,因为加快该代码的速度不仅加快了当前执行代码的线程的速度,而且还加快了等待当前线程的线程的速度完成执行。 单线程内核是一个很好的示例,其中所有线程都在等待单个线程完成。 关键部分是另一个示例,其中所有想要进入关键部分的线程必须等待任何先前的线程完成关键部分。 更快地运行这样的关键代码显然是一个好主意,因为在争用代码时,它本质上就变得对性能至关重要。 还有其他情况,例如减少,负载不平衡,借贷者线程问题,这些都可能导致关键代码,而更快地执行此代码会有所帮助。 因此,我强烈得出结论,即需要所谓的性能不对称。

  2. 我们如何提供性能不对称? 在同一系统中将大小内核并置在一起是提供这种不对称性的一种方法。 虽然这是我探索过的体系结构,但是在探索其他提供不对称性的方式时,应该做大量研究。 频率缩放,优先处理来自关键线程的内存请求,为关键线程提供更多资源是提供不对称性的所有可能方法。 回到大型核心架构和小型核心架构:我的研究发现,在大多数情况下这是可行的,因为将任务迁移到大型核心的开销被加速关键代码所获得的好处所抵消。 我会跳过一些细节,但需要进行一些非常有趣的权衡。 我鼓励您阅读我的论文或我的博士学位论文以获取详细信息。

我还想指出一些主要事实。 -我能够在不修改软件程序的情况下利用这种非对称芯片(ACMP),从而证明它不会增加应用程序程序员的工作量-我没有发现OS的工作具有挑战性。 我自己花了几个星期就实现了运行时,这对我的学习非常有用。 我了解他在OS社区中担心更改OS,并且我赞赏工程资源的价值,但是,我不同意OS更改应该成为限制因素。 它的问题将随着时间而克服。

-在编写并行程序,研究现有程序,研究处理器设计以及在大型公司工作之后,我坚信ACMP实际上将为程序员提供帮助。 在当前模型中,程序员编写并行程序,然后确定串行瓶颈,然后对其进行锤击,直到并行化,然后继续进行下一个瓶颈。 总的来说,瓶颈变得越来越难解决,而收益也越来越少。如果硬件提供了更快运行瓶颈的能力(很神奇地),那么程序员将不必浪费太多时间来获得并行性能。 他们可以并行化更易于并行化的代码,并将其余部分留在硬件上。


1
投票

您的帖子读起来更像是假设而不是询问。 这个主题被称为异构架构 ,目前是一个活跃的研究领域。 您可以在行业会议上找到有趣的关于异类策略的研讨会和主题演讲。

http://scholar.google.com/scholar?q=heterogeneous+architectures&hl=zh-CN&btnG=Search&as_sdt=1%2C5&as_sdtp=on

混合模型有什么问题,其中每台PC都配备一个或两个“昂贵”的超标量乱序内核以及32或64个“便宜”的内核,但指令集与昂贵的内核相同,并且可能在同一内核上硅?

没有什么“错”,但是有许多实际困难。 例如,您提到了按线程优先级进行调度,但这只是做出智能调度决策所需的众多指标之一。 如果您的最高优先级线程是一个数据流应用程序,而该应用程序很少充分利用大型核心缓存,该怎么办? 您的网络系统性能会提高,以便在小型内核上调度此流式应用程序吗?


1
投票

您的想法听起来很像AMD的Fusion计划。 AMD正在将GPU集成到CPU中。 目前,这是因为它们的低功耗慢速设计旨在取代英特尔的Atom,但他们正在将其提升到笔记本电脑芯片中。

我相信有传言说AMD的服务器芯片Bulldozer设计将在几年内使用Fusion,可能会完全取代Bulldozer浮点单元。

这些GPU单元没有使用相同的指令集,但考虑到CPU内置了GPU,编译器本身可以自由使用它,就像其他任何类型的MMX / SSE矢量指令类型一样。

一个可能的示例是对浮点数的C ++向量进行数学运算的循环。 编译器的优化设置为AMD-Whatever,可以编写机器代码来固定向量存储器,调用GPU程序并等待结果。

这仅比针对SSE的自动矢量优化所做的复杂一点:将数据加载到XMM寄存器中,执行操作,然后将数据从寄存器中分离出来。


1
投票

实际上,许多大型架构专家都会同意您的观点,因为异构架构显示出很大的希望。 前几天我看到耶鲁·帕特Yale Patt)担任这一职位的演讲,他预测下一代成功的体系结构将由几个大型快速内核以及许多较小的内核组成。 一组人通过提供一个更大的核心,可以将在关键部分执行的线程迁移到该内核上,从而实际上减轻了并发的开销。

© www.soinside.com 2019 - 2024. All rights reserved.