CUDA-F-1-0-并行计算与计算机架构
Abstract: 本文从总体上给出了CUDA编程的Big picture,后续所有的文章都在本文的基础上详细展开。
Keywords: 并行计算,串行编程,并行编程,计算机架构,并行性,异构架构,CUDA
开篇废话
CUDA这就正式开始了,废话就是我发现现在大家是有钱了,无论是穿着,饰品,座驾,还是谈论都是国内知名的国际一线品牌,但是我真希望他们说话能温文尔雅一些,别再公共场所吸烟,别随地吐痰,开车能按照秩序别插队。。。。。。
我不是愤青,我也不仇富,因为我不穷,我只是感觉这样不太好。
最深刻的绝望就是,当你发现你能达到当前最高高度的那种生活也是你所讨厌的时候,这就是最深刻的绝望。如果努力就能达到自己想要的生活的时候,这个时候是不怕困难与辛苦的,没有希望的时候才是最大的绝望。
听过一句话,电影里面的一句台词,不是名人说的,但我觉得非常值得我思考,“慢就是稳,稳就是快”,我们的发展太快了,以至于出现了各种《21天精通C++》《10天学会机器学习》这类东西。
稳住吧,打好基础,才有机会去更好的环境。
Big Picture
我们学习CUDA主要参考《CUDA C编程权威指南》我们的博客也基本按照书中的章节进行。
结构:
CUDA想要运行起来并不困难,但是想要写得好,真的需要研究一下,某乎上各路大牛给出的建议是看CUDA的官方文档,我之前也是过了一遍文档,但是文档教会你更多的是如何写代码,而没有讲解详细的硬件结构(可能在别的文档中,我只看了编程指导),我们学习编程应该同时理解语言,编程模型,硬件执行模型,以及优化方法,单纯的学会写代码,能运行,这是培训班的节奏。
还记得峰哥的话,知道编译原理和操作系统(软硬件),什么语言都一样。
读这个系列的文章需要以下知识:
- C/C++ 编程经验,这个不用说,如果C都没学会就要来CUDA,我觉得不理智,根基不稳,也是我一贯所反对的
- 本系列是Freshman,后面会有Junior,主要内容肯定有所不同,目前准备的是Freshman 主要介绍基础知识,包括硬件基础,编程模型,基本性能方面的考察,和简单的优化(包括内存等),以及项目实际中的一些技巧;Junior部分主要介绍更高级的性能优化技巧,比如PTX,更高级的内存处理等;优化空间最大的是并行算法的设计,当然不在本系列所讨论的范围内,那是另一个专题了。
并行计算
我们的计算机从最早的埃尼阿克到现在的各种超算,都是为了应用而产生的,软件和硬件相互刺激而相互进步,并行计算也是这样产生的,我们最早的计算机肯定不是并行的,但是可以做成多线程的,因为当时一个CPU只有一个核,所以不可能一个核同时执行两个计算,后来我们的应用逐步要求计算量越来越高,所以单核的计算速度也在逐步上升,后来大规模并行应用产生了,我们迫切的需要能够同时处理很多数据的机器,比如图像处理,以及处理大规模的同时访问的服务器后台。
并行计算其实设计到两个不同的技术领域:
- 计算机架构(硬件)
- 并行程序设计(软件)
这两个很好理解,一个生产工具,一个用工具产生各种不同应用。
硬件主要的目标就是为软件提供更快的计算速度,更低的性能功耗比,硬件结构上支持更快的并行。
软件的主要目的是使用当前的硬件压榨出最高的性能,给应用提供更稳定快速的计算结果。
我们传统的计算机结构一般是哈佛体系结构(后来演变出冯·诺依曼结构)主要分成三部分:
- 内存(指令内存,数据内存)
- 中央处理单元(控制单元和算数逻辑单元)
- 输入、输出接口
后面的冯诺依曼结构就把数据和指令都当做数据来处理了,这里就不再介绍了,再次安利《深入理解计算机系统》这本书,里面可以找到相关知识。
写并行和串行的最大区别就是,写串行程序可能不需要学习不同的硬件平台,但是写并行程序就需要对硬件有一定的了解了。
后面内容查看https://face2ai.com/CUDA-F-1-0-并行计算与计算机架构/
最新文章
- JavaScript WEB页面调试
- 超链接标签a样式生效,取消下划线,文字垂直(上下)居中
- webapi初学项目(增删改查)
- js、jquery获取当前url中各个参数
- C中的Float分析
- $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
- 电赛菜鸟营培训(四)——STM32F103CB之ADC转换
- Linux 配置
- Echarts双轴图的配置.
- FZU 2104 (13.11.28)
- C#键盘事件处理
- js一些重点知识总结(一)
- Linux:Day7(上) find、文件特殊权限、if语句
- python操作excel文件一(xlrd读取文件)
- HRMS(人力资源管理系统)-SaaS架构设计-概要设计实践
- Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点
- docker-ce-17.09 容器创建,运行,进入,删除,导入/导出
- openfalcon源码分析之transfer
- Linux下ELK环境搭建
- GitHub中webhooks的使用