oneAPI是一个统一编程模型,可以简化我们在不同的体系结构中进行异构计算的开发流程,充分发掘性能来满足各种不同负载的需求。在开源社区,英特尔为oneAPI绝大部分内容建立开放代码项目,为了鼓励协作,英特尔还发布了Devcloud,开发测试工作负载,以便更多的使用者体验oneAPI编程。
多架构编程所面临的问题是,如今大多数追求性能表现的编程都针对单一架构,不容易在其他架构上重复使用已有的代码。这限制了开发者的选择,使得在新的硬件产品出现时,过往的开发投入无法被重复利用。与此同时,高性能计算环境正利用多种计算设备,包括CPU、GPU以及其他的硬件加速器,由于存在如此多的异构平台为这些不同架构开发高效软件,编程开发自然面临许多挑战。
每种硬件计算设备都需要使用不同的语言和库进行编程,针对这些计算软件需要维护的代码库,在中间件和框架层我们进行了大量重复操作来发掘不同硬件体系结构的差异化优势,满足我们的计算需求,这严重地降低了我们的开发效率。
为了解决上述多架构编程所带来的问题,英特尔提出了oneAPI这个解决方案,该项目旨在提供统一的软件开发环境。oneAPI行业倡议基于行业标准和开放式规范,对用户提供多种硬件厂商选择,提供统一编程语言和库来做并行化计算,使得在各种硬件上写程序都能达到应有的性能。这种灵活性以及对以往代码的重用,使得开发者能够使用到最佳的处理器和加速器,更好地满足工作负载对性能、成本和功耗的需求。
oneAPI属于贴近底层硬件的基础编程层级,可以使各中间件和框架来指示CPU以及多种加速器,用户可以直接利用中间件和框架或者使用oneAPI自带的高级编程语言,oneAPI编程模型可以与其他现存的模型进行互操作。
oneAPI行业技术的提出是基于标准行业规范,替代了原有单一供应商解决方案,使得用户获得更加广阔创新的开发系统。oneAPI可以简化跨多种类型的CPU和加速器开发,并不限于英特尔公司出品的硬件。oneAPI规范包括三个部分:第一部分是直接编程,提供了基于开放标准的编程语言DPC++;第二部分是基于API编程,提供一组充分发掘硬件性能的库,为所有支持平台提供与本机一致的性能;第三部分是底层硬件接口,可为供应商提供硬件抽象层。这些组件大多数都是开源的,以鼓励开发社区协作并帮助构建新功能,并且这个开源范围还在继续扩展中。
基于oneAPI的规范,英特尔oneAPI实现了包括基础功能套件以及针对特定领域的补充工具套件。基础工具套件除了oneAPI规范中提到的三个之外,还提供了英特尔DPC++兼容性工具。
首先,我们来仔细看看基础工具套件里面有哪些内容。除了DPC++兼容性工具分析和调试性工具外,基础工具套件里面有一些数学历程、矩阵代数、I数据分析库(包含机器学习和数据分析功能)、oneAPI深度神经网络库、深度学习训练和推理的神经网络功能以及oneAPI视频处理库,里面有实时的视频解码、编码、转码的处理功能。
其次,我们来看一下oneAPI技术工具套件里面的组件。第一是DPC++编译器,英特尔通过工作组以及社区协作,使其更贴近行业现状。在基础工具套件里面,我们要看的第二个组件是DPC++兼容性工具,该组件将已有的程序迁移到DPC++,但是不能完全替代开发人员工作。第三个基础工具套件还包含了增强版的Vtune,在英特尔长期投入研发领先的分析工具基础上提供了增强版本,以支持一系列空间架构。第四个技术功能套件里面还提供了孕育在CPU和其他加速器上进行代码调试的高级语言调试器、基于行业标准开源的GDB调试器。
英特尔将大力投资一系列计划,以推动DPC++语言,这些计划包括广泛的开发者支持计划。英特尔推出oneAPI的目的就是简化处理器和加速器的开发,并不仅仅局限于英特尔的问卷。
由于oneAPI作为包含直接编程和基于oneAPI的标准组件,集成广泛的创新,在战略行业协作之中以及第三方参与该计划的公司,均可以使用oneAPI开放规范来构建自己。
最后,我们鼓励第三方公司为其他厂商开发符合oneAPI规范的商业产品。第三方和OEM厂商可以根据自身情况决定发布形式。我们来看一下英特尔的Devcloud,开发人员可以下载英特尔oneAPI测试工具包以供本地使用,也可以通过云端英特尔工具包快速入门,可以跨多种英特尔架构工作负载。该项目可以通过安装和设置节省时间,并且可以灵活地适用不同硬件,而无需耗费搭建开发平台的成本。
需要指出的是,英特尔Devcloud所提供的人工环境是真实的物理平台,不是虚拟机。用户在注册了Devcloud账号以后可以在120天之内免费地使用安装oneAPI测试版软件以及英特尔各种支持oneAPI硬件的社会平台,时间期限到了之后还可以进行续期申请。