OpenCL架构
OpenCL提供了一种统一的编程接口,使得程序员可以编写一次代码,然后在多种处理器上运行。
平台模型
- OpenCL平台总是包括一个宿主机(host)。宿主机与OpenCL程序外部的环境交互,包括I/O或与程序用户的交互。宿主机与一个或多个OpenCL设备连接。OpencL设备通常称为计算设备,设备可以是CPU,GPU、DSP或硬件提供以及OpenCL开发商支持的任何其他处理器。
- OpenCL进一步划分为计算单元,而计算单元还可以进一步划分为一个或多个处理单元。
执行模型
执行模型主要指出内核如何执行,它们与宿主机如何交互,以及它们与其他内核如何交互。主要目的是宿主机如何利用OpenCL设备的计算资源完成高效的计算处理过程。这也是一个“以硬件为中心”的模型。
- OpenCL应用由两个不同部分组成:宿主机程序(host program)和一个或多个内核(kernel)组成的集合。
PS:内核通常指的是一些简单的函数,将输入内存对象转换为输出内存对象。 - OpenCL定义了两类内核:
- OpenCL内核:用OpenCL C编程语言编写并用OpenCL编译器编译的函数。所有OpenCL实现都必须支持OpenCL内核。
- 原生内核:OpenCL之外创建的函数,在OpenCL中可以通过一个函数指针来访问。
内存模型
目的是解决宿主机(Host)和OpenCL设备怎么处理数据
OpenCL定义了两种类型的内存对象:缓冲区对象和图像对象。
缓冲区对象: 就是内核可用的一个连续的内存区。
图像对象: 图像对象仅限于存储图像,图像内存对象是一个不透明的对象,图像对象的内容对于内核程序是隐藏的。
OpenCL内存模型定义了5种不同的内存区域,分别是:宿主机内存、全局内存、常量内存、局部内存和私有内存。
编程模型
使用编程模型将并行算法映射到OpenCL。
OpenCL定义了两种不同的编程模型:任务并行和数据并行
数据并行编程模型:
数据并行关注于在多个处理器核心之间同时执行相同的操作,但处理不同的数据元素。数据并行模型中一个任务分解成针对数据集各元素的多个相同子任务。然后将这些子任务分配给不同的处理核心。。例如:一个数组中的所有元素分别乘以2,在这种情况下,我们可以让许多个处理器并行计算,一个处理器负责一个数组元素的乘法运算。数据并行更适用于那些需要对大量数据执行相同操作的任务。任务并行编程模型:
任务并行关注于在多个处理器核心之间执行不同的任务。每个核心运行一个独立的、不同的任务,但可能共享某些资源(比如内存)。这种并行模式有助于在多核处理器系统上提高吞吐量。任务并行更适用于那些一组组相互独立、没有什么相关性或直接联系的计算任务。
个人理解编程模型:其实就是将从CL代码中创建程序对象并编译,在运行时创建kernel(相关函数)对象以及内存对象,设置好相关的参数和输入之后,就可以将kernel送入到队列中执行,最终等待运算结束,获取计算结果即可。
其他编程模型
程序员完全可以结合OpenCL的编程模型来创建各种复合编程模型。
OpenCL架构的更多相关文章
- CUDA与OpenCL架构
CUDA与OpenCL架构 目录 CUDA与OpenCL架构 目录 1 GPU的体系结构 1.1 GPU简介 1.2 GPU与CPU的差异 2 CUDA架构 2.1 硬件架构 2.1.1 GPU困境 ...
- 从零開始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零開始做OpenCL开发>系列文章的 ...
- 从零开始学习OpenCL开发(一)架构
1 异构计算.GPGPU与OpenCL OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片 异构计算(heterogeneous)的标准,它是跨平台的.旨在充分利用GPU ...
- 从零开始学习OpenCL开发(一)架构【转】
转自:http://blog.csdn.net/leonwei/article/details/8880012 多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/ ...
- 【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零开始做OpenCL开发>系列文章的 ...
- GPU 的硬件基本概念,Cuda和Opencl名词关系对应
GPU 的硬件基本概念 Nvidia的版本: 实际上在 nVidia 的 GPU 里,最基本的处理单元是所谓的 SP(Streaming Processor),而一颗 nVidia 的 GPU 里,会 ...
- macOS的OpenCL高性能计算
随着深度学习.区块链的发展,人类对计算量的需求越来越高,在传统的计算模式下,压榨GPU的计算能力一直是重点. NV系列的显卡在这方面走的比较快,CUDA框架已经普及到了高性能计算的各个方面,比如Goo ...
- 一文说清OpenCL框架
背景 Read the fucking official documents! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: 对不 ...
- OPenCL
OpenCLhttp://baike.baidu.com/link?url=7uHWCVUYB3Sau_xh3OOKP-A08_IvmT1SJixdAXKezCuCfkzeSQDiSmesGyVGk8 ...
- OpenCV整体的模块架构
之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二 ...
随机推荐
- sharding-jdbc 兼容 MybatisPlus的动态数据源
背景:之前的项目做读写分离的时候用的 MybatisPlus的动态数据做的,很多地方使用的@DS直接指定的读库或者写库实现的业务:随着表数据量越来越大,现在打算把比较大的表进行水平拆分,准备使用 Sh ...
- docker nginx容器的均衡负载
创建三个docker容器以实现nginx的负载均衡 编写nginx的dockfile [root@docker nginx]# cat Dockerfile FROM nginx RUN echo ' ...
- 【RabbitMQ】09 深入部分P2 消费限流 & TTL
1.消费限流设置 就是设置项的2个调整,当然还有前面的手动确认的监听改动处理 https://www.bilibili.com/video/BV15k4y1k7Ep?p=26 2.消息过时设置 TTL ...
- 【Vue】Re06 组件化
将一个应用页面拆分成若干个可重复使用的组件 一.Vue的组件的使用步骤: 1.创建组件构造器 2.注册组件 3.使用组件 <!DOCTYPE html> <html lang=&qu ...
- 失温急救处理方法——1.快速复温;2.心肺复苏;3.口服或静脉注射生理盐水(40 ~ 42 ℃ ,小剂量250 mL);4.口服或静脉注射抗血栓药物,如布洛芬
相关: https://haokan.baidu.com/v?pd=wisenatural&vid=14530104659934311010 参考: https://m.bjnews.com. ...
- 最为期待的国产3D游戏 —— 3A大作 ——《黑神话:悟空》
地址: https://www.heishenhua.com/
- 【转载】 CNN训练Cifar-10技巧
原文地址: https://www.cnblogs.com/neopenx/p/4480701.html ====================================== 关于数据集 Ci ...
- Error occurred while running `from pyglet.gl import *`HINT: make sure you have OpenGL install. On Ubuntu, you can run 'apt-get install python-opengl'.
安装mujoco后运行可视化界面代码报错: Error occurred while running `from pyglet.gl import *`HINT: make sure you have ...
- Debian/ubuntu系统的开机自启动服务的设置——update-rc.d: error: XXX Default-Start contains no runlevels, aborting.
最近把自己的树莓派搞了起来,搭了个上网的共享热点,但是遇到了开机自启动的设置问题. 我们先给出正常的ubuntu系统的开机自启动服务的设置: 在 /etc/init.d/ 路径下面创建自启动的shel ...
- java:找不到符号(使用lombok)
1.背景 启动报错: Error:(76, 34) java: 找不到符号 符号: 方法 getOrderNo() 位置: 类型为XXXXX.request.coupon.SubmitOrderObj ...