![6cf4b22d05da5fdf5b29d02d6a247882.png](https://i-blog.csdnimg.cn/blog_migrate/a35162bd24b166e3075d35b43a1f3ec6.jpeg)
现代处理器架构利用各种执行模型。其中,两个最受欢迎:SIMD(单指令多数据)和SIMT(单指令多线程)。还有SMT(同时多线程),但这是我们最后要检查的其他内容。在本文中,我们将了解SIMD和SIMT处理器的执行模式,并了解它们之间的区别。
SIMD:单指令多数据
![3cb171a38b10a897b8eed8a1c7dd4781.png](https://i-blog.csdnimg.cn/blog_migrate/8108f7d643d8da24b054dbe3775200e9.jpeg)
马上,什么是SIMD,更重要的是它如何工作?SIMD是一种执行模型,这意味着处理器将其用于在管道中将相似的数据集排队并并行执行的方法。它是现代CPU和GPU使用的最受欢迎的EM之一。单指令多数据。顾名思义,它通过对多个数据集同时采用一条指令来工作。
这意味着:一条特定指令由多个执行单元对多个数据集执行。EU可以是ALU(算术逻辑单元)或FPU(浮点单元),但是这里的关键是它们都从共享的控制单元接收相同的指令,然后在多个不同的数据集上执行它。
![fe243da02b9bbc6ca598be8234cd0f96.png](https://i-blog.csdnimg.cn/blog_migrate/e03c3a53fdd8d4de3ac26e4c7fe28fb5.jpeg)
通过让CPU在不同的操作数上执行相同的任务,可以改善数据级的并行性(而不是指令级或并发性)。在上面的示例中,您可以看到代码行包含许多需要相同运算符的函数。在第一列中,所有四行基本上都涉及到两个不同矩阵的加法运算。SIMD允许在同一时钟周期内执行所有四个操作。这里要注意的一件事是SIMD使用执行单元,而不是线程或内核。
![0df2e5b1658fb3d74828881b1f49aa01.png](https://i-blog.csdnimg.cn/blog_migrate/17542f0eefca1de83b8b68a4a7c3f584.jpeg)
SIMT:单指令多线程
SIMT是SIMD的线程等效项。后者使用执行单位或向量单位,而SIMT对其进行扩展以利用线程。在SIMT中,多个线程对不同的数据集执行相同的指令。SIMT的主要优点是它减少了指令预取带来的等待时间。
![fc0bf4f549259becf451498283bf29e4.png](https://i-blog.csdnimg.cn/blog_migrate/316f463241231ddd19c702629fc70dff.jpeg)
SIMT通常用于超标量处理器中以实现SIMD。因此,从技术上讲,每个内核本质上都是标量的,但是通过利用多个线程对各种数据集执行相同的任务,它仍然类似于SIMD模型。
每当GPU需要执行特定指令时,都会从内存中获取数据和指令,然后对其进行解码和执行。在这种情况下,需要使用同一条指令执行的所有数据集(达到一定限制)将使用处理器可用的各种线程同时预取并同时执行。
SMT:同步多线程
SMT或同时多线程允许CPU内核一次利用多个线程。尽管从理论上讲,通过SMT每个内核最多可以有8个线程,但是只有两个线程是可行的。SMT类似于在机场将两个货物安全带分类为行李,然后由一个人对其进行分类。
![ce3f9246d820fa8e46f3998037ed3b32.png](https://i-blog.csdnimg.cn/blog_migrate/cdf5741b0456cda0f132d7c993f39b8f.jpeg)
有时候,一条皮带是空的,而另一皮带仍然有待处理的工作。在这种情况下,此人将切换到另一个皮带并继续分类,直到第一个皮带拿到更多行李。这类似于SMT在CPU中的操作方式。有时会出现内存延迟或高速缓存未命中的情况,此时,CPU内核通常会保持空闲状态。SMT旨在利用此优势来完全饱和CPU时间。
需要在内部修改CPU内核体系结构以支持SMT。这通常涉及增加寄存器大小(在某些情况下还包括高速缓存大小),以允许在两个线程之间平均分配资源,并防止争用。
尽管现代CPU很好地利用了SMT,但仍有很多时候需要冗余。那主要是在延迟密集型任务中,流水线几乎没有延迟。SMT甚至会影响资源密集型应用程序(注册和缓存)的性能。在这里,两个线程被迫相互竞争资源,从而导致性能下降。