英特尔oneAPI———神奇的oneAPI

  • Post author:
  • Post category:其他


oneAPI拥有一个跨架构,跨供应商的软件可移植;oneAPI能够桥接、抽象所有的设备,并使其具有一个共通点;可以共享内存空间,代码可以被移植并重新利用,工具可以跨架构使用。

oneAPI的行业范围规范,定义了软件栈内部的底层抽象层,可以将优化的库集中于各个领域。oneAPI包括oneDNN深度神经网络库,oneMKL数学核心函数库,以及视频处理库等。

跨架构直接编程有并行数据C++语言,简称DCP++语言,它建立在开放式标准和规范的基础上。

英特尔对oneAPI的实现包含了许多其他库、编译器和分析器,它被安排在特定的应用程序域的工具包里,可通过多种方式下载或在英特尔DevCloud上远程使用。oneAPI规范是经过行业内的许多合作伙伴讨论并形成的,每个人都可以阅读这一规范并提出自己的具体实现。

零级(Level Zero)规范基本上就是一个抽象层,它处于硬件与oneAPI上层软件栈之间,要在硬件上实现零级(Level Zero)就可通过获取的所有钩子无缝地连接到oneAPI软件组件。

英特尔始终采用开放性标准,oneAPI拥有一个不断发展的生态系统,包括60多个学术、行业和政府合作伙伴。oneAPI的目标是支持与供应商无关的跨架构的开发,英特尔oneAPI编译器可以通过OpenCL或零级后端支持Inter CPU、GPU和FPGA,其他编译器也可以通过许多后端支持NVIDIA、AMD、ARM和Xilinx硬件。如:CodePlay开发了数据并行C++编译器和数学核心函数库,运行在CUDA API和cuBLAS库的基础之上,为NVIDIA GPU提供了oneAPI的支持。富士通和理化学研究所的计算科学中心,记录了他们移植oneAPI深度神经网络库oneDNN到一台基于ARM处理器的富岳超级计算机的体验,该记录显示:采用oneDNN可以显著提高神经网络训练和推理的速度。

英特尔对oneAPI的实现包括很多其他库、编译器和分析器,它被安排在特定的应用程序领域的工具套件中,可以通过多种方式下载或者在英特尔DevCloud上远程使用。在英特尔oneAPI里可以找到入门所需要的一切,里面涵盖了数学、任务并行、人工智能、视频处理和许多其他领域。分析工具包涵了英特尔VTune分析器、英特尔Advisor和英特尔的GDB发性版,还有优化的C++,DPC++和Python跨架构编译器,新的英特尔DPC++兼容工具可以把现有的CUDA代码迁移到DPC++。oneAPI基础工具套件是最基本的工具包,具有核心库和功能。英特尔oneAPIIoT工具套件提供开发人员高能效部署在网络边缘所需的一切;英特尔oneAPI渲染工具套件可用于高级可视化和数字内容创建,高级复杂的数学模型的渲染等;可供数据科学家使用的AI分析工具套件,包含了功能强大且经过优化的深度学习框架;OpenVINO工具套件,用于在客户端,边缘和数据中心部署推理。oneAPI基本工具套件提供了支持所有架构的基础函数库和工具。

oneVPL是oneAPI中用于跨设备和架构进行视频处理的解决方案,可以在英特尔至强CPU上解码数百个高清视频频道。英特尔GPU,集显的或新的独显有专门的固定的加速视频处理的功能。oneVPL不仅可以把所有的工作从CPU转移到GPU,而且可以在GPU上挤入更多的视频通道并执行CPU有时无法执行的更多处理工作。oneVPL也就是oneAPI视频处理库,可以直接下载到英特尔DevCloud上远程获取,它适用于Linux和Windows系统。oneVPL是以前的Media-SDK的改进版。oneVPL和Media-SDK具有向前兼容性和向后兼容性,并且两个运行时,可以在一个系统上共存。Libva和DirectX视频加速(DXVA)提供了最低级别的控制,但需要最大程度的编程工作并且系统之间的可移植性较低。oneVPL中硬件的可移植性,它的抽象程度比Libva或DXVA更高。oneVPL是开放的、开源的,支持最先进的实时,高性能媒体格式转换,快速图像处理等,oneVPL规范支持在CPU、GPU、视频加速器硬件或其他硬件上的实现。oneVPL中添加了一些新的API调用,用于改进内存管理,它在处理流视频和构建异构工作负载时非常重要,它可以在CPU和GPU等设备之间传输大的内存块,可以找到有关低延迟同步和有效的零拷贝内存共享操作以及更多其他功能。与不透明存储器不同,新的内存界面允许访问表面,可以让构建低延迟或零拷贝的应用程序,API调用可以让应用程序实时发现系统的可用功能,应用程序可以在运行时检测到哪个媒体或视频加速器可供支配,可以根据情况动态地使用它们。

oneTBB是C++程序员在CPU上表示并行性的一种自然而灵活的方式,在CPU上工作,可以促进与其他设备的工作。oneTBB库为线程并行提供了接口、函数和类,其适用于英特尔的DPC++、oneDPL、oneDAL、oneMKL、oneDNN、oneVPL等的实现。TBB代码在主机上执行,它构建在C++11上,可以与DPC++代码SYCL和其他许多代码无缝协作,还有一些机制可以同步卸载到加速器。oneTBB是oneAPI库和API的基础之一,也是并行化和扩展代码的独立机制。

oneMKL是oneAPI数学内核库,是一个高度优化和广泛并行化的例程库,旨在提供跨各种CPU和加速器的最高性能,在这里可以找到FFT、随机数、稀疏和稠密线性代数、统计信息等。GPU和CPU上的DPC++接口支持多种路由,DPC++接口有助于设备发现,运行时管理设备卸载。SYCL队列是异步的,允许为多个设备创建多个队列,并向它们异步提交工作。oneMKL代码是开源的。



版权声明:本文为qq_64236218原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。