OpenCL-0-基础概念

  OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准。
OpenCL编程

1.是什么

  OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准。数据结构

  有标准,就得有实现,目前而言,intel、Nvidia、ARM、AMD、QUALCOMM、Apple都有其对应的OpenCL实现。在这个系列中,咱们着眼于OpenCL的语法以及编程概念。不去深究各家实现的异同。架构

  我所使用的Nvidia的实现。在个人电脑上,显卡是 GTX-960M,去Nvidia官网下载相应的cuda-tool-kit进行安装,以及使用命令行安装sudo apt-get install nvidia-opencl-dev nvidia-opencl-icd-xxx(xxx是与你的发行版本相对应的版本号,个人是384)。详细安装过程再也不赘述。编程语言

  • 异构:什么是异构,最简单的X86和ARM就是最明显的处理器架构,标准中说面向异构,那么也就是说只须要编写一次代码,就可以在不能的架构芯片上运行(功能怎么有点像JAVA)。
  • 并行: 咱们老是但愿可以有性能更高的的计算机。提升性能的方法之一是提升运行频率,不过如今各家的CPU在4GHZ都卡了脖子。另一种方式就是,把任务分发出去,让不一样的处理核心去进行。但若是处理很差,就成了简单的堆砌核心,造成一核有难,七核围观的尴尬局面。全部有的专家就通过研究后提出了增长专门的处理单元,来提取异构单元中的每一个并行项,是提高功率效率的惟一方法。我对这句话的理解就是农夫种田,渔民打鱼,把合适的任务交给合适的处理单元来作,CPU处理控制,GPU处理大量简单的运算。因此此处的并行就是指可以提取并行项,并正确处理的意思。
  • 通用:既然说每一种架构都有其适合的处理任务类型,难道我要去学每一种架构的编程语言么,非也,这就是OpenCL作的事情。它向上提供统一的编程接口,下面的具体实现由各个厂商去实习。

2.学什么

  • 掌握所开发的异构系统的组成,(X86仍是ARM总的分清吧,有几个核总得知道吧)
  • 掌握这些设备的属性(最简单的CPU擅长逻辑,GPU擅长简单运算)。
  • 使用合适的处理方式(任务并行或数据并行或二者兼有之)将任务进行分解,转化为具体架构平台上的指令(也称为内核)
  • 创建用于计算的数据结构和内存对象
  • 按照既定的顺序执行内核
  • 核验结果

3.组成

  • 平台模型: 能够理解为咱们所用的主机,该主机可能包含多个OpenCL设备(CPU GPU),每个设备可能包含多个计算单元(CU),每个计算单元又可能包含多个处理单元。
  • 执行模型: OpenCL执行程序时,在主机上执行控制程序,分发内核(执行程序)到多个处理设备。
  • 存储模型:根据实际的存储体系,OpenCL将内部存储器抽象成四层结构的存储器模型:全局内存、常量内存、本地内存、私有内存。
  • 编程模型:数据并行、任务并行、两者混合。

这一部分咱们会在下一篇中进行详细解释。性能

版权声明:本文为博主原创文章,转载需声明为转载内容并添加原文地址。spa

原文地址:http://coderdock.com命令行

相关文章
相关标签/搜索