zoukankan      html  css  js  c++  java
  • OpenCL通用异构开放环境

    OpenCL通用异构开放环境

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

    OpenCL 1.0主要由一个并行计算API和一种针对此类计算的编程语言组成,此外还特别定义了:

    1、C99编程语言并行扩展子集;

    2、适用于各种类型异构处理器的坐标数据和基于任务并行计算API;

    3、基于IEEE 754标准的数字条件;

    4、与OpenGL、OpenGL ES和其他图形类API高效互通。

    OpenCL是由苹果首次提出的,随后Khronos Group成立相关工作组,以苹果草案为基础,联合业界各大企业共同完成了标准制定工作。工作组的26个成员来自各行各业,且都是各自领域的领导者,具体包括3DLABS、 Activision Blizzard、AMD、苹果、ARM、Barco、博通、Codeplay、EA、爱立信、飞思卡尔、HI、IBM、Intel、 Imagination、Kestrel Institute、摩托罗拉、Movidia、诺基亚、NVIDIA、QNX、RapidMind、三星、Seaweed、TAKUMI、德州仪器、瑞典于默奥大学。

    标准倡导者苹果将是最先应用OpenCL技术的厂商之一,代号Snow Leopard的新版操作系统Mac OS X 10.6就会集成该标准。相比之下,微软没有参与OpenCL的制定工作,Windows自然也不会提供支持,不过DirectX 11有类似的Computer Shader技术,很可能会重演DirectX与OpenGL之战。

    同时,AMD Stream SDK、Codeplay Sieve C++等进行改革,适配OpenCL 1.0标准,NVIDIA的CUDA技术也借机大展拳脚。

     

    OpenCL 3.0 的 C++ 内核

    在 OpenCL 3.0 中,OpenCL 工作组已经从最初在 OpenCL 2.1 中定义的原始 OpenCL C++ 内核语言过渡,推荐社区 OpenCL开源前端编译器开发C++,提供改进的功能和与 OpenCL C 兼容性的开发人员,使用 C++17 编写内核程序。

     

     C++ for OpenCL 结合了 OpenCL 和 C++17 的功能

    C ++针对OpenCL是支持和使用LLVM编译器基础设施。在 Clang 中的实现,通过OpenCL 支持进行跟踪。使开发人员能够使用 OpenCL 内核中的大多数 C++17 功能,通过离线编译越来越多的 OpenCL,实现摄取的 SPIR-V 中间表示形式生成代码。

    基本概念

    OpenCL程序分为两部分。

    l  在主机(以CPU为核心)上运行

    l  在设备(以GPU为核心)上运行

    设备有一个或多个计算单元,计算单元又包含一个或多个处理单元。在设备上运行的程序被称为核函数。但是对于核函数的编写,CUDA一般直接写在程序内,OpenCL是写在一个独立的文件中,并且文件后缀是.cl,由主机代码读入后执行,这一点OpenCL跟OpenGL中的渲染程序很像。

     

     OpenCL平台由两部分组成,宿主机和OpenCL设备:

    宿主机Host: CPU,扮演组织者的角色。包括kernel、kernel上下文、NDRange和队列等;队列控制着kernel如何执行,以及何时执行等。

    设备Device:计算设备,可以是CPU、GPU、DSP或硬件提供以及OpenCL开发商支持的任何处理器。

    SIMT(Single Instruction Multi Thread): 单指令多线程,GPU并行运算的主要方式,很多线程同时执行相同的运算指令,每个线程的数据有所不同,但执行的操作一致。

    核函数(Kernel):在设备程序上执行运算的入口函数,在主机上调用。

    工作项(Work-item): 类似于CUDA中的线程(Threads),多个工作项(线程)执行同样的核函数,每个Work-item都有一个ID号,通过ID号来区分处理数据。

    工作组(Work-group):类似于CUDA中的线程块(Block),多个工作项组成一个工作组,Work-group内Work-item可以通信和协作。

    ND-Range: 类似于CUDA中的网格,定义了Work-group的组织形式。

    上下文(Context):整个OpenCL的运行环境,包括Kernel、Device、程序和内存。

    设备:OpenCL程序调用的计算设备。

    内核:在计算设备上执行的并行程序。

    程序:内核程序的源代码(.cl文件)和可执行文件。

    内存:计算设备执行OpenCL程序所需的变量。

    人工智能芯片与自动驾驶
  • 相关阅读:
    eclipse加载maven工程提示pom.xml无法解析
    tensorflow入门——5tensorflow安装
    tensorflow入门——3解决问题——4让我们开始吧
    神经网络入门——12梯度下降代码
    神经网络入门——11梯度下降算法
    如何避免梯度下降到局部最小值
    神经网络入门——10.梯度下降
    神经网络入门——9.简单神经网络
    神经网络入门——8XOR感知器
    神经网络入门——7or 感知器
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14939733.html
Copyright © 2011-2022 走看看