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-并行计算与计算机架构/

CUDA-F-1-0-并行计算与计算机架构的更多相关文章

  1. Spark2.1.0模型设计与基本架构(上)

    随着近十年互联网的迅猛发展,越来越多的人融入了互联网——利用搜索引擎查询词条或问题:社交圈子从现实搬到了Facebook.Twitter.微信等社交平台上:女孩子们现在少了逛街,多了在各大电商平台上的 ...

  2. 微软今日发布汇总:VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线

    Visual Studio Visual Studio 2015 下载 VS2015新功能列表 ‘ Visual Studio 2013 更新包 5.0 下载 其中包含Visual Studio 20 ...

  3. VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线

    VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线 Visual Studio Visual Studio 2015 下载 VS2015新功能列表 ‘ Visual ...

  4. Spark2.1.0模型设计与基本架构(下)

    阅读提示:读者如果对Spark的背景知识不是很了解的话,建议首先阅读<SPARK2.1.0模型设计与基本架构(上)>一文. Spark模型设计 1. Spark编程模型 正如Hadoop在 ...

  5. RISC-V与DSA计算机架构

    RISC-V与DSA计算机架构 相信所有和计算机体系结构打过交道的朋友们都看过David Patterson与John Hennessy的煌煌巨作,<计算机体系架构:量化研究方法>.两位在 ...

  6. C# 4.0 并行计算部分

    C# 4.0 并行计算部分   c#linq算法多线程list微软   目录(?)[-] C 40 并行计算部分 一简单使用 二 并行循环的中断和跳出 三并行循环中为数组集合添加项 四返回集合运算结果 ...

  7. tail -f -n 0 /var/log/messages

    <pre><font color="#CC0000"><b>root@kali</b></font>:<font ...

  8. Unable to load configuration. - action - file:/F:/apache-tomcat-8.0.30/webapps/test1Struts2/WEB-INF/classes/struts.xml:11:71

    Unable to load configuration. - action - file:/F:/apache-tomcat-8.0.30/webapps/test1Struts2/WEB-INF/ ...

  9. Python文件读取中:f.seek(0)和f.seek(0,0)有什么区别

    file.seek()方法标准格式是:seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始 ...

随机推荐

  1. X86逆向5:破解程序的自效验

    在软件的破解过程中,经常会遇到程序的自效验问题,什么是自效验?当文件大小发生变化,或者MD5特征变化的时候就会触发自效验暗装,有些暗装是直接退出,而有些则是格盘蓝屏等,所以在调试这样的程序的时候尽量在 ...

  2. 2-Perl 环境安装

    1.Perl 环境安装在我们开始学习 Perl 语言前,我们需要先安装 Perl 的执行环境.Perl 可以在以下平台下运行:Unix (Solaris, Linux, FreeBSD, AIX, H ...

  3. 进阶Java编程(5)基础类库

    Java基础类库 1,StringBuffer类 String类是在所有项目开发之中一定会使用到的一个功能类,并且这个类拥有如下的特点: ①每一个字符串的常量都属于一个String类的匿名对象,并且不 ...

  4. c#获取桌面路径和bin文件的路径

    string path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory): 生成的运行bin文件下的路径: ...

  5. Groovy--使用模板引擎和GroovyShell执行插值字符串

    package curveJudge import groovy.text.SimpleTemplateEngine /** * Created by Jxy on 2019/8/26 17:16 * ...

  6. 1.移动端自动化测试-知识笔记(面试必备,测试点,adb命令)

    移动端测试: 移动应用,特性(功能) 满足 需求(产品文档,隐性需求) 一.App功能测试: 死活背下来1.业务逻辑正确性测试: 产品文档,隐性需求- 写成测试用例 2.兼容性测试:   1.系统版本 ...

  7. linux递归查找目录下所有文件夹以及文件

    相对于ls或者ll,可能find在这个时候更加给力 先看我的目录结构 tree命令是查看目录的结构,而且最后会列出所有的directory的数目以及文件夹的数目...好像我们接下来要做的就没有必要了, ...

  8. 第十章、json和pickle模块

    目录 第十章.json和pickle模块 一.序列化 二.json 三.pickle模块 第十章.json和pickle模块 一.序列化 把对象(变量)从内存中变成可存储或传输的过程称之为序列化, 序 ...

  9. SQL优化策略

    mysql添加索引 1.主键索引LATER TABLE 'table_neme' ADD PRIMARY KEY('column');2.唯一索引unique空串(null)可以放多个 如果是具体的内 ...

  10. 第八章·Logstash深入-通过TCP/UDP收集日志

    1.收集TCP/UDP日志 通过logstash的tcp/udp插件收集日志,通常用于在向elasticsearch日志补录丢失的部分日志,可以将丢失的日志通过一个TCP端口直接写入到elastics ...