OpenCL-0-基础概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCL-0-基础概念相关的知识,希望对你有一定的参考价值。

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

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将内部存储器抽象成四层结构的存储器模型:全局内存、常量内存、本地内存、私有内存。
  • 编程模型:数据并行、任务并行、二者混合。

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

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

原文地址:http://coderdock.com

以上是关于OpenCL-0-基础概念的主要内容,如果未能解决你的问题,请参考以下文章

OpenCL 管道

Android Fragments 基础知识:为啥?这在概念上是错误的吗?

对 OpenCL 1.2 的支持会结束吗?

[vscode]--HTML代码片段(基础版,reactvuejquery)

如何查看android 是不是支持opencl

NVIDIA OpenCL 设备版本