OpenCL

OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

OpenCL是一个为异构平台编写程序的框架,此异构平台可由 CPU, GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于 C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和 数据分割的 并行计算机制。
OpenCL类似于另外两个开放的工业标准 OpenGL和 OpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。OpenCL由非盈利性技术组织 Khronos Group掌管。

框架组成

OpenCL平台API:平台API定义了宿主机程序发现OpenCL设备所用的函数以及这些函数的功能,另外还定义了为OpenCL应用创建上下文的函数。
OpenCL运行时API:这个API管理上下文来创建命令队列以及运行时发生的其他操作。例如,将命令提交到命令队列的函数就来自OpenCL运行时API。

OpenCL编程语言 :这是用来编写内核代码的编程语言。它基于ISO C99标准的一个扩展子集,因此通常称为OpenCL C编程语言。

CUDA

CUDA(Compute Unified Device Architecture),显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员现在可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA™的处理器上以超高性能运行。 将来还会支持其它语言,包括FORTRAN以及C++。

工具包

是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。CUDA开发环境包括:
· nvcc C语言编译器
· 适用于GPU(图形处理器)的CUDA FFT和BLAS库。 [1]
· 分析器
· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)
· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)。
CUDA编程手册
CUDA开发者软件开发包(SDK)提供了一些范例(附有 源代码),以帮助使用者开始CUDA编程。这些范例包括:
· 并行双调排序
·  矩阵乘法
·  矩阵转置
· 利用计时器进行性能评价
· 并行大 数组的前缀和(扫描)
· 图像卷积
· 使用Haar小波的一维DWT
· OpenGL和Direct3D图形互操作示例
· CUDA BLAS和FFT库的使用示例
· CPU-GPU C—和C++—代码集成
· 二项式 期权定价模型
·  Black-Scholes期权定价模型
· Monte-Carlo 期权定价模型
· 并行Mersenne Twister(随机数生成)
· 并行直方图
· 图像去噪
· Sobel边缘检测滤波器
· MathWorks MATLAB®
新的基于1.1版CUDA的SDK 范例现在也已经发布了。
技术功能
· 在GPU( 图形处理器)上提供标准C编程语言
· 为在支持CUDA的NVIDIA GPU( 图形处理器)上进行 并行计算而提供了统一的软 硬件解决方案
· CUDA兼容的GPU( 图形处理器)包括很多:从低功耗的 笔记本上用的GPU到高性能的,多GPU的系统。
· 支持CUDA的GPU( 图形处理器)支持并行 数据缓存和线程执行管理器
· 标准FFT( 快速傅立叶变换)和BLAS(基本线性代数子程序)数值 程序库
· 针对计算的专用CUDA驱动
· 经过优化的,从 中央处理器(CPU)到支持CUDA的GPU( 图形处理器)的直接上传、下载通道
· CUDA驱动可与OpenGL和DirectX图形驱动程序实现互操作
· 支持Linux 32位/64位以及Windows XP 32位/64位  操作系统

· 为了研究以及开发语言的目的,CUDA提供对驱动程序的直接访问,以及汇编语言级的访问。

CPU和GPU擅长和不擅长的方面

CPU和GPU都是具有运算能力的芯片,CPU更像“通才”——指令运算(执行)为重+ 数值运算,GPU更像“专才”——图形类数值计算为核心。在不同类型的运算方面的速度也就决定了它们的能力——“擅长和不擅长”。芯片的速度主要取决于三个方面:微架构,主频和IPC(每个时钟周期执行的指令数)。
1.微架构
从微架构上看,CPU和GPU看起来完全不是按照相同的设计思路设计的,当代CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计,就是要兼顾程序执行和数据运算的并行性、通用性以及它们的平衡性。CPU的微架构偏重于程序执行的效率,不会一味追求某种运算极致速度而牺牲程序执行的效率。
CPU微架构的设计是面向指令执行高效率而设计的,因而CPU是计算机中设计最复杂的芯片。和GPU相比,CPU核心的重复设计部分不多,这种复杂性不能仅以晶体管的多寡来衡量,这种复杂性来自于实现:如程序分支预测,推测执行,多重嵌套分支执行,并行执行时候的指令相关性和数据相关性,多核协同处理时候的数据一致性等等复杂逻辑。
GPU其实是由硬件实现的一组图形函数的集合,这些函数主要用于绘制各种图形所需要的运算。这些和像素,光影处理,3D 坐标变换等相关的运算由GPU硬件加速来实现。图形运算的特点是大量同类型数据的密集运算——如图形数据的矩阵运算,GPU的微架构就是面向适合于矩阵类型的数值计算而设计的,大量重复设计的计算单元,这类计算可以分成众多独立的数值计算——大量数值运算的线程,而且数据之间没有像程序执行的那种逻辑关联性。
GPU微架构复杂度不高,尽管晶体管的数量不少。从应用的角度看,如何运用好GPU的并行计算能力主要的工作是开发好它的驱动程序。GPU驱动程序的优劣很大程度左右了GPU实际性能的发挥。
因此从微架构上看,CPU擅长的是像操作系统、系统软件和通用应用程序这类拥有复杂指令调度、循环、分支、逻辑判断以及执行等的程序任务。它的并行优势是程序执行层面的,程序逻辑的复杂度也限定了程序执行的指令并行性,上百个并行程序执行的线程基本看不到。GPU擅长的是图形类的或者是非图形类的高度并行数值计算,GPU可以容纳上千个没有逻辑关系的数值计算线程,它的优势是无逻辑关系数据的并行计算。
2.主频
另外,GPU执行每个数值计算的速度并没有比CPU快,从目前主流CPU和GPU的主频就可以看出了,CPU的主频都超过了1GHz,2GHz,甚至3GHz,而GPU的主频最高还不到1GHz,主流的也就500~600MHz。要知道1GHz = 1000MHz。所以GPU在执行少量线程的数值计算时并不能超过CPU。
目前GPU数值计算的优势主要是浮点运算,它执行浮点运算快是靠大量并行,但是这种数值运算的并行性在面对程序的逻辑执行时毫无用处。
3.IPC(每个时钟周期执行的指令数)
这个方面,CPU和GPU无法比较,因为GPU大多数指令都是面向数值计算的,少量的控制指令也无法被操作系统和软件直接使用。如果比较数据指令的IPC,GPU显然要高过CPU,因为并行的原因。但是,如果比较控制指令的IPC,自然是CPU的要高的多。原因很简单,CPU着重的是指令执行的并行性。
另外,目前有些GPU也能够支持比较复杂的控制指令,比如条件转移、分支、循环和子程序调用等,但是GPU程序控制这方面的增加,和支持操作系统所需要的能力CPU相比还是天壤之别,而且指令执行的效率也无法和CPU相提并论。
最后总结一下:
CPU擅长的:操作系统,系统软件,应用程序,通用计算,系统控制等等;游戏中人工智能,物理模拟等等;3D建模-光线追踪渲染;虚拟化技术——抽象硬件,同时运行多个操作系统或者一个操作系统的多个副本等等。
GPU擅长的:图形类矩阵运算,非图形类并行数值计算,高端3D游戏。
综上所述,在一台均衡计算的计算机系统中,CPU和GPU还是各司其职,除了图形运算,GPU将来可能主要集中在高效率低成本的高性能并行数值计算,帮助CPU分担这种类型的计算,提高系统这方面的性能。而当前的典型应用还是高端3D游戏,一个高效的GPU配合一个高效的CPU,3D游戏的整体效率才能得到保证。“高端3D游戏只需要高端显卡”或者“高端3D游戏只需要CPU”都是无稽之谈。

OpenCL与CUDA,CPU与GPU相关推荐

  1. 深度学习平台、CPU和GPU使用

    首先要你了解一下CPU和GPU的区别.工作原理.及操作 然后安装tensorflow-GPU这个是为了在GPU训练网络. 这里有安装办法. 手把手教你搭建深度学习平台--避坑安装theano+CUDA ...

  2. GPU编程语言选择(OpenCL、CUDA 与C++ AMP)

    其实在C++ AMP之前已经有了两个异构编程框架:CUDA与OpenCL.CUDA(Compute Unified Device Architecture)是显卡厂商Nvidia于2007年推出的业界 ...

  3. torch.cuda.FloatTensor 与 torch.FloatTensor(torch.Tensor)--CPU和GPU上的数据类型

    1.torch.cuda.FloatTensor 与 torch.FloatTensor Pytorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU ...

  4. CPU?GPU?+配置CUDA

    CPU?GPU?+配置CUDA 一.CPU和GPU区别 1.内部结构区别 2.结构不同能力不同 二.配置GPU环境(CUDA) 1.必要条件 2.安装正确的版本 三.参考博客 一.CPU和GPU区别 ...

  5. CUDA编程: GPU与CPU之间使用全局统一内存的完整代码及编译

    CUDA编程: GPU与CPU之间使用全局统一内存的完整代码及编译 最近碰到一个应用场景,需要从GPU访问host上创建的,一个很大的布隆过滤器(准确说是改进后的布谷鸟过滤器).由于GPU卡上的显存有 ...

  6. 显卡,CPU,GPU和CUDA的关系与区别

    (1)显卡:显卡全称显示接口卡,又称显示适配器,是计算机最基本配置.最重要的配件之一.就像电脑联网需要网卡,主机里的数据要显示在屏幕上就需要显卡.因此,显卡是电脑进行数模信号转换的设备,承担输出显示图 ...

  7. CPU与GPU统一虚拟内存(CUDA UM)原理

    CPU与GPU的统一内存(CUDA Unified Memory)原理 文章目录 CPU与GPU的统一内存(CUDA Unified Memory)原理 一.UM下的CUDA编程 二.UM的实现原理 ...

  8. CPU和GPU及CUDA入门基础概念

    CPU与GPU 1 CPU与GPU的关系:smile: 1.1 CPU与GPU各自特点 2 一些零碎的CUDA入门知识:blush: 2.1 函数修饰符 2.2 线程.线程快.线程格 2.3 什么是核 ...

  9. Linux和Windows系统下:安装Anaconda、Paddle、tensorflow、pytorch,GPU[cuda、cudnn]、CPU安装教学,以及查看CPU、GPU内存使用情况

    Linux和Windows系统下安装深度学习框架所需支持:Anaconda.Paddlepaddle.Paddlenlp.pytorch,含GPU.CPU版本详细安装过程 1.下载 Anaconda ...

最新文章

  1. 剑指offer:顺时针打印矩阵
  2. 替换ExpandableListView右边箭头Group Indicator(小图标)
  3. .net得到ip(引)
  4. html中怎么显示错误信息,在html中显示为内嵌错误的文本
  5. 什么情况下会导致@Async异步方法会失效?
  6. LeetCode 1410. HTML 实体解析器(哈希map)
  7. 怎么输出链表长度C语言,下面程序输出结果不,如输出的链表长度结果不对,不知有关问题在哪里。请高手看下...
  8. C++调用PyTorch模型:LibTorch
  9. AduSkin - UI 追求极致,永臻完美
  10. 云计算入门科普系列:云计算与人工智能
  11. 博文目录(最新更新:2018.6.6)
  12. SQL Server 2008数据库自动化安装步骤视频教程,批发零售软件
  13. EXcel 2016高级VBA编程下载
  14. java突然无法加载主类_Java 找不到或无法加载主类的修复方法
  15. 开篇: 高扩展网页制作平台 码良的正确打开方式
  16. 没想到,这款国产软件牛炸了。
  17. 苏州 计算机 在职研究生,苏州地区,可以报考哪些在职研究生院校!
  18. 平衡二叉树(Java)
  19. 《曼巴精神:科比自传》读书摘记
  20. 壳网七彩视界开源对接易支付原生播放器可投屏可选集

热门文章

  1. ec12编码器电路图_EC12带开关编码器
  2. element 可编辑表格方向键操控
  3. 实战商城app墨刀原型设计-设计规范
  4. 仿小米官网php源码,精仿小米官网商城整站完美运营版源码Laravel内核
  5. 程序员必备的英语词汇 (1)
  6. defy/defy+刷机指南
  7. 为什么佳能IR1133机型插入U盘打印提示存储介质受到限制,如何打开USB Print打印功能
  8. 联奕“云计算”数字校园整体解决方案,让高校云计算不再是“浮云”
  9. RD Client、TeamViewer连接主机
  10. 直播电商软件开发,js 倒计时编写