开篇废话

成熟与智慧其实和年龄相关,但绝不是完全由年龄决定,少年老成的人肯定是存在的,不是长得老,而是心态成熟,当然大多数老年人其实有些事情思考起来还是老原则,所以他们有时候做事没那么周到,所以一个人的成熟程度可以看他对事物的态度,什么事都一棍子打死,不是对就是错的,这种思考方式应该还是小学生水平,能够尊重别人,允许有不同意见,这才是成熟的人,什么事只有自己是对的,或者自己听到的消息都是正确的,我觉得这是吃奶的水平。

异构计算

异构计算,首先必须了解什么是异构,不同的计算机架构就是异构,上文书我们讲过计算机架构了,就是为了引出异构的概念,按照指令集划分或者按照内存结构划分,但是我觉得只要两片CPU型号不一样就应该叫异构(这个想法先保留,对错不确定)。
GPU本来的任务是做图形图像的,也就是把数据处理成图形图像,图像有个特点就是并行度很高,基本上一定距离意外的像素点之间的计算是独立的,所以属于并行任务。
GPU之前是不可编程的,或者说不对用户开放的,人家本来是做图形计算控制显示器的,虽然对用户不可编程,但是你只要把硬件卖给了我,就由不得你了,然后就有hacker开始想办法给GPU编程,来帮助他们完成规模较大的运算,于是他们研究着色语言或者图形处理原语来和GPU对话。后来黄老板发现了这个是个新的功能啊,然后就让人开发了一套平台,CUDA,然后深度学习火了,顺带着,CUDA也火到爆炸。
刚刚最新消息,英伟达新版本GPU架构会被命名为Turing,一丝欣慰,发自内心深处地敬那些为世界进步做出了杰出贡献的人们,他们是人类未来的希望。

x86 CPU+GPU的这种异构应该是最常见的,也有CPU+FPGA,CPU+DSP等各种各样的组合,CPU+GPU在每个笔记本或者台式机上都能找到。当然超级计算机大部分也采用异构计算的方式来提高吞吐量。
异构架构虽然比传统的同构架构运算量更大,但是其应用复杂度更高,因为要在两个设备上进行计算,控制,传输,这些都需要人为干预,而同构的架构下,硬件部分自己完成控制,不需要人为设计。

异构架构

举一个我用的工作站的构成,我使用的是一台 intel i7-4790 CPU加上两台Titan x GPU构成的工作站,GPU插在主板的PCIe卡口上,运行程序的时候,CPU像是一个控制者,指挥两台Titan完成工作后进行汇总,和下一步工作安排,所以CPU我们可以把它看做一个指挥者,主机端,host,而完成大量计算的GPU是我们的计算设备,device。

上面这张图能大致反应CPU和GPU的架构不同。

  • 左图:一个四核CPU一般有四个ALU,ALU是完成逻辑计算的核心,也是我们平时说四核八核的核,控制单元,缓存也在片上,DRAM是内存,一般不在片上,CPU通过总线访问内存。
  • 右图:GPU,绿色小方块是ALU,我们注意红色框内的部分SM,这一组ALU公用一个Control单元和Cache,这个部分相当于一个完整的多核CPU,但是不同的是ALU多了,control部分变小,可见计算能力提升了,控制能力减弱了,所以对于控制(逻辑)复杂的程序,一个GPU的SM是没办法和CPU比较的,但是对了逻辑简单,数据量大的任务,GPU更搞笑,并且,注意,一个GPU有好多个SM,而且越来越多。

CPU和GPU之间通过PCIe总线连接,用于传递指令和数据,这部分也是后面要讨论的性能瓶颈之一。
一个异构应用包含两种以上架构,所以代码也包括不止一部分:

  • 主机代码
  • 设备代码

主机代码在主机端运行,被编译成主机架构的机器码,设备端的在设备上执行,被编译成设备架构的机器码,所以主机端的机器码和设备端的机器码是隔离的,自己执行自己的,没办法交换执行。
主机端代码主要是控制设备,完成数据传输等控制类工作,设备端主要的任务就是计算。
因为当没有GPU的时候CPU也能完成这些计算,只是速度会慢很多,所以可以把GPU看成CPU的一个加速设备。
NVIDIA目前的计算平台(不是架构)有:

  • Tegra
  • Geforce
  • Quadro
  • Tesla

每个平太针对不同的应用场景,比如Tegra用于嵌入式,Geforce是我们平时打游戏用到,Tesla是我们昨天租的那台腾讯云的,主要用于计算。

上面是根据应用场景分类的几种平台。

衡量GPU计算能力的主要靠下面两种***容量***特征:

  • CUDA核心数量(越多越好)
  • 内存大小(越大越好)

相应的也有计算能力的***性能***指标:

  • 峰值计算能力
  • 内存带宽

nvidia自己有一套描述GPU计算能力的代码,其名字就是“计算能力”,主要区分不同的架构,早其架构的计算能力不一定比新架构的计算能力强

计算能力 架构名
1.x Tesla
2.x Fermi
3.x Kepler
4.x Maxwell
5.x Pascal
6.x Volta

这里的Tesla架构,与上面的Tesla平台不同,不要混淆,一个是平台名字,一个是架构名字

范例

后续内容https://face2ai.com/CUDA-F-1-1-异构计算-CUDA/

CUDA-F-1-1-异构计算-CUDA相关推荐

  1. 深度学习(三十六)异构计算CUDA学习笔记(1)

    异构计算CUDA学习笔记(1) 原文地址:http://blog.csdn.net/hjimce/article/details/51506207 作者:hjimce 近日因为感觉自己在深度学习工程化 ...

  2. 异构计算--CUDA架构

    1.CUDA是什么?   CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台,是一种通用并行计算架构,该架构使GPU能够解决复杂的 ...

  3. cuda版本查看_ubuntu安装CUDA

    0 写在前面 安装环境:ubuntu18.04以及GTX1050Ti笔记本 为什么要安装CUDA? 参考百科,CUDA是英伟达推出的集成技术,通过该技术可利用GeForce 8 以后的GPU或者较新的 ...

  4. CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)

    CUDA+VS2017+win环境下 cuda工程环境搭建 引言 前提准备(CUDA和VS的安装) Visual Studio 配置 测试 Reference 引言 在学习CUDA并行计算原理时,在V ...

  5. VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现

    文章目录 前言 CUDA实现向量加法 2. 结果展示 总结 学习资料 VS2017 CUDA编程学习1:CUDA编程两变量加法运算 VS2017 CUDA编程学习2:在GPU上执行线程 VS2017 ...

  6. CUDA编程-01: 搭建CUDA编程环境

    CUDA简介 CUDA是英伟达开发的一种并行计算平台和编程模型,使用它可以让编程人员非常方便地利用GPU强大的算力.支持CUDA的GPU有数百个内核,可以同时运行数千个计算线程,这些内核拥有共享的资源 ...

  7. 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应 如果pytorch的编译时 ...

  8. CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识

    作者丨科技猛兽 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读.综述盘点.调参攻略.面试经验等干货~ 目录 1 C ...

  9. Ubuntu 16.04卸载CUDA 6.5和安装CUDA 8.0

    一,引言 由于系统从Ubuntu 14.04升级到了16.04,原来的CUDA 6.5无法继续使用,所以重新安装了CUDA 8.0. 二,卸载CUDA 6.5 和驱动 以下操作都在命令行界面操作,比如 ...

  10. cuda入门——改良第一个 CUDA程序

    cuda入门--改良第一个 CUDA程序 在上篇中,我们做了一个计算一大堆数字的平方和的程序.不过,我们也提到这个程序的执行效率并不理想.当然,实际上来说,如果只是要做计算平方和的动作,用 CPU 做 ...

最新文章

  1. VMware虚拟机安装之后,打开时找不到启动Centos的界面
  2. vue启动时报错,node-modules下xxx缺失
  3. 【Android 逆向】Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )
  4. 2、事务的概念和特性
  5. 非管理型工业交换机和管理型工业交换机的区别和选择
  6. 分类二级联动 php,学习猿地-php实现二级联动菜单
  7. python requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine('HTTP/1.1 000\r\n'
  8. wx.chooseimage 超过了最大请求长度_一次 HTTP 请求到底经历了什么?
  9. 测试Flume-1.6.0写入HDFS(Hadoop-2.7.2)的简单实例
  10. 使用envi对图像进行对比度拉伸并保存
  11. 解决在TP5中无法使用快递鸟的即时查询API
  12. 10个Jquery幻灯片插件教程
  13. java开发web应用开发,Java Web应用开发概述
  14. 【数字IC】深入浅出理解UART协议
  15. 智能睡眠监测带扣案列/APP/小程序/网站
  16. 第68页的gtk+编程例子——选择菜单
  17. python中reduce什么意思_python中的reduce
  18. android dialog遮挡键盘,彻底解决软键盘遮挡DialogFragment
  19. Cadence Orcad Capture元件位号自动编号的2种方法图文教程及视频演示
  20. ios xmpp研究探索:删除好友

热门文章

  1. uniapp 分享微信好友、微信朋友圈、QQ
  2. XGBoost算法介绍
  3. 怎么在图片加文字边框?这些方法值得你收藏
  4. 小常识 u盘无法格式化
  5. Leetcode.1129 颜色交替的最短路径
  6. Python3入门,看这篇就够了!
  7. 登录认证和链接权限的相关知识
  8. html设置默认选中状态,html中select标签用法解析及如何设置select的默认选中状态...
  9. 基于PHP的毕业设计管理系统的设计与实现(源码+配套论文)
  10. Mysql启动不了怎么回事