zoukankan      html  css  js  c++  java
  • OpenCL-0-基础概念

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

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

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

  • 相关阅读:
    每日算法
    每日算法
    搜索算法入门详解
    NLP
    每日算法
    每日算法
    Elasticsearch地理位置总结
    elasticsearch Geo Bounding Box Query
    elasticsearch Geo Distance Query
    Elasticsearch java API (23)查询 DSL Geo查询
  • 原文地址:https://www.cnblogs.com/charleechan/p/12500572.html
Copyright © 2011-2022 走看看