GPU中的SIMT

部署运行你感兴趣的模型镜像

一、SIMT

SIMT,Single Instruction Multiple Threads,即单指令多线程。在前面的并行机制中反复说明过SIMD,其实在CUDA中使用的是SIMT并行机制。听名字就可以理解,这种并行计算架构模型更适合于多核心的处理器。特别针对显卡这种动辙成千上万的核心的情况,GPU使用SIMT架构可以更好的利用线程来处理数据。
Single Instruction指一条指令,即同一时刻只能在一个执行单元(即所谓的Wrap,可参看CUDA编程系列)中执行同一条指令。而Multiple Threads表示在N个线程同时运行时,它们只能处理自己的私有数据。

二、N卡中的应用

NVIDIA在早期的GF100系列中惜败于AMD(其采用的SIMD),原因在于其老的架构无法与当时的半导体工艺相匹配,导致功耗和良品率无法有效控制。因此其芯片架构转向了SIMT模式,它允许开发者编写并行的线程级的代码,并协同纯种编写数据并行代码,其安全性由硬件本身提供。另外就是其线程中的数据通信只能通过同步机制或共享内存来实现。
CUDA中为了有效的处理大规模的线程以期实现动态的管理相关操作,引入了线程束(Wrap)的概念。一个线程束是一个GPU上的基本执行单元,目前其大小通常为32个线程。线程束的引入既提高了并行的效率又可以适应轻微的分支处理任务。更多的细节相关内容,如块、簇和Grid等请参看CUDA编程系列。

三、SIMT和SIMD的区别

SIMT和SIMD的区别主要有以下几点:

  1. 基本原理的不同
    SIMD单条指令同时操作多个数据;SIMT单条指令能够在多线程中并行执行,其中每个线程可以处理不同的数据
  2. 数据处理方式
    SIMD可同时处理多个数据元素而SIMT每个线程处理不同的数据元素
  3. 硬件支持
    SIMD主要在CPU多核处理器上应用,如AVX、SSE等指令集而SIMT主要应用于GPU架构,如NVIDIA CUDA等
  4. 适用场景
    SIMD适合于向量处理、图像处理、信号处理、科学计算等海量并行数据处理而SIMT适合于高度并行计算任务,如深度学习、GPU加速的图像处理等应用场景
  5. 分支处理
    SIMD所有数据执行相同操作不容易有分支而SIMT每个线程可以执行不同的分支,处理不同的逻辑路径(如if-else),影响整体的效率
  6. 数据同步
    SIMD不考虑线程间通信,指令进行的是静态的数据处理而SIMT存在Wrap概念,线程间通信需要同步,影响执行效率
  7. 性能
    SIMD在数据处理上性能更好而SIMT更适合于大规模并行计算任务,其性能更高

虽然二者有上面的区别,但整体上看,二者各有各的优势和长处,在实际的应用中,往往是二者结合来进行更大规模的任务计算处理。还是那句话没有一个技术能包打天下,最终都会进行工程性的科学组合,不管是同构还是异构,都是为了解决问题而不制造矛盾。简单的看,SIMT可以看作在任务上的并行而SIMD则数据上的并行,而实际上,可以看作SIMT是SIMD更高层的抽象。
在实际的应用中,往往可以使用CPU的SIMD指令集进行数据处理,然后再通过SIMT实现数据任务的处理。特别是在一些大规模、复杂的应用中,如天气、海洋模型的计算中,都可以利用二者配合进行相关的处理,来高效的完成相关的工作。

四、总结

从上面的分析可以看出,其实技术的发展,往往是竞争产生的。说得难听点,就是逼出来的,就是一句话“想生存还是想死亡”?想活下去,技术就得发展就得不断的优秀,正如人们总说的那句话“规则就是用来打破的”,这个在技术更是明显。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值