前言

本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界。

冯诺依曼计算机架构的瓶颈

曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础的。该系统架构简单来说就是处理器从存储器中不断取指,解码,执行。

但如今这种系统架构遇到了瓶颈:内存的读写速度跟不上 CPU 时钟频率。具有此特征的系统被称为内存受限型系统,目前的绝大多数计算机系统都属于此类型。

为了解决此问题,传统解决方案是使用缓存技术。通过给 CPU 设立多级缓存,能大大地降低存储系统的压力:

然而随着缓存容量的增大,使用更大缓存所带来的收益增速会迅速下降,这也就意味着我们要寻找新的办法了。

对 GPU 编程技术发展具有启发意义的几件事

1. 70年代末期,克雷系列超级计算机研制成功 (克雷1当年耗资800万美元)。

此类计算机采用若干内存条的共享内存结构,即这些内存条可以与多个处理器相连接,从而发展成今天的对称多处理器系统 (SMD)。

克雷2是向量机 - 一个操作处理多个操作数。

如今的 GPU 设备的核心也正是向量处理器。

2. 80年代初期,一家公司设计并研制了一种被称为连接机的计算机系统。

该系统具有16个 CPU 核,采用的是标准的单指令多数据 (SIMD) 并行处理。连接机通过这种设计能够消除多余的访存操作,并将内存读写周期变为原来的 1/16 。

3. CELL 处理器的发明

这类处理器很有意思,其架构大致如下图所示:

在此结构中,一个 PPC 处理器作为监管处理器,与大量的 SPE流处理器相连通,组成了一个工作流水线。

对于一个图形处理过程来说,某个 SPE 可负责提取数据,另一个 SPE 负责变换,再另一个负责存回。这样可构成一道完完整整的流水线,大大提高了处理速度。

顺便提一句,2010年超级计算机排名第三的计算机就是基于这种设计理念实现的,占地面积达560平方米,耗资 1.25 亿美元。

多点计算模型

集群计算是指通过将多个性能一般的计算机组成一个运算网络,达到高性能计算的目的。这是一种典型的多点计算模型。

而 GPU 的本质,也同样是多点计算模型。其相对于当今比较火的Hadoop/Spark集群来说:“点”由单个计算机变成了 单个SM (流处理器簇),通过网络互连变成了通过显存互连 (多点计算模型中点之间的通信永远是要考虑的重要问题)。

GPU 解决方案

随着 CPU "功耗墙" 问题的产生,GPU 解决方案开始正式走上舞台。

GPU 特别适合用于并行计算浮点类型的情况,下图展示了这种情况下 GPU 和 CPU 计算能力的差别:

但这可不能说明 GPU 比 CPU 更好,CPU应当被淘汰。 上图的测试是在计算可完全并行的情况下进行的。

对于逻辑更灵活复杂的串行程序,GPU 执行起来则远不如 CPU 高效 (没有分支预测等高级机制)。

另外,GPU 的应用早已不局限于图像处理。事实上 CUDA 目前的高端板卡 Tesla 系列就是专门用来进行科学计算的,它们连 VGA 接口都没。

几款新的显卡及其配置 (仅列 N 卡)

注:

1. 各参数的具体含义将在以后的文章中做细致分析

2. 当前显卡的具体参数信息可通过调试工具获取到 (方法略)

主流 GPU 编程接口

1. CUDA

是英伟达公司推出的,专门针对 N 卡进行 GPU 编程的接口。文档资料很齐全,几乎适用于所有 N 卡。

本专栏讲述的 GPU 编程技术均基于此接口。

2. Open CL

开源的 GPU 编程接口,使用范围最广,几乎适用于所有的显卡。

但相对 CUDA,其掌握较难一些,建议先学 CUDA,在此基础上进行 Open CL 的学习则会非常简单轻松。

3. DirectCompute

微软开发出来的 GPU 编程接口。功能很强大,学习起来也最为简单,但只能用于 Windows 系统,在许多高端服务器都是 UNIX 系统无法使用。

总结,这几种接口各有优劣,需要根据实际情况选用。但它们使用起来方法非常相近,掌握了其中一种再学习其他两种会很容易。

学习 GPU 编程的意义

1. 不单能学会如何使用 GPU 解决问题,更让我们更加深入地了解并行编程思想,为以后全面地掌握各种并行技术打下铺垫。

2. 并行计算相关知识的研究与发展势必会成为未来IT业界与学界的一大热点。

第一篇:GPU 编程技术的发展历程及现状的更多相关文章

  1. 从故纸堆里,回顾下Web技术的发展历程

    通过对比这些年的计算机图书来让大家感受下前些年Web技术的发展历程. Web开发框架,目前是Spring Boot+JPA,我正好出过本书,从中大家能感受到现在的技术. <Spring Boot ...

  2. (第一篇)linux简介与发展历史以及软件的安装

    1.Linux操作系统基本结构介绍: 操作系统: 英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统 ...

  3. android apk 防止反编译技术第一篇-加壳技术

    做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...

  4. 3分钟看完Java 8——史上最强Java 8新特性总结之第一篇 函数式编程基础

    目录 · 行为参数化 · Lambda表达式 · 概况 · 函数式接口 · 类型推断 · 使用外层变量 · 方法引用 · 复合Lambda表达式 行为参数化 1. 理解函数式编程要先理解行为参数化. ...

  5. 第一篇 .NET高级技术之索引器

    基础知识补充 索引 器 没有名字 ,索引器的内部本质 (ILSpy的IL模式下看)类型 this[参数]{get;set;} 可以是只读或者只写(在get或者set前加上private) 字符串是只读 ...

  6. Intel系列CPU的流水线技术的发展

    Intel系列CPU的流水线技术的发展 CPU(Central processing Unit),又称“微处理器(Microprocessor)”,是现代计算机的核心部件.对于PC而言,CPU的规格与 ...

  7. MySQL 第一篇:初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  8. python、第一篇:初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  9. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

随机推荐

  1. Android开发中一些被冷落但却很有用的类和方法

    MediaMetadataRetriever 顾名思义,就是用来获取媒体文件一些相关信息的类.包括一首歌的标题,作者,专辑封面和名称,时长,比特率等等.如果是视频的话,可以获取视频的长宽,预览图. h ...

  2. 绕过kernel模块版本校验检测

    kernel module version check bypass . 举例说明 . 内核是怎么实现的 . 怎样去突破 . 总结 . 举例说明 Linux内核版本很多,升级很快,2个小内核版本中内核 ...

  3. 确保客户端可以接收到服务端的异常serviceDebug includeExceptionDetailInFaults="true"

    1.为了确保客户端可以接收到服务端反馈的异常 在服务端的配置文件中需要有 <system.serviceModel> <behaviors> <serviceBehavi ...

  4. Sequence Assignments FRM-41830: List of Value contains no entries.

    SYMPTOMS ============================================================ GL > Setup > Financials ...

  5. INCOIN Importing Multilingual Items (Doc ID 278126.1)

    APPLIES TO: Oracle Inventory Management - Version: 11.5.9 to 11.5.10.CU2 - Release: 11.5 to 11.5 GOA ...

  6. FZU 2092 收集水晶 dp+bfs

    定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值 最终就是所有的dp[max][..][..][..][..]的最大值 然后递推也很自然,枚 ...

  7. [codevs4247]奇特的生物

    题目描述 Description 科学家们最近发现了一种奇怪的生物,它们每天长大一岁,刚出生的宝宝为1岁,且它们的年龄没有上限.已知年龄为1岁,2岁,3岁,……,k岁的个体具有生育能力,当年龄为i的具 ...

  8. Java笔记(五)……运算符

    算术运算符 算术运算符的注意问题: 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1.但被模数是负数就另当别论. 对于除号"/",它的整数除和小数除是有区别的:整数之间做除 ...

  9. Windows Azure公有云服务相关方案

    http://www.cnblogs.com/sennly/p/4139675.html 1.公有云平台服务简介 Windows Azure 是一个灵活而开放的云平台,通过该平台,您可以在数据中心快速 ...

  10. Linux下安装mysql5.6.11(找点有用的信息太费劲)(转)

    Linux下安装mysql5.6.11(找点有用的信息太费劲) (2013-04-25 10:25:09)     1.申请阿里云Linux服务器 昨天在阿里云申请了一个免费试用5天的Linux云服务 ...