如何仿制wordpress网站,温州哪里做网站设计,dw网站开发,台州seo快速排名什么是OpenCL#xff1f;
1.概述
OpenCL(Open Computing Language 开放计算语言)是一种开放的、免版税的标准#xff0c;用于超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中各种加速器的跨平台并行编程。OpenCL是由Khronos Group创建和管理的。OpenCL使应用程序…什么是OpenCL
1.概述
OpenCL(Open Computing Language 开放计算语言)是一种开放的、免版税的标准用于超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中各种加速器的跨平台并行编程。OpenCL是由Khronos Group创建和管理的。OpenCL使应用程序能够使用系统或设备中的并行处理能力从而使应用程序运行得更快、更流畅。
2.OpenCL是如何工作的
OpenCL是一种编程框架和运行时它使程序员能够创建称为内核程序(或内核)的小程序这些程序可以在系统中的任何处理器上并行编译和执行。处理器可以是不同类型的任意组合包括cpu、gpu、dsp、fpga或张量处理器——这就是为什么OpenCL经常被称为异构并行编程的解决方案。OpenCL框架包含两个api。platform layer API在主机CPU上运行首先用于使程序能够发现系统中可用的并行处理器或计算设备。通过查询哪些计算设备可用应用程序可以在不同的系统上便携地运行—适应加速器硬件的不同组合。一旦发现了计算设备platform layer API就允许应用程序选择并初始化它想要使用的设备。第二个API是Runtime API它使应用程序的内核程序能够为它们将要运行的计算设备编译并行加载到这些处理器上并执行。一旦内核程序完成执行将使用Runtime API收集结果。 为了更好使用与不同的处理器OpenCL抽象出来了四大模型 平台模型描述了OpenCL如何理解拓扑连接系统中的计算资源对不同硬件及软件实现抽象方便应用于不同设备存储模型对硬件的各种存储器进行了抽象执行模型程序是如何在硬件上执行的编程模型数据并行和任务并行
3.平台模型 OpenCL中需要一个主机处理器Host一般为CPU。而其他的硬件处理器多核CPU/GPU/DSP等被抽象成Compute Device。每个Compute Device 包含多个 Compute Unit每个Compute Unit 又包含多个Processing Elements处理单元举例说明计算设备可以是GPU计算单元对应于GPU内部的流多处理器streaming multiprocessors(SMs)处理单元对应于每个SM内部的单个流处理器。处理器通常通过共享指令调度和内存资源以及增加本地处理器间通信将处理单元分组为计算单元以提高实现效率。
4.存储模型 OpenCL中定义了不同类型的存储区域 Host memory主机CPU可用可以通过直接传输/共享内存的方式与设备端进行数据传输 Global/Constant memory对计算设备上的所有计算单元可用 Local memory对计算单元中所有处理单元可用的 Private memory对单个处理单元可用在硬件实现上通常映射为寄存器 在 OpenCL 中全局存储器中的数据内容通过存储对象来表示Memory Object在 OpenCL 中较为常用的两个存储对象为Buffer Objects 和 Image Objects
5.执行模型
主机应用程序使用OpenCL命令队列将内核和数据传输函数发送到设备以执行。通过将命令入队到命令队列中内核和数据传输函数可以与应用程序主机代码并行异步执行。
重要概念
Context每个Context支持多个DeviceHost端通过Context与Device端进行交互和管理Commend QueueHost端发送命令到队列中让Device端去执行顺序乱序执行都行一个命令队列只能管理一个设备。Kernel ObjectsOpenCL核心计算部分类似C语言的代码。在需要设备执行计算任务时数据会被推送到Device端然后Device端的计算单元会并发执行内核程序Program ObjectsKernel Object的集合OpenCL中可以使用cl_program表示
执行流程
查询可用的OpenCL平台和设备在平台上为OpenCL设备创建一个context在context上为OpenCL设备创建并编译程序选择kernel去执行程序为内核创建为其操作的内存对象在一个OpenCL Device上创建一个命令队列去执行命令如果需要将数据传输命令排队到内存对象中将内核排队到命令队列中去执行如果需要将命令入队以便将数据传输回主机
高效并行计算
为了提高执行效率处理器通常会将处理元素分组为计算单元。因此当使用clEnqueueNDRangeKernel命令时程序指定了一个工作组大小该工作组大小表示可以在计算单元上容纳的nrange中的单个工作项组。相同工作组中的工作项能够共享本地内存使用工作组屏障更容易地同步并使用工作组函数(如async_work_group_copy)更有效地合作这些在单独工作组中的工作项之间是不可用的。
6.编程模型
OpenCL 定义了两种不同的编程模型任务并行和数据并行。
数据并行划分计算数据分配给不同的计算单元进行同时计算适用于数据相互独立的计算任务。任务并行计算步骤的每一个步骤有前后依赖这使得我们无法将计算任务并行执行。于是我们只能对每一个步骤的数据进行并行之后将整个流程进行异步/同步串行执行为了协调整个流程的先后关系OpenCL 提供了Event 机制用来进行流程同步控制。