单线程/核心的并行性如何可能?

thw*_*hwd 8 language-agnostic parallel-processing computer-science

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

但是,大多数这些平台还支持在单个线程上运行并行进程.

  • 这些过程是否真的并行运行?
  • 如何在汇编级别上在单个线程上同时执行两个不同的例程?

Ski*_*tol 8

TLTR; :在单个非超线程CPU核心上的并行性(在真正的同时执行意义上)是不可能的.


硬件(< - EDIT)Paralellism可以在几个层面实现.通过减少粒度来订购:

  1. 多主机
  2. 多处理器
  3. 多核心
  4. 多线程("超线程",即"HT")(编辑:我自愿省略了矢量化计算的情况,其中几个ALU可以由同一个核心驱动)

您的问题涉及在案例3中运行两个软件线程(如果HT不可用/禁用)或4.

  • 在这两种情况下,进程实际上并不是并行运行的.由于在CPU级别执行的极快的上下文切换,用户具有同时性的印象,倾向于将物理核心(相应的线程)时间顺序地分配给一个或另一个软件线程

  • 在这两种情况下,这些例程根本不是同时执行,而是按顺序执行

分配给这两个例程中的每个例程的相对优先级可以通过您为进程提供的"优先级"在各种操作系统上设置,这将由操作系统的调度程序处理,而调度程序又将分配CPU时间.

HTH.

要执行测试以更好地理解此主题,您可能需要google"cpu affinity".这将允许您在多核CPU的一个物理单核上运行双线程进程,并计算每个线程所花费的时间,同时修改其优先级等...