学习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>& ...
随机推荐
- c# TCP/IP协议利用Socket Client通信(只含客户端Demo)
完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈. TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. ...
- [转载]aspnet webapi 跨域请求 405错误
写了个webapi给同事用ajax调用,配置完跨域以后get请求完全没问题,post就一直报405错误,花了半天时间就是解决不了,后来在网上看到一博主的帖子才知道原来是webapi 默认的web.co ...
- idea2019 Tomcat9 Tomcat Localhost log 乱码
网上一顿搜索,基本没用,可能版本不一样. idea2019 tomcat9解决方案: 找到Tomcat的安装目录,进入conf目录 打开logging.properties 找到java.util.l ...
- java实现spark常用算子之Take
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- MyBatis-plus 新增实例,主键ID从很大的数字开始
mybatis-plus是mybatis增强版,用mybatis-plus可以省去很多DAO层代码和数据库操作语句的编写.但是需要我们配置好条件. 情景: 向数据库新增一条实例,我们要调用 inser ...
- vue 数据驱动原理,响应式 原理?
Object.defineProperty(obj,"name",{ get(){ console.log("被访问了") return obox.innerH ...
- mysql一些语句
<!-- 报警量排行按创建时间每月来排行 --> <select id="alarmDaySort" resultType="alarm"&g ...
- spring ioc aop 理解
OC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果 ...
- JavaJDBC【一、概述】
其实这个内容在学习java基础的时候就有看过了,只是没有详细整理,在这再整理一下 数据库操作对于任何一门后端语言来说都是很重要的 JDBC:Java Data Base Connectivity 内容 ...
- PyCharm 创建指定版本的 Django (超详细图解)
最近在学习胡阳老师(the5fire)的<Django企业级开发实战>,想要使用pycharm创建django项目时,在使用virtualenv创建虚拟环境后,在pycharm内,无论如何 ...