![](https://img-blog.csdnimg.cn/20190910064538641.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
浅谈OpenCL
Opencl为并行计算架构,支持GPU,CPU,NPU等多种模块,学习opencl 总结
Huo的藏经阁
linux爱好者,平时喜欢阅读内核源码,从源码角度解开操作系统神秘面纱
展开
-
Opencl cl_khr_fp16
Opencl扩展功能cl_khr_fp16为支持半精度运算打开方式为:#pragma OPENCL EXTENSION cl_khr_fp16 : enable支持标量和矢量半精度运算支持的矢量格式为:具体cl_khr_fp16支持的特性可以查看官方资料https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/x...原创 2019-12-06 11:17:34 · 1069 阅读 · 0 评论 -
OpenCL扩展
OpenCL扩展是指device支持某种特性,但这中特性并不是OpenCL标准的一部分。通过扩展,厂商可以给device增加一些新的功能,而不用考虑兼容性问题。现在各个厂商在OpenCL的实现中或多或少的使用了自己的扩展。转载 2019-12-06 11:11:26 · 632 阅读 · 0 评论 -
浅谈opencl之错误码
opencl采用了统一的错误码,各个API通用Error Description CL_SUCCESS Command executed successfully without error. CL_DEVICE_NOT_FOUND No OpenCL devices found matching criteria. CL_DEVICE_NOT_AVAILABLE...原创 2019-08-24 15:52:10 · 2206 阅读 · 0 评论 -
浅谈OpenCL之 应用程序总体步骤思路
一般Opencl 应用程序步骤,为了保证原英文意思 没有翻译中文:1:Query which platforms are present.2: Query the set of devices supported by each platform: a. Choose to select devices, using clGetDeviceInfo(), on specific...原创 2019-08-24 15:10:19 · 348 阅读 · 1 评论 -
浅谈OpenCL之Platform API(2)
OpenCL Contextscontext是贯串 opencl 程序的核心,也是host 与device 交互的唯一通道,是内存申请维护,命令队列的创建等功能的基础。不同的plaform,可以申请不同的context,不同的context内的内存不能直接共享,在同一个context下的 不同device的内存是相同的,可以相互访问。创建Contexts API 有两个:cl_c...原创 2019-08-24 10:06:40 · 6918 阅读 · 0 评论 -
浅谈OpenCL之Platform API(1)
Platform API 为opencl 初始化首先要使用的API,主要是获取到platform 以及device。OpenCL Platformsopencl 应用程序第一步首先就是要查询opencl platform,并选择为应用程序选择相应的平台,其API为:cl_int clGetPlatformIDs (cl_uint num_entries, cl_platform_id ...原创 2019-08-21 19:18:04 · 26671 阅读 · 0 评论 -
Intel OpenCL + Ubuntu安装
因为项目采用Intel开发平台,需要安装Opencl,注意Intel 的OpenVINO开发平台并没有包括Opencl安装,另外安装Intel Opencl SDK. 注意作者本人环境是Ubuntu 16.04,操作系统不是安装到虚拟机环境中,因为虚拟机不能访问到GPU硬件资源OpenCL Base on CPU or GPU因特尔的opencl sdk CPU和GPU是分开的,如下图所示...原创 2019-08-20 19:24:02 · 6543 阅读 · 3 评论 -
浅谈opencl之整体框架
结合四大模型,以CPU和GPU平台为例子,opencl整体框架如下:CPU为host端, GPU为device端, host和device端的交互是以context为主。context贯穿到整个opencl程序的过程,是opencl交互基础。首先以conext创建programs, kernel程序有两种方式一种是以字符串的形式,另外一种是以二进制方式,最后通过program提交到GPU上...原创 2019-08-04 10:31:38 · 379 阅读 · 0 评论 -
浅谈OpenCL之API分类
OpenCL为应用开发提供了丰富的API,按照其四大模型其API主要分为以下三类:Platform API平台API主要是由HOST调用,可以用来查询opencl plaftform, device,以及在指定的device上创建context,可以理解为opencl的控制端,经常用在host端opencl初始化部分,查找合适的平台和device运行opencl 代码。Runtime ...原创 2019-08-04 09:56:02 · 516 阅读 · 0 评论 -
浅谈Opencl四大模型之Programming Model
Opencl 平台模型解决了 硬件兼容问题,将各种硬件抽象成了模型;执行模型解决了opencl程序如何运行的问题;内存模型解决了opencl 内存管理 问题,而编程模型(programming model)解决的是如何将算法变为opencl程序问题。opencl四大模型是其主要利器,有效解决了并行编程的各种问题。OpenCl编程模型主要包含数据并行(data parallelism)和任务并行...原创 2019-07-31 16:02:47 · 1015 阅读 · 0 评论 -
浅谈Opencl四大模型之Memory Model
运行模型(execution model)讲述了一个kernel怎么样在opencl平台运行,host喝kernel如何交互的,kernel代码如何编译的等等,但是没有涉及到opencl内存的管理方式, opencl的内存模型(memory model)主要讲述了opencl 内存组织架构,device和host内存分别是如何管理的,以及device与host之间数据如何交互的。Opencl的内存...原创 2019-07-30 19:20:27 · 1783 阅读 · 0 评论 -
浅谈OpenCL四大模型之Execution Model
OpenCL执行模型(Execution Model)解释了opencl程序是如何运行的,是理解opencl的基础。OpenCL程序Opencl应用程序一般分为host部分和kernel部分组成,它与平台模型紧密联系。Host部分的代码主要是运行在host,主要作用是对Opencl进行初始化,创建context以及命令通道,提交命令,copy数据到device上等功能。Kernel...原创 2019-07-29 20:05:21 · 1582 阅读 · 0 评论 -
浅谈Opencl四大模型之Platform model
Opencl是一种典型的异构架构,可以很好的实施并发性,为了简化并行计算复杂度以及兼容各个芯片差异性,opencl将其抽象为四大模型(Platform model, Execution model,Memory model 以及Programming model),它是整个opencl的基础部分。可以说 opencl很好的兼容CPU,GPU和DSP fpga等芯片。最近几十年并行计算发展一直处...原创 2019-07-28 10:38:21 · 1038 阅读 · 0 评论 -
浅谈Opencl之Image和Buffer 区别
Opencl 定义了两者不同的内存对象:Image和Buffer,用于管理对全局变量的存取。Buffer对象Buffer对象类似于C语言中由malloc申请的数组, 存储的数据对象为连续内存,主要特点:1:针对的是一维数据。2:为一片连续内存。3:支持的数据类型较多,也可以使用自定义的数据结构。4:支持线性随机读取,可读可写5:对二维三维数据需要转换成一维,访问...原创 2019-07-21 15:25:00 · 2525 阅读 · 0 评论 -
浅谈Opencl之OpenCL_flush 和 finish区别
Opencl中clfinish和clflush主要用于命令之间的同步,两者之间还是存在区别。clfinish()函数是一直堵塞直到命令队列中的所有命令执行完毕,保证在hos执行下一步之前,命令队列中的所有执行命令都在GPU执行完毕,通常用在下一步要执行的结果需要上一步的计算结果场景。clFlush()堵塞直到命令队列中的所有命令被移出队列,这意味着这些命令已准备就绪但无法保证执行完毕。...原创 2019-07-21 10:26:52 · 2536 阅读 · 0 评论 -
OpenCL_Barrier同步
并行计算编程模型中分为数据并行和任务并行两种,其中数据并行就是指当大量的数据执行相同的操作,并且这些数据关联度很多,OpenCL 通过在多个work item上执行相同指令,完成指定计算。任务并行是指NDRange内的每个work item执行kernel时,与其他的节点相互独立的,可以执行不同的指令,因此任务并行可以通过定义多个kernel来实现。 不管是数据并行和任务并行有时...原创 2019-07-16 11:43:41 · 2895 阅读 · 4 评论 -
OpenCL 数据类型
原创 2019-07-12 09:52:15 · 470 阅读 · 0 评论