SIMT和SIMD

百度百科:SIMT

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

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

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


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


      为此,NVIDIA将芯片架构逐步转向了SIMT的模式,即Single Instruction Multiple Threads(单指令多线程),SIMT有别与AMDSIMDSIMT的好处就是无需开发者费力把数据凑成合适的矢量长度,并且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内不分支,否则将会导致性能急剧下降。

 

网友总结:

SIMTSIMD本质相同:都是单指令多数据。

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

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

总之SIMTSIMD的一种推广,更灵活而已。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值