当前位置: 首页 > news >正文

Intel oneAPI笔记--oneAPI简介、SYCL编程简介

oneAPI简介

Intel oneAPI是Intel提供的统一编程模型和软件开发框架。 它旨在简化可充分利用英特尔各种硬件架构(包括 CPU、GPU 和 FPGA)的应用程序的开发

oneAPI一个重要的特性是开放性,支持多种类型的架构和不同的硬件供应商,是一种统一的编程模型。使得开发人员拥有可以选择最佳硬件来做加速计算的自由,不用锁定某些厂商专有的硬件即可提高软件的开发生产力,并且获得与硬件加速设备相匹配的性能

随着大数据到来,仅仅依靠CPU平台的计算是不够的,使得不同种类的计算加速设备出现,比如:GPU、FPGA......但这些加速设备的引用也给应用程序的开发带来一个问题,如果想要从某个特定的计算加速设备切换到另一个厂商的另外一个加速设备,会带来非常大的工作量和开销,oneAPI这种统一变成模型的提出就是为了解决这个问题,它希望有一种统一的编程语言,有一种统一接口的库函数使得应用程序在不同硬件加速设备迁移的时候,所付出的代价可以达到最小

上图描述了异构计算软件生态现状,可以看出没有一个在总体上占优势的厂商,而是处于一种分散的状态。比如在AI的模型训练主要占主导地位的还是英伟达的一些库,高性能计算领域主导的还是英伟达的GPU

什么是异构计算?首先计算单元可以分成:通用计算单元(CPU),专用计算单元(GPU)等,简单说就是由一个或若干个通用计算单元加一个或若干个专用计算单元构建的系统就是异构计算系统,由两者协同起来共同执行通用计算任务就是异构计算,异构计算的目的一般是加速和节能,在过去GPU只能执行图形任务,现在GPU已经具备了通用计算的能力,和CPU协同工作就组成了一个异构计算系统。有了硬件的实现,同样需要软件的支持,目前比较流行的编程语言是C++AMP/OPENCL/CUDA

oneAPI有两种编程模型,第一种是直接编程(Direct Programming)有统一的编程语言SYCL,它是基于C++标准的编程语言。另一种是基于库的编程(API-Based Programming)。对于Level 0,这个跟硬件加速设备打交道的层上,如果硬件厂商实现了这层接口,那么它的设备就可以被oneAPI上层的框架使用

SYCL是由Khronos Group提供的一个开放的标准,主要是为了针对异构计算领域。标准C++是主机端适用的一个标准,针对异构计算领域,C++在不同种类的硬件加速设备的设备端的部分是没有提及的,SYCL就弥补了C++在异构计算领域硬件加速设备的缺失。SYCL是标准的C++,没有针对不同硬件有语法上的扩展。下图是SYCL和CUDA源代码在不同硬件设备上的比较

SYCLomatic是oneAPI产品里面的CUDA开源的迁移工具,所有源代码在github上:github.com/oneapi-src/SYCLomatic。

有的部分在CUDA源代码里面有,但是在迁移后的SYCL源代码里面没有,则会以注释的形式标记出来,程序员需要人工修改

通过上面的介绍,我们就可以知道,在不同的计算领域里面,可以使用不同的Intel oneAPI开发包,可以使得程序运行在不同种类的计算加速设备上面,比如在高性能计算、人工智能、嵌入式等领域都有oneAPI相应的工具包

oneAPI工具包简介

Intel® oneAPI Base Toolkit是基础工具套件,直接编程包括Intel® oneAPI DPC++/C++ Compiler,Intel® oneAPI DPC++ Compatibility Tool,Intel® Distribution for Python,Intel® FPGA Add-on for oneAPI Base Toolkit,API编程包括Intel® oneAPI DPC++ Library oneDPL等库,分析调试工具包括Intel® VTune Profiler,Intel® Advisor等

除了基础工具套件之外,还有其它工具包,比如高性能计算、物联网、渲染、人工智能等领域,可以在官网查看:

https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html

SYCL编程简介

CPU端也称Host端,异构平台上面的其它硬件加速器称为Device端,SYCL应用程序分为在主机端执行的部分和在设备端执行的部分,主机端就在CPU运行,设备端是要由主机端的CPU递交给某一个设备,递交的过程是通过Command Queue模块去做

一个程序分为Host code和Device code,其中后者又总被称为Kernel

一个程序分为很多scope,比如Application scope,Command group scope,Device scope,不是所有的C++的内容适用于Device scope

buffer对象包含了服务于不同种类计算设备的每个数据临时存储的一块空间

queue对象很重要的目的就是递交计算任务

buffer对象可以通过调用get_access,使buffer的数据可以传到针对这个硬件设备的数据区域上

handler对象调用parallel_for去执行设备端的计算任务,通常与lambda函数搭配使用

SYCL有两个内存模式

一是Buffer Memory Model(BMM)内存模式,是使用buffer对象的一种方式,如下图

使用malloc_shared函数创建指针变量,可以使用另一种Unified Shared Memory(USM)内存模式,即CPU,GPU共享一片内存区域,在这种模型之下,parallel_for需要通过queue对象调用,并在最后使用wait函数,是因为,虽然CPU和GPU共享内存,但在一个时间段内,只能有一个访问

演示一个完整的SYCL程序(USM内存模式):

#include<CL/sycl.hpp>
constexpr int N=16;
using namespace sycl;
int main(){
queue q;
int *data=malloc_shared<int>(N,q);
q.parallel_for(N,[=](auto i){
data[i]=i;
}).wait();
for(int i=0;i<N;i++)std::cout<<data[i]<<’\n’;
free(data,q);
return 0;
}

device类描述硬件加速器,一个重要的接口是可以获取设备相关信息,可以通过这个设备信息创建设备选择器从而更好地选择设备,此外,queue的创建不需要参数,所以如果想要知道queue对应于异构计算平台的哪一个设备,就只能使用device类

device_selector包含default_selector,cpu_selector,gpu_selector,如果使用default_selector去创建queue,那么设备的选择就全部交给了SYCL内部的策略,比如:

default_selector selector;
queue q(selector);
std::cout<<”Device: “<<q.get_device().get_info<info::device::name>()<<std::endl;

queue对象用于CPU和GPU信息交换

举一个handle对象调用parallel_for的例子:

h.parallel_for(range<1>(1024),[=](id<1>idx){
//PASS
});

range对象用于描述设备端计算的范围,id对象用于描述kernel在并行空间中的某个实例,item对象和id的区别是在计算中可以显示更多细节

SYCL执行过程中,主机端在递交给设备端计算任务之后,可以计算去执行下面的事情

参考资料

1.http://t.csdnimg.cn/PNw2x

2.其它大部分内容是网上碎片化查找收集后进行的自我总结,部分图片侵权删

相关文章:

Intel oneAPI笔记--oneAPI简介、SYCL编程简介

oneAPI简介 Intel oneAPI是Intel提供的统一编程模型和软件开发框架。 它旨在简化可充分利用英特尔各种硬件架构&#xff08;包括 CPU、GPU 和 FPGA&#xff09;的应用程序的开发 oneAPI一个重要的特性是开放性&#xff0c;支持多种类型的架构和不同的硬件供应商&#xff0c;是…...

Spring IOC - ConfigurationClassPostProcessor源码解析

上文提到Spring在Bean扫描过程中&#xff0c;会手动将5个Processor类注册到beanDefinitionMap中&#xff0c;其中ConfigurationClassPostProcessor就是本文将要讲解的内容&#xff0c;该类会在refresh()方法中通过调用invokeBeanFactoryPosstProcessors(beanFactory)被调用。 5…...

Android OpenGL ES 2.0入门实践

本文既然是入门实践&#xff0c;就先从简单的2D图形开始&#xff0c;首先&#xff0c;参考两篇官方文档搭建个框架&#xff0c;便于写OpenGL ES相关的代码&#xff1a;构建 OpenGL ES 环境、OpenGL ES 2.0 及更高版本中的投影和相机视图。 先上代码&#xff0c;代码效果如下图…...

sql语句性能进阶必须了解的知识点——索引失效分析

在前面的文章中讲解了sql语句的优化策略 sql语句性能进阶必须了解的知识点——sql语句的优化方案-CSDN博客 sql语句的优化重点还有一处&#xff0c;那就是—— 索引&#xff01;好多sql语句慢的本质原因就是设置的索引失效或者根本没有建立索引&#xff01;今天我们就来总结一…...

ctfhub技能树web题目全解

Rce 文件包含 靶场环境 重点是这个代码&#xff0c;strpos&#xff0c;格式是这样的strpoc&#xff08;1&#xff0c;2&#xff0c;3&#xff09; 1是要搜索的字符串&#xff0c;必须有&#xff1b;2是要查询的字符串&#xff0c;必须有&#xff1b;3是在何处开始查询&#…...

AMD、CMD、UMD是什么?

AMD(Asynchronous Module Definition)、CMD(Common Module Definition)和UMD(Universal Module Definition)是JavaScript模块化规范,用于管理和组织JavaScript代码的模块化加载和依赖管理。 1:AMD(异步模块定义): AMD是由RequireJS提出的模块化规范。它支持异步加载…...

AM@微分方程相关概念@线性微分方程@一阶线性微分方程的通解

文章目录 abstract引言 一般的微分方程常微分方程微分方程的解隐式解通解和特解初始条件初值问题微分方程的积分曲线 线性微分方程一阶线性微分方程一阶齐次和非齐次线性微分方程一阶齐次线性微分方程的解一阶非齐次线性微分方程的解 abstract AM微分方程相关概念线性微分方程…...

基于深度学习的安全帽识别检测系统(python OpenCV yolov5)

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的内容与方法二、基于深度学习的安全帽识别算法2.1 深度学习2.2 算法流程2.3 目标检测算法2.3.1 Faster R-CNN2.3.2 SSD2.3.3 YOLO v3 三 实验与结果分析3.1 实验数据集3.1.1 实验数据集的构建3.1.2 数据…...

Spring源码分析篇一 @Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有

1. 五种不同场景下 Autowired 的使用 第一种情况 上下文中只有一个同类型的bean 配置类 package org.example.bean;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class FruitCo…...

Goby 漏洞发布|F5 BIG-IP AJP 身份认证绕过漏洞(CVE-2023-46747)

漏洞名称&#xff1a;F5 BIG-IP AJP 身份认证绕过漏洞&#xff08;CVE-2023-46747&#xff09; English Name&#xff1a;F5 BIG-IP AJP authentication bypass vulnerability (CVE-2023-46747) CVSS core: 10 影响资产数&#xff1a; 307282 漏洞描述&#xff1a; Cisco …...

Vue中watch侦听器用法

watch 需要侦听特定的数据源&#xff0c;并在单独的回调函数中执行副作用 watch第一个参数监听源 watch第二个参数回调函数cb&#xff08;newVal,oldVal&#xff09; watch第三个参数一个options配置项是一个对象{ immediate:true //是否立即调用一次 deep:true //是否开启…...

[算法前沿]--054-大语言模型的学习材料

大语言模型的学习材料 Other Papers If you’re interested in the field of LLM, you may find the above list of milestone papers helpful to explore its history and state-of-the-art. However, each direction of LLM offers a unique set of insights and contribut…...

DWA算法,仿真转为C用于无人机避障

DWA算法&#xff0c;仿真转为C用于无人机避障 链接: 机器人局部避障的动态窗口法(dynamic window approach) 链接: 机器人局部避障的动态窗口法DWA (dynamic window approach)仿真源码详细注释版 链接: 常见路径规划算法代码-Matlab &#xff08;纯代码篇&#xff09; …...

现阶段的主流数据库分别是哪几种?

关系型数据库 1. MySQL数据库 MySQL是最受欢迎的开源SQL数据库管理系统&#xff0c;它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司&#xff0c;它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商…...

“原生感”暴涨311%,这届年轻人不再爱浓妆?丨小红书数据分析

近年来&#xff0c;越来越多美妆博主在社交媒体平台安利“原生感妆容”&#xff0c;即我们所熟知的“伪素颜妆”、“裸妆”、“白开水妆”&#xff0c;显然&#xff0c;追求“原生感”成为当代妆容主流。通过小红书数据分析工具&#xff0c;查看#原生感妆容 话题&#xff0c;近…...

基于深度学习的植物识别算法 - cnn opencv python 计算机竞赛

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …...

k8s调度约束

List-Watch Kubernetes 是通过 List-Watch的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 List-Watch机制 工作机制&#xff1a;用户通过 kubectl请求给 APIServer 来建立一个 Pod。APIServer会将Pod相关元信息存入 etcd 中…...

面经(面试经验)第一步,从自我介绍开始说起

看到一位同学讲自己的面试步骤和过程&#xff0c;我心有所感&#xff0c;故此想整理下面试的准备工作。以便大家能顺利应对面试&#xff0c;通过面试... 求职应聘找工作&#xff0c;面试是必然的关卡&#xff0c;如今竞争激烈呀&#xff0c;想要得到自己喜欢的工作&#xff0c…...

S/4 HANA 中的 Email Template

1 如何创建Email Template? 没有特定的事务用于创建电子邮件模板,我们可以将其创建为 SE80 事务中的存储库对象,如下所示: 1,选择包(或本地对象)并右键单击。 2,选择“创建”->“更多”->“电子邮件模板” 尽管如此,对于已有的Email Template,可以使用程序…...

\r\n和\n的区别 回车/换行 在不同系统下的区别

文章目录 1 \r\n和\n的区别2 什么是 回车/换行3 \r\n和\n 故事 1 \r\n和\n的区别 \r\n和\n是两个常见的控制字符符号&#xff0c;它们在计算机领域中有着不同的作用和用途。 \r\n在Windows系统中被广泛使用&#xff0c;而\n在Unix和Linux系统中更为常见。 在Windows操作系统中…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...