【问题标题】:What are all the different types of parallelism?有哪些不同类型的并行性?
【发布时间】:2017-12-20 21:13:20
【问题描述】:

我正在尝试更多地了解并行性,但我注意到那里有很多不同的术语,有些似乎意思相同,而另一些则有显着差异。那么,所有不同类型的并行性是什么,它们之间有何不同,是否有特定的应用程序或目的?
(为了让这一点更加集中,我希望得到一个能够提供的答案清楚所有与并行性相关的术语,包括下面未列出的术语;每种不同类型之间的技术比较会很好,但可能会导致这个问题变得离题 - 再说一次,我真的不知道,因此问题).

注意:
这不是关于并发的问题,并且超出了“简单”问题:“什么是并行性?”,尽管可能需要一个明确的定义。

首先,我注意到了parallelism and threading之间的区别,但是以下术语之间的一些区别仍然令人困惑。

为了澄清我的问题,这里列出了我发现的与并行性相关的术语列表:并行计算、并行处理、多线程、多处理、多核编程、超线程(英特尔)2、同时多线程(SMT)3,开启事件多线程3。 (如果可能,还应感谢这些术语中的每一个的定义或对定义的引用)。

我非常具体的问题:线程级并行、指令级并行和进程级并行之间有什么区别? (以及任何其他 x 级并行性)?

在多核处理器中,是否可以在单核内进行并行处理?这就是超线程吗?这是否需要一个具有例如两个可以并行使用的 ALU 的单核?

最后一个:硬件与软件并行性之间是否存在差异,除了一个发生在硬件中而另一个发生在软件中的明显区别之外?

相关资源:
- Process vs Thread,
- Parallelism on a GPU,
- Hyper-threading,
- Concurrency vs Parallelism,
- Hyper-threading and gaming.

【问题讨论】:

  • 通俗地说,都是同一个意思,只是具体的作者对不同的词有不同的含义,不同的作者对同一个词有不同的含义。所有这些都意味着您需要注意上下文。
  • 你错过了SIMD

标签: multithreading parallel-processing multicore hyperthreading


【解决方案1】:

问:

线程级并行、
指令级并行和
进程级并行有什么区别?

虽然主题确实非常广泛,但我会尝试持有这种观点,即使冒着让许多反对者提出他们对简化主题的反对意见的风险(但 StackOverflow 格式并不能替代其他完整参考来源,确实吗?):


A:
主要区别在于 WHAT / WHO / HOW
负责在true-[PARALLEL] 中执行

  • 指令级并行 - ILP - 是最简单的情况,CPU 架构设计并“硬连线”了这种特殊形式的基于硬件的并行。拥有具有 ILP4 的处理器(一次执行 4 条指令),或者具有这种并行指令执行形式的基于每条指令宽度的处理器,对于某些指令是 ILP2,对于其他一些指令是 ILP1,再次由硅架构决定,什么可以确实在指令级并行发生。进一步的细节可能会引起一些尴尬的意外,因为在 REG/MEMORY 微指令必须等待空闲通道才能访问指示的 MEMORY 的情况下,内存控制器通道可能会阻止 ILP 模式。

  • 硬件线程是下一个粒度级别。给定一个 CPU 内核被声明为支持两个硬件线程,这些是唯一的代码执行流,可以并行流动(如果没有 O/S 请求来实例化并安排另一个线程被执行,映射到一个可用的 CPU 核心硬件线程数)。从用户的角度来看,有一些 O/S 工具允许人们明确地将进程级 PID/线程级 PID 关联到特定的 CPU 内核,从而限制甚至消除任何“干扰”,以便从"just"-[CONCURRENT] 代码执行流更接近true-[PARALLEL]one。

我们将有意跳过所有线程群,它们只是延迟屏蔽的工具(无论是在 SIMT / SMX warp-wide GPU-scheduler 上,还是更轻松的 MIMT O/S-kernel 驱动的多线程)


- MIMT: 多指令多线程,一种不受限制的线程执行结构/策略,其中任何线程都可以并且确实向处理器发出不同的指令以执行,而不是到 SIMT
- SIMT: 单指令多线程,通常是 GPU 流式多处理器代码执行架构
- SMX:流式多处理器执行单元,通常是 GPU SIMT 构建块根据 WARP 范围的 SIMT 代码调度程序协调,GPU 内核代码单元可以被引导(寻址)以进行 TaskQueeue 调度并稍后执行

【讨论】:

  • 如果您在介绍首字母缩略词时或在结尾处解释首字母缩略词,您的回答会更有用...SIMT? SMX? MIMT? ILP4?
  • 对,抱歉,该领域太长了,无法期望术语和清晰度。
【解决方案2】:

线程级并行、指令级并行和进程级并行有什么区别?

在1中,不同的CPU核心执行不同的指令流。

在 2 中,单个 CPU 内核并行执行来自单个指令流的不同指令(这些指令要么是流中的连续指令,要么彼此非常接近)。

3 与 1 相同,区别在于外观。这只是关于哪些内存页面在线程之间共享以及哪些不是的默认设置。但是这些设置是用户可以通过进程创建标志、共享内存部分、动态库和其他系统 API 进行调整的,这就是为什么在较低级别上,进程和线程之间的区别并不大。

以及任何其他 x 级并行性

另一个重要的问题是 SIMD 级别的并行性。对于这一点,CPU 将相同的指令应用于存储在特殊宽寄存器中的多个操作数。使用 SSE,我们有 128 位宽的寄存器,我们可以例如将一个寄存器中的 4 个单精度浮点数向量乘以另一个寄存器中的另外 4 个值,使用单个 mulps 指令并行生成 4 个乘积。 ARM NEON 类似,也是 128 位寄存器,4 个浮点数乘以 4 个浮点数的指令是vmul.f32。 AVX 在 256 位寄存器上运行,因此它可以一次乘以 8 个浮点数,并使用一条 vmulps 指令。

可以在单个内核中进行并行处理吗?

是的。

这就是超线程吗

是的,指令级并行也是如此,SIMD 并行也是如此。

这是否需要具有例如两个可并行使用的 ALU 的单核?

现代 CPU 每个内核有两个以上,但 HT 是在 P4 中引入的,这不是必需的。 HT 的好处不仅仅是加载多个 ALU,它还在线程等待数据从缓存或系统 RAM 到达时使用内核。而且,由于附近指令之间的数据依赖性,在它停止时使用核心。 HT 允许 CPU 内核在等待时在另一个硬件线程上计算其他内容,从而提高 ALU 利用率。如果没有 HT,在 RAM 延迟的情况下,内核可能会等待数百个周期,或者在数据依赖延迟的情况下等待数十个周期。

硬件和软件并行之间有区别

当您有一个硬件线程和多个操作系统线程来计算东西时,在任何给定时间只有一个线程会运行。其余线程将等待。操作系统会定期(通常约 50-100Hz)切换运行哪个线程,目的是为所有线程提供公平的 CPU 时间。如果你愿意,你可以称它为软件并行,但我根本不会称这种东西为并行。

【讨论】:

  • 您可能还想帮助澄清 HT 对无序超标量 CPU 架构的延迟屏蔽的影响,而在有序架构中缺乏它.声明“只有 1 个线程将并行运行”似乎很奇怪 - 与什么并行运行? - 恕我直言,独奏在任何意义上与其他任何东西平行,它主要仍然是一个公正的独奏。
  • 恕我直言,此次修订并非改进——“同时运行”(与什么?)仍然令人困惑。
  • @user3666197 好的,希望这个更好
  • 好吧,保持你的感觉 - 但是“任何时候都只会运行 1 个线程。”仍然是最准确的表述,符合现实硅级执行。
  • @JWAspin 我想说超线程也是线程级的。对于 HT,单个 CPU 内核执行两个独立的指令流,具有独立的指令获取和解码块以及独立的寄存器集。这就是为什么对于一个操作系统来说,一个 HT 核心看起来像 2 个核心。此外,SIMD 不是指令级并行,指令不会并行。相反,SIMD 指令将相同的操作应用于多个值。有时,宽寄存器中的这些多个值称为“SIMD 通道”。我更新了我的答案,添加了更多关于 SIMD 的详细信息。
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 2016-09-17
  • 2013-06-23
  • 2010-09-27
  • 2012-01-17
  • 2013-09-12
  • 2010-12-15
  • 1970-01-01
相关资源
最近更新 更多