什么是不同类型的并行性?

时间:2017-12-19 18:49:16

标签: multithreading parallel-processing multicore hyperthreading

我试图更多地了解并行性,但我注意到有很多不同的术语,有些似乎意味着同样的事情,而其他人则有明显的不同。那么,所有不同类型的并行性是什么,它们如何彼此不同,是否有特定的应用或目的?
(为了更加专注,我希望得到一个答案,提供与并行性相关的所有术语的清晰度,包括下面未列出的术语;每种不同类型之间的技术比较会很好,但可能会得到结果在这个问题变得偏离主题 - 然后再次,我不知道,因此问题。)

注意:
这不是关于并发性的问题,而是超越了简单的"问题:"什么是并行?",虽然澄清定义可能是有道理的。

首先,我注意到parallelism and threading之间的区别,但以下条款之间的一些差异仍然令人困惑。

为了清楚我的问题,这里列出了一些与并行性相关的术语:并行计算,并行处理,多线程,多处理,多核编程,超线程(Intel)2,同时多线程(SMT)3,开启事件多线程3。 (如果可能的话,也将赞赏对这些术语的定义的定义或参考)。

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

在多核处理器中,并行可以在单个内核中发生吗?这是超线程是什么,并且这是否需要单个核心,例如,两个可以并行使用的ALU?

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

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

2 个答案:

答案 0 :(得分:0)

问:
线程级并行性,指令级并行性,进程级并行性有什么区别?

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

答:主要区别在于什么/世卫组织/如何负责在true-[PARALLEL]

中保持执行
  • 指令级并行 - ILP - 是最简单的情况,CPU架构设计并“硬连线”这种特定形式的基于硬件的并行性。拥有ILP4的处理器(一次执行4条指令),或者具有基于每指令宽度的这种并行指令执行形式的处理器,对于某些指令而言是ILP2,而对于其他一些指令而言是ILP1,同样是硅架构决定了什么,确实在指令级并行发生。一些尴尬的惊喜可能来自进一步的细节,因为内存控制器通道可能会阻止ILP模式,其中REG / MEMORY uops将不得不等待一个空闲通道访问指示的MEMORY。

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

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

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

答案 1 :(得分:0)

  

线程级并行,指令级并行和进程级并行之间有什么区别?

在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位寄存器上运行,因此它可以使用单vmulps指令一次乘以8个浮点数。

  

可以在单个核心内发生并行吗?

  

是超线程是

是的,它也是指令级并行性,也是SIMD并行性。

  

这是否需要单个核心,例如,两个可以并行使用的ALU?

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

  

硬件与软件并行性之间存在差异

如果您有一个硬件线程和多个计算内容的OS线程,则在任何给定时间只会运行一个线程。其余的线程将等待。操作系统将定期(通常~50-100Hz)切换哪一个正在运行,目标是为所有线程提供相当一部分CPU时间。你可以根据需要调用该软件的并行性,但我根本不会将这种事情称为并行。