1

似乎流行预测超标量无序 CPU 将走渡渡鸟的道路,并将被大量简单的标量有序内核所取代。这在实践中似乎并没有发生,因为即使并行化软件的问题明天就解决了,仍然有大量的遗留软件存在。此外,并行化软件不是一个小问题。

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

混合模型有什么问题,每台 PC 都配备一个或两个“昂贵的”超标量无序内核和 32 或 64 个“廉价”内核,但与昂贵的内核具有相同的指令集,并且可能在同一块硅?操作系统会意识到这种不对称性,并会首先调度无序的核心并使用最高优先级的线程。这种优先级甚至可能通过 OS API 显式地暴露给程序员,但程序员不会被迫关心区别,除非他/她想控制调度的细节。

编辑:如果投票结束是因为这被认为与编程无关,这里有一个反驳:我认为它与编程有关,因为我想听听程序员对为什么这样的模型是一个好主意或坏主意以及他们是否会想对其进行编程。

4

5 回答 5

2

W00t,多么好的问题=D

一眼就能看出两个问题。我建议你,现在我将在公开我的论点时考虑使用 CPU 受限的并行应用程序。

第一个是强加给操作系统的控制开销。请记住,操作系统负责将进程分派到它们将运行的 CPU。此外,操作系统需要控制对保存此信息的数据结构的并发访问。因此,您遇到了让操作系统抽象任务计划的第一个瓶颈。这已经是一个缺点了。

下面是一个很好的实验。尝试编写一个大量使用 CPU 的应用程序。然后,使用其他一些应用程序,如 atsar,获取用户和系统时间的静态信息。现在,改变并发线程的数量,看看系统时间会发生什么变化。绘制数据可能有助于计算(不是这样=)无用处理的增长。

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

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

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

于 2011-04-21T00:16:09.490 回答
2

@aikigaeshi 感谢您提及我的论文。我是耶鲁帕特的学生,实际上是题为“加速临界区”的论文的第一作者。经过大量研究,我们提出了这个想法。事实上,我最近在一次行业会议上就此事发表了重要讲话。这是我研究了几年后的看法:

@dsimcha,这个问题应该分成两部分以便进行很好的分析。

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

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

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

- 在编写并行程序、研究现有程序、研究处理器设计和在大公司工作一年之后,我实际上确信 ACMP 确实会帮助程序员。在当前模型中,程序员编写一个并行程序,然后识别串行瓶颈,然后对其进行锤击,直到其并行化,然后继续处理下一个瓶颈。我一般来说,瓶颈变得越来越难以解决,收益递减开始出现。如果硬件提供了一些能力来更快地运行瓶颈——神奇地——那么程序员就不必浪费太多时间来获得并行性能。他们可以并行化更容易并行化的代码,并将其余部分留在硬件上。

于 2011-05-10T07:54:38.807 回答
1

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

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

混合模型有什么问题,每台 PC 都配备一个或两个“昂贵的”超标量无序内核和 32 或 64 个“廉价”内核,但与昂贵的内核具有相同的指令集,并且可能在同一块硅?

它没有什么“错误”,但存在许多实际困难。例如,您提到按线程优先级进行调度,但这只是做出智能调度决策所需的众多指标之一。如果您的最高优先级线程是一个数据流应用程序,它对大核心缓存的使用非常差怎么办?您的净系统性能是否会提高以将此流式应用程序安排在一个小内核上?

于 2011-04-21T16:08:46.837 回答
1

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

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

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

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

这仅比 SSE 的自动矢量化优化已经做的复杂一点:它们将数据加载到 XMM 寄存器中,执行操作并将数据从寄存器中拆分出来。

于 2011-04-21T16:24:42.997 回答
1

许多大架构师实际上会同意你的观点,即异构架构显示出很多希望。前几天,我看到耶鲁·帕特 ( Yale Patt ) 担任这个职位的演讲,他预测下一代成功的架构将由几个大型快速核心和许多较小的核心组成。一个小组使用这个想法通过提供更大的核心来实际减轻并发开销,在关键部分执行的线程可以迁移到该核心。

于 2011-04-21T20:41:43.913 回答