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系列博文的第二 ...
随机推荐
- axios传递参数的使用
今天在学习elasticsearch时,遇到一个问题:项目中前端采用的是Vue2+axios,后端的接口采用Restful风格来接收: 关于Resultful风格: 1. GET(SELECT):从服 ...
- 【Keepalived】KP + NGINX 多机热备学习
案例搭建 环境是三台机器,两台也可以 最后一个IP是测试的VIP 192.168.124.21 centos6-1 192.168.124.22 centos6-2 192.168.124.23 ce ...
- 【Kafka】03 Shell 操作
查看Kafka主题列表 $KAFKA_HOME/bin/kafka-topics.sh \ --zookeeper centos7-02:2181,centos7-03:2181,centos7-04 ...
- 【Hibernate】Re08 加载策略配置
一.关联查询的问题: 使用关联查询,例如简单的一对多关系查询,查出一个部门对象和对应的N个员工对象. 如果一般情况下,我们只是需要部门对象,并不关系关联的员工对象,那么Hibernate关联查询出来的 ...
- 【Layui】04 导航 Nav
文档地址: https://www.layui.com/doc/element/nav.html 演示案例: <ul class="layui-nav" lay-filter ...
- P6764 [APIO2020] 粉刷墙壁
思路: 本质上能进行的操作就是我们算出从第 \(i\) 块砖开始,连续刷 \(M\) 块砖,是否有承包商可以刷出期望颜色. 那么设 \(f_i\) 表示 \([i,i+m-1]\) 是否合法,那么就变 ...
- 人形机器人从人类演示(demenstration)数据中学习人类行为(behavior)的几种方式
人形机器人从人类演示(demenstration)数据中学习的几种方式 使用仿真环境,在仿真环境中生成近似人类的行为数据,然后利用仿真生成的数据训练机器人. 该种方式最为传统,也最为易行,但是由于仿真 ...
- ubuntu 配置NTP时间服务器&&定时同步本地时间
Ubuntu系统: NTP时间服务器的安装: 服务器安装命令: sudo apt-get install ntp NTP服务配置,设置为本地时间服务器,屏蔽默认server,服务器层级设为10: vi ...
- 运用Npcap库实现SYN半开放扫描
Npcap 是一款高性能的网络捕获和数据包分析库,作为 Nmap 项目的一部分,Npcap 可用于捕获.发送和分析网络数据包.本章将介绍如何使用 Npcap 库来实现半开放扫描功能.TCP SYN 半 ...
- ARM架构及ARM指令集、Thumb指令集你了解多少?
https://www.sohu.com/a/339622340_100281310 1991 年ARM 公司成立于英国剑桥,在成立后的那几年,ARM业绩平平,工程师们也人心惶惶,害怕随时都会失业.在 ...