GPU的大致实现原理

矩阵与矩阵的乘法的意义

矩阵与矩阵的乘法可以从矩阵与向量的乘法得到,因为一个矩阵与多个向量相乘,这多个向量就可以组成一个矩阵(会有些限制)。或者说,矩阵本身就是一个有排列顺序要求的向量组,所以矩阵与矩阵相乘可以看作矩阵乘以列向量(或者行向量乘以矩阵的)的组合。例如:

如果把列向量 c和
d可以组合成一个矩阵
B=
(c,d),那么上述的乘积可以用两个矩阵的乘积来表示:

当然,如果有更多的向量组合起来,可以形成这样的矩阵乘式:

类似的,通过向量乘以矩阵的定义,我们同样可以定义反顺序的矩阵乘式,这里向量为行向量:

因此,矩阵与矩阵的相乘的几何意义,可以从矩阵与多个向量相乘的几何意义得到,只是多个向量被按照顺序组合成了另一个矩阵。

矩阵乘以矩阵如 AB=
C的一般几何意义就是把其中一个矩阵如B的数个行向量或列向量构成的几何图形进行旋转、缩放、镜像等变换(另外一个矩阵A起到的作用)得到了数个新向量,这些新向量作为行向量或者列向量组成一个新的矩阵C,这个新矩阵
C会构成新的几何图形。对于下面的乘式:

我们给出具体的数据例子并画出这个变换的图形:

一片绿色的小枫叶,经过夏天的风雨洗礼的自然变换,终于成了一片红彤彤的大枫叶。
  其实,两个矩阵相乘,主要是考察一个矩阵对另一个矩阵所起的变
换作用。其作用的矩阵看作是动作矩阵,被作用的矩阵可以看作是由行或列向量构成的几何图形。这个
理解就是上面给出的几何解释。
//————————————————————我是分割线——————————————————————————————————

这就是一个立方体。显示出一个这样的立方体要经过好多步骤,我们先考虑简单的,想象一下他是个线框。再简化一点,连线都没有,就是八个点(立方体有八个顶点的)。那么问题就简化成如何让这八个点转起来。首先,你在创造这个立方体的时候,肯定有八个顶点的坐标,坐标都是用向量表示的,因而至少也是个三维向量。然后“旋转”这个变换,在线性代数里面是用一个矩阵来表示的。向量旋转,是用向量乘以这个矩阵。经过上面的矩阵乘法说明,我相信大家都不难懂的。把这八个点转一下,就是进行八次向量与矩阵的乘法而已。这种计算并不复杂,拆开来看无非就是几次乘积加一起,就是计算量比较大。八个点就要算八次,2000个点就要算2000次。这就是GPU工作的一部分,顶点变换,这也是最简单的一部分。剩下还有一大堆比这更麻烦的就不说了。

GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?GPU就是这样,用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。

图片来自nVidia CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。图片来自nVidia CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。

GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。

所以与CPU擅长逻辑控制和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。

//——————————————————————————————我是分割线————————————————————————————————————

GPU将晶体管用于处理器阵列、多线程管理、共享内存、内存控制器;

这些设计并不着眼于提高单一线程的执行速度,而是为了使GPU可以同时执行成千上万的线程;(而CPU出于时间片调度则不行,N个核同一瞬间只能执行N个线程,至于是否执行同一个进程的子线程因为OS调度的不同而有一定区别。N个CPU同一瞬间只能执行N条进程...PS:这个有机会等开操作系统篇章的时候也会详细扯一下)

实现线程间通信,并提供极高的内存带宽;

GPU使用cache来放大内存带宽;

GPU通过同时运行上千个线程来隐藏延迟,等待内存访问的线程会被切换掉,GPU切换线程不耗时间;

对于支持CUDA的GPU,每个流处理器可以同时处理1024个线程;

GPU切换线程的代价是0,事实上GPU通常每个时钟周期都切换线程;

GPU则使用SIMT(单指令多线程),SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支;

支持CUDA的GPU集成有8个内存控制器,GPU的内存带宽通常是CPU的十倍。

......

文章是我根据网上的一些热心网友的博客和我自己的一些相关资料总结得来,如有侵权请立马告诉本人,如有说错的,还请指点,谢谢!

时间: 2024-10-10 04:22:16

GPU的大致实现原理的相关文章

简谈 JavaScript、Java 中链式方法调用大致实现原理

相信,在 JavaScript .C# 中都见过不少链式方法调用,那么,其中实现该类链式调用原理,大家有没有仔细思考过?其中 JavaScript 类库:jQuery 中就存在大量例子,而在 C# 中,其中 lambda 表达式的大量使用以及扩展方法的新增,使链式调用也见的不少. 首先,就谈谈 JavaScript 中链式调用,其实,也是就是运用之前提及的 this . var Person=function(name,age){ this.Name=name; this.Age=age; };

CPU GPU设计工作原理《转》

我知道这很长,但是,我坚持看完了.希望有幸看到这文章并对图形方面有兴趣的朋友,也能坚持看完.一定大有收获.毕竟知道它们到底是怎么"私下勾搭"的.会有利于我们用程序来指挥它们....(这是我加上去的) 原文从这里开始: 要说到设计的复杂程度,那还是CPU了!这个不用讨论,很简单的道理你看看显卡芯片的更新速度和CPU的更新速度就可见一斑了.还是简单说说他们的设计原理吧. CPU: 但是,现在我要问一句:"什么是CPU?"我相信大多数人并不知道什么是CPU.当然,你可以回

Chromium网页GPU光栅化原理分析

在前面一篇文章中,我们分析了网页分块的光栅化过程.根据Chromium的启动选项,网页分块有可能使用GPU来执行光栅化操作,也有可能使用CPU来执行光栅化操作.不管是使用GPU,还是CPU,光栅化操作最终都是统一通过调用Skia图形库提供的绘图接口完成的.如果使用GPU来执行光栅化操作,那么当它在调用绘图接口的时候,实际上是在执行相应的OpenGL命令.本文接下来就详细分析GPU光栅化的实现原理. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 网页分块的

深入浅出数据库索引原理

前段时间,公司一个新上线的网站出现页面响应速度缓慢的问题, 一位负责这个项目的但并不是搞技术的妹子找到我,让我想办法提升网站的访问速度 ,因为已经有很多用户来投诉了.我第一反应觉的是数据库上的问题,假装思索了一下,摆着一副深沉炫酷的模样说:"是不是数据库查询上出问题了, 给表加上索引吧",然后妹子来了一句:"现在我们网站访问量太大,加索引有可能导致写入数据时性能下降,影响用户使用的".当时我就楞了一下, 有种强行装逼被拆穿的感觉,在自己的专业领域居然被非专业的同学教

Android视图SurfaceView的实现原理分析

附:Android控件TextView的实现原理分析 来源:http://blog.csdn.net/luoshengyang/article/details/8661317 在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面.由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制.又由于不会占用主线程资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面又不会导致用户输

AVL树,红黑树,B-B+树,Trie树原理和应用

前言:本文章来源于我在知乎上回答的一个问题 AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中? 看完后您可能会了解到这些数据结构大致的原理及为什么用在这些场景,文章并不涉及具体操作(如插入删除等等) 目录 AVL树 AVL树原理与应用 红黑树 红黑树原理与应用 B/B+树 B/B+树原理与应用 Trie树 Trie树原理与应用 AVL树 简介: AVL树是最早的自平衡二叉树,在早期应用还相对来说比较广,后期由于旋转次数过多而被红黑树等结构取代(二者都是用来搜索的),AVL树内

XSS的原理分析与解剖(第二篇)

0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当第一期出来的时候,反馈很好,但还是有很多人提出疑问,我这里就解答下. 问1:如果我输入PHP语句会不会执行. 答1:不会,因为XSS是面对前台的(用户可见部分),而PHP则是后台处理(用户不可见部分),如果可以执行PHP语句的话,那不叫XSS,叫"任意代码执行". 问2:XSS和CSRF有

rmi 工作原理

rmi 工作原理 (转) 工作SocketJava应用服务器网络应用 RMI(Remote Method Invocation,远程方法调用)是Java的一组拥护开发分布式应用程序的API.RMI使用Java语言接口定义了远程对象,它集合了Java序 列化和Java远程方法协议(Java Remote Method Protocol).它大大增强了Java开发分布式应用的能力.简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方 法调用.这也就说明,RMI可以实现在

DRBD原理知识

DRBD(Distributed Relicated Block Device 分布式复制块设备), 可以解决磁盘单点故障.一般情况下只支持2个节点. 大致工作原理如下图: 一般情况下文件写入磁盘的步骤是: 写操作 --> 文件系统 --> 内存缓存中 --> 磁盘调度器 --> 磁盘驱动器 --> 写入磁盘.而DRBD的工作机制如上图所示,数据经过buffer cache后有内核中的DRBD模块通过tcp/ip协议栈经过网卡和对方建立数据同步. 一.DRBD的工作模式 1.