OpenCL是啥,查了半天没看懂,能简单明了的告诉我是干啥的有啥功能吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCL是啥,查了半天没看懂,能简单明了的告诉我是干啥的有啥功能吗相关的知识,希望对你有一定的参考价值。

OpenCL是GPU通用运算API。是显卡作通用浮点运算的API。比如视频转码,原来这个工作都是CPU来做的。现在显卡运算能力比较强,这个工作完全可以交给显卡来做。

要调用显卡,这个工作不需要再由程序员考虑了,因为已经有一个现成的接口了,程序员只要管好转码的算法,然后直接调用OpenCL中现成的指令,这个工作就自动由CPU转交到GPU了。

OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器形成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和数据分割的并行计算机制。

OpenCL类似于另外两个开放的工业标准OpenGL和OpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。OpenCL由非盈利性技术组织Khronos Group掌管。

扩展资料

API之主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象。

应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。[1]

参考资料来源 OpenCL_百度百科

参考技术A

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

用于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码。

广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

你可以这样理解,把写程序当成做饭,你需要做蛋炒饭,OpenCL就相当于鸡蛋,炒饭。你不必把母鸡养大,然后等它下蛋,你也不必去种地,等大米成熟。无论你想做蛋炒饭,西红柿炒鸡蛋,直接拿来用就好了。

程序员在写程序时,会遇见写重复代码的情况,一段代码比较常见,需要经常用到它,那就把它单独拿出来,用的时候,直接放进去就好了,不用再重新写,大大减少了工作量。

扩展资料

在这里汇总一些OpenCL的基本概念,包括设备、核函数、主机、平台等,把这些概念跟CUDA类比,理解起来就很容易了。

设备(Device): GPU及其显存组成的计算系统。

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

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

工作项(Work-item): 跟CUDA中的线程(Threads)是同一个概念,N多个工作项(线程)执行同样的核函数,每个Work-item都有一个唯一固定的ID号,一般通过这个ID号来区分需要处理的数据。

工作组(Work-group):跟CUDA中的线程块(Block)是同一个概念,N多个工作项组成一个工作组,Work-group内的这些Work-item之间可以通信和协作。

ND-Range: 跟CUDA中的网格是同一个概念,定义了Work-group的组织形式。

主机(Host): CPU及其内存组成的计算系统。

品台(Platform): 主机和OpenCL管理框架下的若干个设备构成了一个品台,所有GPU操作都限定这这个选择的Platform上运行。OpenCL编程的第一步就是选择并初始化一个平台。

上下文(Context): 定义了整个OpenCL的运行环境,包括Kernel、Device、内存管理和指令队列等。

指令队列(Command-Queue): 一些需要在设备上执行的OpenCL指令的集合。

参考资料来源:百度百科-OpenCL

参考技术B OpenCL和OpenGL是两个不同的API。
OpenGL是3D API。
OpenCL是GPU通用运算API。

要理解什么是OpenCL,首先要明确一下什么叫API(应用程序接口)。

API是已经开发好的一些函数。

举个简单的例子。

比如编写一个程序,其中有一个步骤要将运算的内容输出到打印机上。那么为了这个步骤,得写一大堆程序,包括如何调用打印机的驱动,为硬件分配I/O地址等等。相当繁锁。

OK,现在这个程序写好了,要开发第二个程序了。结果发现,第二个程序中,也有一个步骤是要把内容打印出来的。那么就没必要再把程序重新写一遍了,直接把第一个程序中这个函数复制过来就好了。

久而久之,大家干脆把一些常用的函数给独立出来,就是API。这样,所有软件,无论是WORD、WPS、PHOTOSHOP还是其他软件,都不需要费事单独去写这段代码了,直接从API里调用就好。这样一来,不仅开发过程简化了,程序本身也更精练了。

那么OpenGL或DirectX是什么呢?是负责3D图形处理的API,包括各种光照、纹理、烟雾、阴影等效果。程序员在开发游戏的时候,只要考虑什么时候、在哪个位置,加上什么样的烟雾,就可以了。而不必考虑究竟要怎样去编写代码,才能实现烟雾效果的问题。

OpenCL呢?是显卡作通用浮点运算的API。比如视频转码,原来这个工作都是CPU来做的。现在显卡运算能力比较强,这个工作完全可以交给显卡来做。那究竟怎样调用显卡呢?这个工作不需要再由程序员考虑了,因为已经有一个现成的接口了,程序员只要管好转码的算法,然后直接调用OpenCL中现成的指令,这个工作就自动由CPU转交到GPU了。

说得有点复杂,也不是很严谨,但大概意思就是这样的,不知道题主看明白了没。本回答被提问者采纳
参考技术C 做异构计算的。你可以把异构理解为对设备进行抽象。就像我们编程会对类和方法进行封装抽象一样。这个东西可以对设备进行抽象,就是说不管你是gpu啦,cpu啦,还是说你接入了一些fpga、dsp这样的设备;他都可以通过标准化配置,把他们视为一个组(group),然后给其中一个设备分配控制权(通常是cpu来担任此角色),协同一起进行计算。
也就是说,你用不在意“cpu应该怎么做”、也不用关心“gpu又该怎么做”,更不用在意“如果我想让cpu和gpu‘交火’,他们应该如何协调”。OpenCL帮你搞定这些细节。
更通俗点讲,就是它为你提供方法组件你的“智囊团”,但你不用过于关心里面成员各自的特性。
题外话:这东西我记得最早可以说是从OpenGL延伸来的,那个时候CPU的算力有限,一些先驱探索者们,尝试用一些小把戏,通过OpenGL的接口,达到“让它帮我计算,但却不需要渲染图形”的目的。久而久之,这样的需求促使了这个标准的诞生和发展。(不知道有没有记错。。。)所以现在你看到了,我们不仅可以“让GPU帮我计算,但不用渲染”,还可以“让各种不同特性不同风格的设备联合在一起帮我计算”,而你不用关心他们内部如何协作。——如果要让你亲自来协调多种设备高效协作计算,那对开发者而言门槛无疑是很高的;因为光是在一个CPU以外的设备上好好执行计算已经颇有难度了,更别提还有一些开发者可能在CPU上用多线程都会出各种问题。
参考技术D OpenGL吧. 图形运算接口 和DirectX类似。 但是现在大部分游戏都是用DirectX来渲染的. OpenGL现在更多用于专业绘图 图形站。 一部分游戏还是会用到 . 目前DirectX是民用主流就是了.

以上是关于OpenCL是啥,查了半天没看懂,能简单明了的告诉我是干啥的有啥功能吗的主要内容,如果未能解决你的问题,请参考以下文章

请问列表和元组.怎么学.我看了半天没看懂怎么用,这个有啥用,求解谢谢

一笔画探索

四元数入门(简单容易理解)

SQL语句中的Group by的学习

Leetcode第242场周赛总结+题解

Django惰性加载和LazyObject