Abstract: 本文从总体上给出了CUDA编程的Big picture,后续所有的文章都在本文的基础上详细展开。

Keywords: 并行计算,串行编程,并行编程,计算机架构,并行性,异构架构,CUDA

开篇废话

CUDA这就正式开始了,废话就是我发现现在大家是有钱了,无论是穿着,饰品,座驾,还是谈论都是国内知名的国际一线品牌,但是我真希望他们说话能温文尔雅一些,别再公共场所吸烟,别随地吐痰,开车能按照秩序别插队。。。。。。

我不是愤青,我也不仇富,因为我不穷,我只是感觉这样不太好。

最深刻的绝望就是,当你发现你能达到当前最高高度的那种生活也是你所讨厌的时候,这就是最深刻的绝望。如果努力就能达到自己想要的生活的时候,这个时候是不怕困难与辛苦的,没有希望的时候才是最大的绝望。

听过一句话,电影里面的一句台词,不是名人说的,但我觉得非常值得我思考,“慢就是稳,稳就是快”,我们的发展太快了,以至于出现了各种《21天精通C++》《10天学会机器学习》这类东西。

稳住吧,打好基础,才有机会去更好的环境。

Big Picture

我们学习CUDA主要参考《CUDA C编程权威指南》我们的博客也基本按照书中的章节进行。



结构:

CUDA想要运行起来并不困难,但是想要写得好,真的需要研究一下,某乎上各路大牛给出的建议是看CUDA的官方文档,我之前也是过了一遍文档,但是文档教会你更多的是如何写代码,而没有讲解详细的硬件结构(可能在别的文档中,我只看了编程指导),我们学习编程应该同时理解语言,编程模型,硬件执行模型,以及优化方法,单纯的学会写代码,能运行,这是培训班的节奏。

还记得峰哥的话,知道编译原理和操作系统(软硬件),什么语言都一样。

读这个系列的文章需要以下知识:

  1. C/C++ 编程经验,这个不用说,如果C都没学会就要来CUDA,我觉得不理智,根基不稳,也是我一贯所反对的
  2. 本系列是Freshman,后面会有Junior,主要内容肯定有所不同,目前准备的是Freshman 主要介绍基础知识,包括硬件基础,编程模型,基本性能方面的考察,和简单的优化(包括内存等),以及项目实际中的一些技巧;Junior部分主要介绍更高级的性能优化技巧,比如PTX,更高级的内存处理等;优化空间最大的是并行算法的设计,当然不在本系列所讨论的范围内,那是另一个专题了。

并行计算

我们的计算机从最早的埃尼阿克到现在的各种超算,都是为了应用而产生的,软件和硬件相互刺激而相互进步,并行计算也是这样产生的,我们最早的计算机肯定不是并行的,但是可以做成多线程的,因为当时一个CPU只有一个核,所以不可能一个核同时执行两个计算,后来我们的应用逐步要求计算量越来越高,所以单核的计算速度也在逐步上升,后来大规模并行应用产生了,我们迫切的需要能够同时处理很多数据的机器,比如图像处理,以及处理大规模的同时访问的服务器后台。

并行计算其实设计到两个不同的技术领域:

  • 计算机架构(硬件)
  • 并行程序设计(软件)

这两个很好理解,一个生产工具,一个用工具产生各种不同应用。

硬件主要的目标就是为软件提供更快的计算速度,更低的性能功耗比,硬件结构上支持更快的并行。

软件的主要目的是使用当前的硬件压榨出最高的性能,给应用提供更稳定快速的计算结果。

我们传统的计算机结构一般是哈佛体系结构(后来演变出冯·诺依曼结构)主要分成三部分:

  • 内存(指令内存,数据内存)
  • 中央处理单元(控制单元和算数逻辑单元)
  • 输入、输出接口



后面的冯诺依曼结构就把数据和指令都当做数据来处理了,这里就不再介绍了,再次安利《深入理解计算机系统》这本书,里面可以找到相关知识。

写并行和串行的最大区别就是,写串行程序可能不需要学习不同的硬件平台,但是写并行程序就需要对硬件有一定的了解了。

后面内容查看https://face2ai.com/CUDA-F-1-0-并行计算与计算机架构/

最新文章

  1. JavaScript WEB页面调试
  2. 超链接标签a样式生效,取消下划线,文字垂直(上下)居中
  3. webapi初学项目(增删改查)
  4. js、jquery获取当前url中各个参数
  5. C中的Float分析
  6. $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
  7. 电赛菜鸟营培训(四)——STM32F103CB之ADC转换
  8. Linux 配置
  9. Echarts双轴图的配置.
  10. FZU 2104 (13.11.28)
  11. C#键盘事件处理
  12. js一些重点知识总结(一)
  13. Linux:Day7(上) find、文件特殊权限、if语句
  14. python操作excel文件一(xlrd读取文件)
  15. HRMS(人力资源管理系统)-SaaS架构设计-概要设计实践
  16. Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点
  17. docker-ce-17.09 容器创建,运行,进入,删除,导入/导出
  18. openfalcon源码分析之transfer
  19. Linux下ELK环境搭建
  20. GitHub中webhooks的使用

热门文章

  1. 怎样使 html 文本文字不能被选中?
  2. prefixOverrides使用注意是事项
  3. 【Mybatis】Mapper接口的参数处理过程
  4. java——包装类中的equals方法
  5. O036、Snapshot Instance 操作详解
  6. 文件下载不可以使用ajax
  7. MongoDB 各个位版本下载地址
  8. Delphi 动态链接库编程
  9. 第八章· MySQL日志管理
  10. Python爬虫解析htm时lxml的HtmlElement对象获取和设置inner html方法