SIMD、SIMD、SIMT、MISD、MIMD详解与比较

ARM汇编 专栏收录该内容
16 篇文章 0 订阅

1、SISD

SISD(Single Instruction Single Data stream)单指令流单数据流计算机体系结构分类的一种。

按照计算机同时处于一个执行阶段的指令或数据的最大可能个数划分,可分为SISD、SIMDMISDMIMD

SISD(Single Instruction Single Data stream)单指令流单数据流(SISD):SISD其实就是传统的顺序执行的单处理器计算机,其指令部件每次只对一条指令进行译码,并且只对一个操作部件分配数据。

流水线方式的单处理机有时也被当做SISD。

以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。

2、SIMD

SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集

概念:以同步方式,在同一时间内执行同一条指令。

以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。

如:AMD公司引以为豪的3D NOW! 技术实质就是SIMD,这使K6-2、雷鸟、毒龙处理器在音频解码、视频回放、3D游戏等应用中显示出优异的性能。

SIMD指令如何工作

加载矢量寄存器的命令看起来很熟悉:

VL V1, D2(X2,B2)

其中V1是矢量寄存器,D2是位移,X2和B2为索引与基地址寄存器。

但是,由于矢量寄存器的内容有元素组成,还有指令可以与他们单独打交道。例子之一就是Vector Load Element指令,可以更新一个元素:

VLEx V1,D2(X2,B2)M3

其中x指定元素的大小,B为字节,H为半字(16位),F为全字以及G为双字。V1、D2、 X2 与 B2操作数扮演熟悉的角色,但M3的掩膜指定字段的索引并更新。因此VLEH V1,HALFWORD,3会更新矢量寄存器1的第四个半字,并保持其他元素不变。

在常规负载下,SIMD向量负载指令集有多种方法来产生掩膜,从通用寄存器插入元素并从一种矢量包装元素到寄存器。这与十进制不大一样——这种能力能减半元素并将其压缩到另一个寄存器。

Vector register examples

假设我们已经加载了两个矢量寄存器,每个寄存器有8个半字整数,我们可以将所有元素合在一起,用一条矢量添加指令:

VA V1,V2,V3,M4

本例中,处理器把V2和V3中的半字元素相加并保存在V1中,这样体现了SIMD指令的非破坏自然属性。掩膜值应该与半字相同。处理器会将溢出移动到整数符号位,这样可以使计算有点棘手。

矢量指令同样也支持字符串函数。只要掌握几个复杂选项,SIMD字符串功能就能变得更简单一些,你可以把他们作为硬件实现C语言字符串处理函数。让我们以Vector Find Element Equal为例:

VFEE V1,V2,V3,M4[,M5]

在高级别上,该指令会比较V2与V3中的元素,并在V1设置相应的标识。掩膜M4表示元素的大小,M5指定两件事:设置位2告诉处理器比较V2、V3和0。当位4等于1,处理器将会设置条件码。在任何速率下,指令会从左往右比较第二个和第三个操作数元素。当它发现相等的元素,就会在第一个操作数的第七字节设置元素字节索引。如果没有元素相等,第一个操作数的第七字节将包含一个与寄存器元素数量相等的字节索引。如果指令发现所有元素都为零,也会进行同样的操作。

3、SIMT

 

SIMT中文译为单指令多线程,英文全称为Single Instruction Multiple Threads

GPU中的SIMT体系结构相对于CPU的SIMD中的概念。为了有效地管理和执行多个单线程,多处理器采用了SIMT架构。此架构在第一个unified computing GPU中由NVIDIA公司生产的GPU引入。

不同于CPU中通过SIMD(单指令多数据)来处理矢量数据;GPU则使用SIMT,SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。 纯粹使用SIMD不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。

 

为了保证GPU性能持续增长,NVIDIA必须耗费更多的晶体管、制造出更大的GPU核心,而这些都需要先进的、成熟的半导体制造工艺的支持。NVIDIA之所以在GF100(GTX480)时代落败,并非架构或者研发端出了什么问题(GF110/GTX580的成功可以证明),而是核心太大导致40nm工艺无法支撑,良率低下漏电流难以控制,最终导致核心不完整且功耗巨大。如此一来,NVIDIA原有的架构严重受制于制造工艺,并非可持续发展之路。

 

      为此,NVIDIA将芯片架构逐步转向了SIMT的模式,即Single Instruction Multiple Threads(单指令多线程),SIMT有别与AMD的SIMD,SIMT的好处就是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。 纯粹使用SIMD不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。

 

SIMT在硬件部分的结构还是要比SIMD复杂一些,NVIDIA还是更注重效率一些,所以NVIDIA的流处理器数量还是要比AMD少,但差距已经没以前那么夸张了。

 

SIMT架构类似于SIMD(单指令流多数据流)向量组织方法,共同之处是使用单指令来控制多个处理元素。一项主要差别在于SIMD向量组织方法会向软件公开 SIMD宽度,而SIMT指令指定单一线程的执行和分支行为。

 

与SIMD向量机不同,SIMT允许程序员为独立、标量线程编写线程级的并行代码,还允许为协同线程编写数据并行代码。为了确保正确性,程序员可忽略SIMT行为,但通过维护很少需要使一个warp块内的线程分支的代码,即可实现显著的性能提升。

 

另外一个重要不同是SIMD中的向量中的元素相互之间可以自由通信,因为它们存在于相同的地址空间(例如,都在CPU的同一寄存器中),而SIMT中的每个线程的寄存器都是私有的,线程之间只能通过shared memory和同步机制进行通信。

 

在SIMT编程模型中如果需要控制单个线程的行为,必须使用分支,这会大大的降低效率。例如,如果一个warp中需要进行分支(即warp内的线程执行的指令指针指向不同的位置),性能将急剧的下降。如果一个warp内需要执行N个分支,那么SM就需要把每一个分支的指令发射到每一个SP上,再由SP根据线程的逻辑决定需不需要执行。这是一个串行过程,因此SIMT完成分支的时间是多个分支时间之和。

 

因此,程序员在开发CUDA程序时应尽量避免分支,并尽量做到warp内不分支,否则将会导致性能急剧下降。

4、MISD

多指令流单数据流机器(MISD)

MISD是采用多个指令流来处理单个数据流。由于实际情况中,采用多指令流处理多数据流才是更有效的方法,因此MISD只是作为理论模型出现,没有投入到实际应用之中。

5、MIMD

多指令流多数据流机器(MIMD)

多指令流多数据流(MultipleInstructionStreamMultipleDataStream,简称MIMD),它使用多个控制器来异步地控制多个处理器,从而实现空间上的并行性

传统的顺序执行的计算机在同一时刻只能执行一条指令(即只有一个控制流)、处理一个数据(即只有一个数据流),因此被称为单指令流数据流计算机(SingleInstructionSingleData,SISD)。而对于大多数并行计算机而言,多个处理单元都是根据不同的控制流程执行不同的操作,处理不同的数据,因此,它们被称作是多指令流多数据流计算机,即MIMD(MultipleInstructionMultipleData,MIMD)计算机。

曾经在很长一段时间内成为超级并行计算机主流的向量计算机除了标量处理单元之外,最重要的是具有能进行向量计算的硬件单元。在执行向量操作时,一条指令可以同时对多个数据(组成一个向量)进行运算,这就是单指令流多数据流(SingleInstructionMultipleData,SIMD)的概念。因此,我们将向量计算机称为SIMD计算机。

第四种类型即所谓的多指令流单数据(MultipleInstructionSingleData,MISD)计算机。在这种计算机中,各个处理单元组成一个线性阵列,分别执行不同的指令流,而同一个数据流则顺次通过这个阵列中的各个处理单元。这种系统结构只适用于某些特定的算法。

相对而言,SIMD和MISD模型更适合于专用计算。在商用并行计算机中,MIMD模型最为通用,SIMD次之,而MISD最少用。PII的MMX指令采用的是SISD,高性能服务器与超级计算机大多属于MIMD。

1966年,MichealFlynn根据指令和数据流的概念对计算机的体系结构进行了分类,这就是所谓的Flynn分类法。Flynn将计算机划分为四种基本类型,即SISD、MIMD、SIMD、MISD。而对于大多数并行计算机而言,多个处理单元都是根据不同的控制流程执行不同的操作,处理不同的数据,因此,它们被称作是多指令流多数据流计算机,即MIMD(MultipleInstructionMultipleData,MIMD)计算机。

SIMD、SIMD、SIMT比较与总结:

1、SIMT与SIMD本质相同:都是单指令多数据。

2、SIMT比SIMD更灵活,允许一条指令的多数据分开寻址;SIMD是必须连续在一起的片段。

3、SIMT形式上是多线程,本质上还是一个线程,只不过数据可以零散的分散开。但是如果你真的将数据分散开的话,执行效率上又会大打折扣,因为不满足并行访问的要求。

总之SIMT是SIMD的一种推广,更灵活而已。

 

参考、转自:

1、https://baike.baidu.com/item/SIMD/3412835?fr=aladdin

2、https://baike.baidu.com/item/sisd

3、https://blog.csdn.net/a812073479/article/details/80572035

4、https://baike.baidu.com/item/MIMD

  • 2
    点赞
  • 0
    评论
  • 24
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值