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

问题描述 投票:3回答:2

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

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

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

为了清楚我的问题,这里列出了我发现的与并行性有关的术语:并行计算,并行处理,多线程,多处理,多核编程,超线程(Intel)2,同时多线程(SMT)3, Switch-on-Event MultiThreading 3。 (如果可能的话,也应该理解对这些术语的定义的定义或参考)。

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

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

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

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

multithreading parallel-processing multicore hyperthreading
2个回答
0
投票

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

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


A: 主要区别是什么/世界卫生组织/如何 负责保持在true-[PARALLEL]执行的事情

  • 指令级并行 - ILP - 是最简单的情况,CPU架构设计并“硬连线”这种特定形式的基于硬件的并行性。拥有ILP4的处理器(一次执行4条指令),或者具有基于每指令宽度的这种并行指令执行形式的处理器,对于某些指令而言是ILP2,而对于其他一些指令而言是ILP1,同样是硅架构决定了什么,确实在指令级并行发生。一些尴尬的惊喜可能来自进一步的细节,因为存储器控制器通道可能在情况下阻止ILP模式,其中REG / MEMORY微操作必须等待空闲信道访问指示的MEMORY。
  • 硬件线程是下一级别的粒度。假定CPU核心被声明支持两个硬件线程,这些是唯一的代码流执行,可以并行流动(如果没有O / S请求实例化并安排另一个线程执行,映射到一个可用的CPU核心硬件线程)。从用户的角度来看,有一些O / S工具允许一个人明确地“固定”一个进程级别的PID /线程级别PID关联到特定的CPU核心,从而限制甚至消除任何“干扰”,以便从"just"-[CONCURRENT]代码执行流程更接近true-[PARALLEL]one。

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


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


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时间。如果你愿意,你可以调用该软件的并行性,但我不会把这种事情称为并行。

© www.soinside.com 2019 - 2024. All rights reserved.