Language agnostic 如何在单个线程/内核上实现并行性?

Language agnostic 如何在单个线程/内核上实现并行性?,language-agnostic,parallel-processing,computer-science,Language Agnostic,Parallel Processing,Computer Science,现代编程语言为其用户提供了并行和并发机制,作为一等公民。我了解并行算法是如何编程的,并且可以很好地想象多核CPU上的两个线程是如何并行运行的 然而,这些平台中的大多数还支持在单个线程上运行并行进程 这些过程真的并行运行吗 在汇编级别上,如何在单个线程上同时执行两个不同的例程 TLTR;:不可能在单个非超线程CPU内核上并行(真正的同时执行) 硬件(是的,每个线程都有并行性,无论使用哪种编程语言,您都可以免费获得它(尽管并行量可能会有所不同) 它被称为。细节相当复杂,并且在不同的处理器微体系结

现代编程语言为其用户提供了并行和并发机制,作为一等公民。我了解并行算法是如何编程的,并且可以很好地想象多核CPU上的两个线程是如何并行运行的

然而,这些平台中的大多数还支持在单个线程上运行并行进程

  • 这些过程真的并行运行吗
  • 在汇编级别上,如何在单个线程上同时执行两个不同的例程
TLTR;:不可能在单个非超线程CPU内核上并行(真正的同时执行)


硬件(是的,每个线程都有并行性,无论使用哪种编程语言,您都可以免费获得它(尽管并行量可能会有所不同)

它被称为。细节相当复杂,并且在不同的处理器微体系结构中有所不同

这是一本精彩的书,其中包括一章关于指令级并行性,书中的例子教你如何理性地思考工程

有关详细信息,请查看以下链接:


(4)混合了两种不同的东西。HT是硬件支持,允许在两个线程之间快速切换(因此,如果一个线程正在等待来自内存的数据,另一个线程可以接管)。还有(5)是软件级别上的“简单”线程。4和5都不是并行操作的“真实”线程,而是(4)非常接近,因为某些操作(或部分操作)可能与另一个超线程并行发生。例如,一个超线程的内存提取可能会在另一个超线程运行时发生。@adrew cooke:感谢您细化列表。我故意不将(5)包含在列表中,因为它是“软件”并行性,所以你是对的(我正在修改最初的帖子):我只列出了“硬件”并行性类型。-1:所有现代CPU都在指令级提供并行性。请看我的答案。@JørgenFogh:超标量/向量CPU是特殊类型的CPU。你所说的与我的论点并不矛盾,这与“单,非超线程CPU内核”。如果您希望我可以添加“非矢量化,非超标量”:)您在技术上是正确的。然而,多年来,所有CPU在指令级上至少都有一些并行性。大多数程序员从七十年代开始就不瞄准机器。