英特尔oneAPI-用于异构计算的英特尔oneAPI

news2024/11/19 8:39:53

文章目录

    • 前景
    • 解决方案
    • CUDA替代方案
      • OpenMP
      • OpenACC
      • C++ 库
      • Python 和 Java
      • SYCL 和 oneAPI
    • 结论

如今,异构性广泛存在于高性能计算和消费电子产品中。这些系统在传统 CPU 的基础上增加了大量协处理器或加速器,例如 GPU、TPU 和 FPGA。然而,没有一种简单、可移植且高效的方法来开发这些系统。Intel oneAPI就旨在填补这一角色。

前景

近年来,可以观察到计算中明显的异构趋势,不仅在高性能计算机中,其中排名前500 的 Nvidia GPU是最常用的加速器;也适用于台式机和手持设备。如今大多数智能手机都包含一个GPU,Apple M1是一个片上系统,用于最新的Apple 电脑和平板电脑,包括一个ARM CPU、一个GPU和其他加速器,如用于人工智能应用的16核神经引擎。
这些异质性SOC日益突出,是这种向异质性转变的明确指标。这种转变使得在不依赖于特定供应商的情况下为不同的异构体系结构开发一种简单而统一的方法变得很重要。

 图 1.1 2014 年以来 500 强加速器系统份额的演变
图 1.1 2014 年以来 500 强加速器系统份额的演变
图 1.2 图 1.1 中描绘的图例
图 1.2 图 1.1 中描绘的图例

与 SYCL 一起,oneAPI 是异构编程最有前途的替代方案,它提供了一种开放且用户友好的方法,由于英特尔在#oneAPI 上投入的巨大投资和努力,它正在成为未来标准的道路上不断增长的异构编程世界。

到目前为止,正如我们可以从图表中解读的那样(如图 1.1 和 1.2 所示),使用最广泛的加速器是 Nvidia GPU。这些设备大多使用 CUDA 进行编程,CUDA 是 Nvidia 的专有编程模型,尽管它有一系列缺点:
● 由于 CUDA 是一种低级方法,因此需要有经验的程序员才能获得良好的性能。
● 该语言是专有的,仅适用于 Nvidia GPU。
● 没有用于CUDA 编程的自动或引导工具,也就是说,与其他针对已包含SIMD 并行性的CPU 的编译器相比,编译器还不够完善。

解决方案

英特尔 DPC++ 兼容性工具 (DPCT) 通过自动将大部分 CUDA 代码转换为 DPC++ 来帮助迁移过程,大大减少了开发人员的工作量。
面向未来的编程模型让您可以自由选择可以做什么:

  • 编译 ISO C++ 和 SYCL*(来自 Khronos* Group) 跨- 硬件目标重用代码,包括 CPU、GPU 和 FPGA。
  • 通过跨行业、开放、基于标准的统一编程模型避免专有锁定

特征:

跨架构编译(图2.1):

  • 开发生产力:通过单一源代码以 CPU 和加速器为目标,同时允许自定义调整。
  • 语言标准支持:根据最新标准构建,包括 C++ 17 和 SYCL**,并初步支持 C++ 20,以确保可移植性和对通用 lambda 表达式和变量模板等功能的支持。
  • 行业标准支持:支持 GPU 卸载的 OpenMP 4.5、5.0 和 5.1 子集**
  • 值得信赖的技术:使用久经考验的 LLVM 编译器技术以及英特尔在编译器方面的领导地位历史
    仅在英特尔 oneAPI DPC++/C++ 编译器中可用。
    图 2.1
    图 2.1

CUDA替代方案

尽管CUDA仍然是使用最广泛的低级GPGPU编程模型,但其他方法已经开发出来,其中一些已经得到大量使用。
2018年微软发布了DirectCompute API,为 Windows平台提供了GPGPU编程框架。尽管它具有与CUDA相似的抽象级别,但它被CUDA和其他方法(如OpenCL)所掩盖。
OpenCL,或开放计算语言,由 Apple开发,作为CUDA 的开源替代品。2008年,Apple向Kronos Group提交了一份关于创建和管理OpenCL语言的提案。年底,OpenCL 1.0技术规范发布,得到AMD、Nvidia、IBM的支持。OpenCL 设备代码的抽象级别与CUDA非常相似,但主机代码更加冗长,因此需要大量的低级重复代码。
高级编程:

为了回应人们对基于 GPU 的异构计算的兴趣,2006 年至 2011 年间开发的一些研究型方法演变成生产级模型。

OpenMP

Open Multi-Processing 的缩写,OpenMP 是 2000 年代初期多核 CPU 计算的主要标准。在 2010 年代初,存在对 OpenMP 支持加速器的需求,导致将 GPU 卸载到 2013 年发布的 OpenMP 4.0 的新指令包含在内。OpenMP 5.0 (2018) 扩展了对加速器的支持,并包含用于任务处理和自动并行

OpenACC

OpenACC(Open Accelerators)是首批拥有大量用户群的高级 GPGPU 编程方法之一,于 2012 年发布,以支持 ORNL Titan 的用户,这是首批大型异构超级计算机之一。它允许用户公开并行性,将并行性的映射留给编译器

C++ 库

和扩展 已经开发了大量的 C++ 库和扩展来支持异构计算,例如 Kokkos 和 Raja [5]。其他示例包括:C++ AMP(加速大规模并行)(2012 年)、C++ Boost(2015 年)、Thrust(2012 年)和 C++ Bolt(2014 年)。此外,较新版本的 C++ 标准直接包含不同类型的并行性。C++ 17 增加了对 SIMD 的支持

Python 和 Java

尽管大多数高级异构编程方法都针对 C 和 C++,但也有一些是针对 Java 和 Python 开发的。PyCUDA 和 JCUDA 分别为 Python 和 Java 提供 CUDA 包装器

SYCL 和 oneAPI

SYCL 是一个跨平台抽象层,使用标准 ISO C++ 为异构处理器编写代码,在单个源文件中包含主机和内核代码。它使用带有模板和 lambda 函数的通用编程,通过广泛的各种加速 API(例如 OpenCL)对内核代码进行优化加速,从而使更高级别的应用软件能够被干净地编码。通过互操作模式、C/C++ 库和 OpenCV 或 OpenMP 等框架与原生加速 API 无缝集成,开发人员始终可以访问较低级别的代码

OneAPI是一种开放、免费且基于标准的编程模型,可提供跨加速器和各代硬件的可移植性。它封装了几种讨论的技术和方法,由以下用于创建并行应用程序的语言和库组成:
● 数据并行 C++ (DPC++) 语言:DPC++ 于 2019 年推出,是 oneAPI 用于编程加速器和多处理器的核心语言,并集成了 SYCL和带有附加扩展的 OpenCL 标准。
● oneCCL:用于跨多个设备扩展深度学习框架的通信原语。
● oneDAL:加速数据科学的算法。● oneDNN:深度学习框架
原语的高性能实现。

● oneDPL:oneAPI DPC++/C++ 编译器的伴侣,用于使用来自 C++ 标准库、并行 STL 和扩展的 API 对 oneAPI 设备进行编程。
● oneMKL:用于科学、工程和金融应用的高性能数学例程。
● oneTBB:用于将基于线程的并行性添加到多处理器上的复杂应用程序的库。
● oneVPL:加速视频处理的算法。

OneAPI 通过跨加速器架构提供相同的语言和编程模型来简化软件开发。

结论

在这篇文章中,我们讨论了异构计算领域的差距以及oneAPI如何提供了一个很好的解决方案,想要了解oneAPI的更多内容可以去官网学习,官网有非常详细和丰富的学习资源,这里附上官网链接。
请使用浏览器(推荐Chrome, Firefox, Microsoft Edge最新版, IE V11版以上)访问:https://devcloud.intel.com/oneapi/。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

梯度下降——机器学习

一、实验内容 掌握基于密度的聚类方法的基本思想;掌握单变量函数的梯度下降的原理、算法及python实现;掌握双变量函数的梯度下降的原理、算法及python实现,并测试分析;理解学习率η的选择并测试分析。 二、实验过程 1、算法思想 在…

状态估计|基于 MMSE 的分析估计器的不确定电力系统分析(Matlab代码实现)

一、概述 在分布式电网系统中部署可再生资源带来了一系列新挑战,主要是由于它们的可变性和对气候参数的依赖性,这可能对测量潮流和状态估计所需的系统参数产生重大影响。第一个旨在根据某些参数的先验知识(或预测)计算整个系统参…

从头开始进行CUDA编程:流和事件

前两篇文章我们介绍了如何使用GPU编程执行简单的任务,比如令人难以理解的并行任务、使用共享内存归并(reduce)和设备函数。为了提高我们的并行处理能力,本文介绍CUDA事件和如何使用它们。但是在深入研究之前,我们将首先…

C++【智能指针】

文章目录一、什么是智能指针RAII思想std::auto_ptr二、智能指针的拷贝问题&#xff08;C98&#xff09;1.unique_ptr2.shared_ptrshared_ptr的问题循环引用的问题3.weak_ptr内存泄漏的危害一、什么是智能指针 #include<iostream>using namespace std; int div() {int a,…

哈希散列表hlist_head - linux内核经典实例

hlist_head和hlist_node用于散列表&#xff0c;分别表示列表头&#xff08;数组中的一项&#xff09;和列表头所在双向链表中的某项&#xff0c;两者结构如下: include/linux/types.h(line 190) struct hlist_head {struct hlist_node *first; };struct hlist_node {struct h…

护眼灯真的可以保护眼睛吗?2022双十二选哪款护眼灯对孩子眼睛好

传统的台灯只是单一色光&#xff0c;无法调节台灯的照度和色温&#xff0c;长时间使用不但不可以护眼&#xff0c;而且还会导致近视、散光等各种问题的发生。现在的护眼台灯大多都是使用led灯珠作为发光源&#xff0c;不但本身比较高效节能&#xff0c;而且光线可调控&#xff…

react--redux

此篇文章非学习使用&#xff0c;学习勿入 redux 文档&#xff1a; http://www.redux.org.cn 用于做状态管理的js库 集中管理react中多个组件共享的状态 安装&#xff1a; cnpm i redux 给形参赋值&#xff0c;表示形参的默认值 错误&#xff1a; 对象不能作为一个dom元素…

NPDP认证|制造业产品经理日常工作必备技能,快来学习提升吧!

不同阶段的产品经理对技能的掌握程度要求不同&#xff0c;侧重点也不同&#xff0c;一般包括需求分析、数据分析、竞品分析、商业分析、行业分析、需求收集、产品设计、版本管理、用户调研等。这些技能&#xff0c;是我们必须要掌握的专业技能。 比如&#xff1a;对于刚入行的…

异常检测算法分类总结(含常用开源数据集)

作者&#xff1a;云智慧算法工程师 Chris Hu 异常检测是识别与正常数据不同的数据&#xff0c;与预期行为差异大的数据。本文详细介绍了异常检测的应用领域以及总结梳理了异常检测的算法模型分类。文章最后更是介绍了常用的异常算法数据集。 异常的概念与类型 目前异常检测主…

硝酸根离子深度去除树脂

普通的阴离子交换树脂对阴离子的交换次序是&#xff1a;SO42-&#xff1e;NO3-&#xff1e;HCO3-&#xff0c;对硝酸盐没有选择性&#xff0c;优先交换水中硫酸根&#xff0c;造成树脂再生频繁&#xff0c;产水中氯离子含量增高&#xff0c;出水水质稳定性差&#xff0c;树脂交…

[注塑]各种进胶方式优缺点分析

[注塑]各种进胶方式优缺点分析1.直接进胶2.测胶口3.搭接式浇口4.扇形浇口5.潜胶6.弧线浇口7.针形浇口结构设计的时&#xff0c;分析浇口的进胶方式尤为重要&#xff0c;为了简便我们的设计&#xff0c;常常需要将一些常用的标准形式&#xff0c;以下是我们常见的一些浇口形式。…

死磕sparkSQL源码之TreeNode

InternalRow体系 学习TreeNode之前&#xff0c;我们先了解下InternalRow。 对于我们一般接触到的数据库关系表来说&#xff0c;我们对于数据库中的数据操作都是按照“行”为单位的。在spark sql内部实现中&#xff0c;InternalRow是用来表示这一行行数据的类。看下源码中的解…

Spring Cloud(十二):Spring Cloud Security

主要内容 Spring Security 模块使用设置用户名密码基于内存基于UserDetailsService 接口基于配置类WebSecurityConfigurerAdapter基于DB 用户-角色-权限自定义登录页面登录认证流程自定义成功、自定义失败会话管理&#xff08;Session)会话控制会话超时会话并发控制集群sessio…

【Webpack】webpack的基础使用详细总结 下(建议收藏)

1- 前言 昨天已经介绍了weback的基础使用了&#xff0c;详细总结看这边博客&#xff01;&#xff01;&#xff01; 【Webpack】webpack的基础使用详细总结 上&#xff08;建议收藏&#xff09; 今天来总结一下剩余的常用 &#xff01;&#xff01;&#xff01;&#xff01; …

微信抽奖活动有什么作用_分享微信抽奖小程序开发的好处

在H5游戏中&#xff0c;抽奖是最受消费者喜爱的模式之一。将H5微信抽奖活动结合到营销中&#xff0c;可以带来意想不到的效果&#xff0c;带流量和曝光率&#xff0c;所以许多企业也会在做活动时添加上不同类型的H5微信抽奖活动。 那么&#xff0c;新手怎么搭建微信抽奖活动&am…

01背包、完全背包、多重背包、分组背包总结

文章目录一、01背包问题二、完全背包问题三、多重背包问题四、分组背包一、01背包问题 n个物品&#xff0c;每个物品的重量是wiw_iwi​&#xff0c;价值是viv_ivi​&#xff0c;背包的容量是mmm 若每个物品最多只能装一个&#xff0c;且不能超过背包容量&#xff0c;则背包的最…

【ABAP】SAP发送消息至RabbitMQ

SAP发送消息至RabbitMQ ——以下关于RabbitMQ的内容大致转载于朱忠华老师的《RabbitMQ实战指南》一书 【基础知识】 消息队列中间件(Message Queue Middleware,即MQ)也可以称之为消息队列或者消息中间件,是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数…

面试官: B 树和 B+ 树有什么区别?

问各位小可爱一个问题&#xff1a;MySQL 中 B 树和 B 树的区别&#xff1f; 请自己先思考5秒钟&#xff0c;看看是否已经了然如胸&#xff1f; 好啦&#xff0c;时间到&#xff01; B 树和 B 树是两种数据结构&#xff0c;构建了磁盘中的高速索引结构&#xff0c;因此不仅 …

上海亚商投顾:沪指窄幅震荡 “中字头”概念股又暴涨

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪沪指今日窄幅震荡&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;午后探底回升一度翻红。光伏、储能等赛道午后…

[Spring Cloud] GateWay自定义过滤器/结合Nacos服务注册中心

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…