#目录

day0:硬件的简单学习

#0:写在前面的话

新年开始,一起学习了解一下CUDA的知识,做机器学习的,或者说研究机器学习深度学习算法的人如果只会用算法还是远远不够的,最好能够把一些基本的算法动手实践一下,这样对以后的算法设计,工程结构设计,代码设计都有很大帮助,千万不能做“小学生玩原子弹”的事。

#1:处理器结构初步知识

介绍CUDA之前先来下学习处理器结构,当然只是简单的介绍

##1.0:CPU

![这里写图片描述](https://img-blog.csdn.net/20160213104246419)
这是一个典型的现代处理器结构示意图,其中包括处理器核心,就是我们平时所说的“核”,一级缓存,二级缓存,三级缓存。处理器核是用来完成计算的关键部分,简单的可以比喻成一个工人,所有计算(包括数字,逻辑等计算)都必须由工人完成,而工人需要知道工作内容和工作原料,这就是指令和数据,指令和数据存在哪?平时不用的时候放在硬盘里,当然,他们看起来就0101010101001000....这样的二进制文件,当要用他们的时候他们被读到内存-DRAM里面,当工人们需要这些数据或指令的时候,会现在自己的工具箱(L1缓存)里面找,如果没在工具箱里,就去工具车里找(L2缓存),如果还没有,就要开车回维修站(L3)找工具,工具箱和工具车每个工人都有一个自己的,并且互相隔离,但是维修站大家共享,如果L3也没有,那就去工厂找(DRAM)吧。
这个问题就是,找工具箱里的东西可能几秒钟,去工具车估计就要走几分钟,回维修站就要以小时计算了,去工厂可能就要按天计算了,这个工作效率是不能忍受的,所以这也是当年没有缓存的时候计算速度瓶颈之一,因为相比于寄存器,DRAM的速度慢的不可忍受,于是有了高速缓存的出现。
这也有一些关于带宽的知识,在后面介绍。
但高速缓存的出现也涉及很多技术上的问题,比如内存的同步,缓存数据替换算法等,但缓存能够提速的根本原因是程序的“局部性原则”。
![这里写图片描述](https://img-blog.csdn.net/20160213110253864)
上图为Nehalem处理器芯片内的布局。
##1.1多点计算(计算集群)
集群层次最典型的结构如下:
![这里写图片描述](https://img-blog.csdn.net/20160213112950734)
处理器节点,通过互联网连接多台计算机,将任务分割至各个计算节点,通过互联网交换计算结果,完成大规模并行任务。
##1.2GPU
介绍GPU结构之前,先来看IBM的Cell处理器芯片布局,因为他和现在的GPU相似度非常高:
![这里写图片描述](https://img-blog.csdn.net/20160213110847419)
power PC Core相当于一个管理员,他把任务分配给不同SPE,每个SPE相当于一个工人,这个图里有8个SPE,每个SPE都有自己的工具箱他们协同完成一项或者多项串行或并行任务,同时片内也有L2缓存。
Cell可以完成一个串行工作,以流水线的模式:
![这里写图片描述](https://img-blog.csdn.net/20160213112243782)
这个结构和NVIDIA的G80类似的;
GPU(多GPU)经典的结构:
![这里写图片描述](https://img-blog.csdn.net/20160213114038429)

包括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处理器带宽,理论带宽和单核带宽

![这里写图片描述](https://img-blog.csdn.net/20160213122231389)
这些要素都要协调同步,一个最简单的短板效应。哪一个拖后腿都不行。
有些程序是“内存受限性”而有些程序是“处理器时钟周期或负载受限型”。
#CPU vs GPU
CPU是传统的计算的处理器,拥有复杂的指令控制体系,而GPU则是依靠大量的简单计算核心完成大规模并行计算的处理器,能够在有些计算密集型程序中发挥重要作用,也是计算机视觉,机器学习的重要工具。

学习CUDA--硬件的简单学习的更多相关文章

  1. jQuery学习笔记 .addClass()/.removeClass()简单学习

    使用jQuery或javaScript来动态改变页面中某个或部分元素的样式,为了实现这样的功能,我们往往都是使用jQuery或javaScript来控制HTML中DOM的类名(class)从而实现增加 ...

  2. JAVA学习Swing绝对局部简单学习

    package com.swing; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; ...

  3. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  4. phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识

    16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结  一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...

  5. Quartz定时任务学习(一)简单任务

    学习quartz首先了解三个概念: 调度器:负责调度作业和触发器: 触发器:设置作业执行的时间.参数.条件等:(简单触发器和Cron触发器) 作业:定时任务内容,被执行的程序: 下载必要的jar包,直 ...

  6. Swift学习之函数和简单地控件的创建

     今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的 ...

  7. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  8. [转]ZooKeeper学习第一期---Zookeeper简单介绍

    ZooKeeper学习第一期---Zookeeper简单介绍 http://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKe ...

  9. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

随机推荐

  1. CSP2019螺旋升天爆炸记

    Day -N 半年没碰OI的我终于又回到了这个熟悉又陌生的地方.然后颓废了两天就过了初赛? 初赛rp爆棚考了全校第一,然并卵 然后就是打了遍树状数组模板,写挂了(没错我现在连树状数组都会写挂) 看一眼 ...

  2. 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法

    <深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...

  3. MVC4学习要点记一

    强类型的辅助方法:这些helper的特征是名称后面加上了 For , 这些叫做强类型的辅助方法. 共用布局页:可以在Views文件夹下面新建一个视图页,命名为_ViewStart.cshtml,将这部 ...

  4. python获取文件及文件夹大小

    Python3.3下测试通过 获取文件大小 使用os.path.getsize函数,参数是文件的路径 获取文件夹大小 import os from os.path import join, getsi ...

  5. 爱上Java诊断利器之Arthas

    1. Arthas是什么? 摘自Arthas的Github介绍: Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas al ...

  6. 12 Django之Cookie和Session

    一.什么是Cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接 ...

  7. Cookie工具类(获取cookie,设置cookie)

    import java.io.UnsupportedEncodingException; import java.net.URLDecoder;import java.net.URLEncoder; ...

  8. docker 网络模式详解

    一.前言 Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要 ...

  9. shell中处理参数getopts命令

    一.getopts 简介 由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为:getopts optstring n ...

  10. Python学习记录1-基础知识

    基础知识 基础 #简单记录了部分基础知识 #普通的打印字符串 >>> print("hello world") hello world ------------- ...