【发布时间】:2012-05-01 23:40:27
【问题描述】:
现代编程语言作为一等公民为其用户提供并行和并发机制。我了解并行算法是如何编程的,并且可以很好地想象多核 CPU 上的两个线程如何并行运行。
然而,这些平台中的大多数还支持在单个线程上运行并行进程。
- 这些进程真的并行运行吗?
- 如何在程序集级别上在单个线程上同时执行两个不同的例程?
【问题讨论】:
标签: language-agnostic parallel-processing computer-science
现代编程语言作为一等公民为其用户提供并行和并发机制。我了解并行算法是如何编程的,并且可以很好地想象多核 CPU 上的两个线程如何并行运行。
然而,这些平台中的大多数还支持在单个线程上运行并行进程。
【问题讨论】:
标签: language-agnostic parallel-processing computer-science
TLTR; : 在单个非超线程 CPU 内核上的并行性(在真正的同时执行的意义上)是不可能的。
硬件 (
您的问题与在案例 3(如果 HT 不可用/禁用)或案例 4 中运行两个软件线程有关。
在这两种情况下,进程实际上并不并行运行。由于在 CPU 级别执行的上下文切换极快,用户会产生一种同时性的印象,这往往会按顺序将物理内核(相应线程)时间分配给一个或另一个软件线程
在这两种情况下,这些例程根本不会同时执行,而是按顺序执行
分配给这 2 个例程中的每一个例程的相对优先级可以通过您赋予进程的“优先级”在不同的操作系统上设置,这将由操作系统的调度程序处理,进而分配 CPU 时间。
HTH。
要执行测试以更好地理解该主题,您可能需要在 Google 上搜索“cpu affinity”。这将让您在多核 CPU 的一个物理单核上运行一个双线程进程,并计算每个线程所花费的时间,同时修改它们的优先级等...
【讨论】:
是的,每个线程都有并行性,无论您使用哪种编程语言,您都可以免费获得它(尽管并行性的数量可能会有所不同)。
它叫做instruction-level parallelism。细节相当复杂,并且在不同的处理器微架构之间存在差异。
Computer Architecture: A Quantitative Approach 是一本很棒的书,其中包括关于指令级并行性的一章,书中的示例教授了如何理性地思考工程。
查看以下链接了解更多信息:
http://en.wikipedia.org/wiki/Superscalar
【讨论】: