学习CUDA--硬件的简单学习
#目录
day0:硬件的简单学习
#0:写在前面的话
新年开始,一起学习了解一下CUDA的知识,做机器学习的,或者说研究机器学习深度学习算法的人如果只会用算法还是远远不够的,最好能够把一些基本的算法动手实践一下,这样对以后的算法设计,工程结构设计,代码设计都有很大帮助,千万不能做“小学生玩原子弹”的事。
#1:处理器结构初步知识
介绍CUDA之前先来下学习处理器结构,当然只是简单的介绍
##1.0:CPU

这是一个典型的现代处理器结构示意图,其中包括处理器核心,就是我们平时所说的“核”,一级缓存,二级缓存,三级缓存。处理器核是用来完成计算的关键部分,简单的可以比喻成一个工人,所有计算(包括数字,逻辑等计算)都必须由工人完成,而工人需要知道工作内容和工作原料,这就是指令和数据,指令和数据存在哪?平时不用的时候放在硬盘里,当然,他们看起来就0101010101001000....这样的二进制文件,当要用他们的时候他们被读到内存-DRAM里面,当工人们需要这些数据或指令的时候,会现在自己的工具箱(L1缓存)里面找,如果没在工具箱里,就去工具车里找(L2缓存),如果还没有,就要开车回维修站(L3)找工具,工具箱和工具车每个工人都有一个自己的,并且互相隔离,但是维修站大家共享,如果L3也没有,那就去工厂找(DRAM)吧。
这个问题就是,找工具箱里的东西可能几秒钟,去工具车估计就要走几分钟,回维修站就要以小时计算了,去工厂可能就要按天计算了,这个工作效率是不能忍受的,所以这也是当年没有缓存的时候计算速度瓶颈之一,因为相比于寄存器,DRAM的速度慢的不可忍受,于是有了高速缓存的出现。
这也有一些关于带宽的知识,在后面介绍。
但高速缓存的出现也涉及很多技术上的问题,比如内存的同步,缓存数据替换算法等,但缓存能够提速的根本原因是程序的“局部性原则”。

上图为Nehalem处理器芯片内的布局。
##1.1多点计算(计算集群)
集群层次最典型的结构如下:

处理器节点,通过互联网连接多台计算机,将任务分割至各个计算节点,通过互联网交换计算结果,完成大规模并行任务。
##1.2GPU
介绍GPU结构之前,先来看IBM的Cell处理器芯片布局,因为他和现在的GPU相似度非常高:

power PC Core相当于一个管理员,他把任务分配给不同SPE,每个SPE相当于一个工人,这个图里有8个SPE,每个SPE都有自己的工具箱他们协同完成一项或者多项串行或并行任务,同时片内也有L2缓存。
Cell可以完成一个串行工作,以流水线的模式:

这个结构和NVIDIA的G80类似的;
GPU(多GPU)经典的结构:

包括SM(处理器簇)L1,L2缓存(更详细的结构预计在第三天给出简介),多个GPU之间通过PCI-E总线连接,相比于上面的计算机群的网络通信,PCI-E的数据传输速度是非常快速的。
而每个GPU内又能完成大规模的并行,因为GPU内部有大规模的用于计算的“核”(SP)。
##1.3异构计算
异构计算简单理解就是通过不同的结构完成计算,比如CPU+GPU,CPU+FPGA,ARM+DSP等多种类型的计算单元组合,有些适合做控制,有些用于做计算,各自发挥自己的所长,完成高速计算,而ARM+DSP或者ARM+FPGA多封装在一个片子里,GPU则是通过PCI-E连接在外部,更像是一个外挂设备,或者叫做协处理器,从外观看也更像计算机群的结构。
#处理器的能力
处理器的能力主要局限于:计算能力,控制能力和数据吞吐量(带宽)。
计算能力:主要参数是处理器时钟周期,和单个指令需要的周期,例如一个工人A能完成工作1,用1个步骤,而另一个工人B能完成工作1,用2个步骤,但是A一个步骤用1秒,但B一个步骤是0.5秒,那么他们的工作效率是一致的,所以对于同一个工作,步骤越少同时完成一个步骤时间越短的处理器计算能力越强。而且工人越多完成的工作也会越多越快。
控制能力:这个主要是分支预测等数据传输控制算法的设计和结构设计。
数据吞吐量:从内存读取数据到运算核心的过程类似于货车运货,货车的速度和马路的宽度。
I7 Nehalem处理器带宽,理论带宽和单核带宽

这些要素都要协调同步,一个最简单的短板效应。哪一个拖后腿都不行。
有些程序是“内存受限性”而有些程序是“处理器时钟周期或负载受限型”。
#CPU vs GPU
CPU是传统的计算的处理器,拥有复杂的指令控制体系,而GPU则是依靠大量的简单计算核心完成大规模并行计算的处理器,能够在有些计算密集型程序中发挥重要作用,也是计算机视觉,机器学习的重要工具。
学习CUDA--硬件的简单学习的更多相关文章
- jQuery学习笔记 .addClass()/.removeClass()简单学习
使用jQuery或javaScript来动态改变页面中某个或部分元素的样式,为了实现这样的功能,我们往往都是使用jQuery或javaScript来控制HTML中DOM的类名(class)从而实现增加 ...
- JAVA学习Swing绝对局部简单学习
package com.swing; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; ...
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识
16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...
- Quartz定时任务学习(一)简单任务
学习quartz首先了解三个概念: 调度器:负责调度作业和触发器: 触发器:设置作业执行的时间.参数.条件等:(简单触发器和Cron触发器) 作业:定时任务内容,被执行的程序: 下载必要的jar包,直 ...
- Swift学习之函数和简单地控件的创建
今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- [转]ZooKeeper学习第一期---Zookeeper简单介绍
ZooKeeper学习第一期---Zookeeper简单介绍 http://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKe ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
随机推荐
- CNN中卷积层 池化层反向传播
参考:https://blog.csdn.net/kyang624823/article/details/78633897 卷积层 池化层反向传播: 1,CNN的前向传播 a)对于卷积层,卷积核与输入 ...
- 解决VS2005打开js,css,asp.php等文件,中文都是乱码的问题
用记事本打开可以正常观看但是用VS2005编辑器打开JS,中文确实乱码. 解决办法:在VS 2005 的设置里面选择自动检测Utf-8:“工具”->“选项”->“文本编辑器”->“自 ...
- 使用JavaFX开发桌面程序(一)
使用JavaFX开发桌面程序 注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了.这里就尽量做一点微小的贡献 ...
- 深入探讨java的类加载器
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1.0 就出现了,最初是为了满足 Ja ...
- 基于Openresty+Naxsi的WAF:从小白到实践
序 2019年2月18日,加入妈妈网,至今已经有四个月的时间,上周进到一个网关项目组,这个项目的主要目的是基于openResty+Naxsi实现WAF,相关技术初定涉及到openResty.Lua.N ...
- Photoshop从入门到精通所有视频教程(43G)以及素材资料免费拿
包含了Photoshop从入门到精通所有需要了解的视频教程资料,并且包含了大量的P图素材. 资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请 ...
- python入坑级
pycharm设置 pycharm设置自动换行的方法 只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps: 如果想对所有 ...
- PKGSRC
PKGSRC简介 pkgsrc: The NetBSD Packages Collection The NetBSD Packages Collection (pkgsrc) 是在NetBSD系统以及 ...
- FileStrem大文件分割复制
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- nagios-调用脚本
在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios ...