向量体系结构(2)----SIMD指令集扩展和GPU

进行SIMD多媒体扩展的设计,源于一个很容易观察到的事实:

许多多媒体应用程序操作的数据类型比对32位处理器进行针对性优化的数据类型更窄一些。

图像三基色,都是8位。音频采样也都是8位和16位来表示。

SIMD的多媒体扩展指令与标准的SIMD指令相比,它指定的操作数更少,因此使用的寄存器堆更小。

SIMD扩展主要对一下三项进行了简化:

1)多媒体SIMD扩展固定了操作代码中数据操作数的数目,从而在x86的体系结构的MMX,SSE,AVX中添加了数百条指令。

2)多媒体SIMD没有提供向量体系结构的更复杂的寻址模式,也就是步幅访问和集中---分散访问。

3)多媒体SIMD不像向量体系结构那样,为了支持元素的条件执行而提供遮罩寄存器。

做这些扩展指令的目的也是加快那些精心编制的库函数的运行速度,而不是由编译器来生成的这些库。

SIMD的优点:

1)芯片设计相对向量体系结构来说,较简单,且不需要那么大的存储器带宽。

2)可以比较轻松的引入一些符合新媒体标准的指令。

GPU的祖先是图形加速器,极强的图形处理能力是GPU得以存在的原因。当前GPU的研究热点是一种简化的GPU编程的编程语言。

GPU几乎拥有所有可以由编程环境捕获的并行类型:多线程,MIMD,SIMD,指令级并行

NVIDA开发的是一种类似于C的语言和编程环境,通过克服多种并行的挑战来提高GPU程序员的生产效率。这一系统称为CUDA。

将所有的这些并行形式统一为CUDA线程,以这种最低级的并行作为编程原型。

编译器和硬件可以将数以千计的CUDA线程聚合在一起。CUDA编程模型被定义为"单指令多线程(SIMT)"

执行时,以32个线程为一组,称为线程块,将执行整个线程块的硬件称为多线程SIMD处理器。

行执行和线程管理由GPU硬件负责,而不是由应用程序或操作系统完成,不同的线程块之间可以使用全局存储的原子操作来进行协调,

但是它们之间不能直接通信。

和很多并行系统一样,CUDA在生产效率和性能之间进行了一点折中,提供了一些本身固有的功能,让程序员能够显示控制硬件。

了解编程语言可以平衡生产效率和性能之间的关系。

AMD推出的与供应商无关的语言,OpenCL。

以NVIDIA系统为例,GPU可以很好的解决数据级并行的问题,也拥有着集中---分散数据传送和遮罩寄存器,但是GPU的寄存器要比

向量处理器更多。有一些功能,GPU通过硬件来实现,在向量体系结构中通过软件来实现。

网格是在GPU上运行,由一组线程块构成的代码。例如我们希望两个向量乘在一起,每个向量长度为8192个元素。执行所有8192个

元素乘法的GPU代码称为网格(向量化循环)

为了便于管理,网格可以由线程块(向量化循环体)组成。每个线程块最多512个元素。一条SIMD指令一次执行32个元素。所以该例子

中,共有16个线程块

网格和线程块是GPU硬件中实现的编程抽象,可以帮助程序员组织自己的CUDA代码。

线程块调度程序是将线程块指定给执行该代码的处理器,我们将这种处理器称为多线程SIMD处理器。

线程块调度程序与向量体系结构中的控制处理器类似。决定了该循环所需要的线程块数,以及将他们分配给不同的多线程SIMD处理器。

SIMD多线程处理器与向量处理器类似。但是它的很多功能单元都是深度流水化的。

GPU是一个由多线程SIMD处理器组成的多处理器,加自己的线程块调度程度。

时间: 2024-10-12 19:19:52

向量体系结构(2)----SIMD指令集扩展和GPU的相关文章

Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(转)

File:Intrinsics头文件 描述:指令集描述VS:Visual Studio版本号VisualStudio:Visual Studio版本名 File 描述 VS VisualStudio intrin.h All Architectures 8.0 2005 mmintrin.h MMX intrinsics 6.0 6.0 SP5+PP5 xmmintrin.h Streaming SIMD Extensions intrinsics 6.0 6.0 SP5+PP5 emmintr

[云] 1、云服务器——从ILP\DLP\TLP谈起

1) ABOUT:ILP\DLP\TLP 1-1.ILP 大约在1985年之后的所有处理器都使用流水线来重叠指令的执行过,以提高性能.由于指令可以并行执行,所以指令之间可能实现这种重叠称为指令级并行(ILP) ILP大体有两种不同开发方法:(1)依靠硬件来帮助动态发现和开发并行:(2)依靠软件技术在编译时静态地发现并行.使用基于硬件的动态方法的处理器,包括Inter Core系列,在桌面和服务器市场上占主导地位.在个人移动市场,提高能耗效率通常是一个关键目标,所以设计人员开发较低级别的指令级并行

使用.NET Hardware Intrinsics API加速机器学习场景

ML.NET 0.6版本刚刚发布不久,我们知道ML.NET代码已经依赖于使用本机代码库的性能矢量化.这是一个重新实现托管代码中现有代码库的机会,使用.NET Hardware Intrinsics进行矢量化,并比较结果. 什么是矢量化,什么是SIMD,SSE和AVX? 矢量化是用于同时将相同操作应用于阵列的多个元素的名称.在x86 / x64平台上,可以通过使用单指令多数据(SIMD)CPU指令在类似阵列的对象上操作来实现矢量化. SSE(Streaming SIMD Extensions)和A

MATLAB向量的重复扩展

问题:对于向量a,将a中的每一个元素扩展N次,并插入该元素之后 代码: 1 % 构造向量a 2 a = [1, 2, 3, 4]; 3 4 % 将向量a纵向重复扩展2次 5 b = repmat(a, 3, 1); 6 7 % 完成向量a的横向重复扩展 8 b = reshape(b, 1, numel(b)); 结果: 第5行执行后的结果如下图: 第8行执行后的结果如下图:

体系结构复习3——数据级并行

体系结构复习 CH6 数据级并行 6.1 数据级并行DLP和SIMD 数据级并行(Data Level Parallel,DLP)是指处理器能够同时处理多条数据,属于SIMD模型,即单指令流多数据流模型 继续挖掘传统ILP的缺陷: 提高流水线时钟频率可能导致CPI增加 每个时钟周期很难预取和译码多条指令 大型科学计算.媒体流处理局部性较差,Cache命中率低 并且SIMD模型有以下优点: SIMD可有效挖掘DLP,如矩阵运算.图像声音等多媒体数据处理 SIMD比MIMD更节能,对于一组数据相同操

【转帖】超能课堂(186) CPU中的那些指令集都有什么用?

超能课堂(186)CPU中的那些指令集都有什么用? https://www.expreview.com/68615.html 不明觉厉 开始的地方 第一大类:基础运算类x86.x86-64及EM64T等 第二大类:SIMD指令集,有SSE系列,AVX系列 多媒体应用 加解密运算 数据序列化 游戏 科学计算&人工智能 检测处理性能,跑分 第三大类:虚拟化指令集Intel,虚拟机应用 第四大类:安全类指令集,如加解密AES-IN指令集 第五大类:多线程应用,TSX事务同步扩展指令集 总结 本文约51

Kubernetes1.6新特性:全面支持多颗GPU

(一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫"渲染" ,以前计算机上是没有GPU的,都是通过CPU来进行"渲染"处理的,这些涉及到"渲染"的计算工作非常耗时,占用了CPU的大部分时间.之后出现了GPU,是专门为了实现"渲染"这种计算工作的,用来将CPU解放出来,GPU是专为执行复杂的数

借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率

原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升,则达到满意状态. 然而,可能性能根本不会提升,甚至还会降低. 无论处于何种情况,为了最大限度发挥 SIMD 执行的优势并实现性能提升,通常需要重新设计算法和数据布局,以便生成的 SIMD 代码尽可能高效. 另外还可收到额外的效果,即标量(非矢量化)版代码会表现得更好. 本文将通过一个 3D 动画算

SSE再学习:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)。

这半年多时间,基本都在折腾一些基本的优化,有很多都是十几年前的技术了,从随大流的角度来考虑,研究这些东西在很多人看来是浪费时间了,即不能赚钱,也对工作能力提升无啥帮助.可我觉得人类所谓的幸福,可以分为物质档次的享受,还有更为复杂的精神上的富有,哪怕这种富有只是存在于短暂的自我满足中也是值得的. 闲话少说, SIMD指令集,这个古老的东西,从第一代开始算起,也快有近20年的历史了,从最开始的MMX技术,到SSE,以及后来的SSE2.SSE3.SSE4.AVX以及11年以后的AVX2,逐渐的成熟和丰