为开发者“减负” 英特尔oneAPI加速统一跨架构编程


    数据洪流下,AI、5G等新技术催生的创新应用带来更加多元化的计算需求,这就要求多样化的计算架构。为此,英特尔提出了“xPU”策略,也就是英特尔不再局限于CPU(向量计算),而是向GPU(矢量计算)、AI(矩阵计算)和FPGA(空间计算)进行延展。
    基于此,我们看到英特尔构建了一个包含CPU、GPU、AI加速器、FPGA,以及如神经拟态计算等面向未来的计算架构。在这样的计算架构支撑下,我们正在迈入超异构计算时代。
    在超异构计算时代,英特尔确立了制程和封装、架构、内存和存储、互连、安全、软件六大技术支柱,全方位推动计算创新发展。在这其中,英特尔软件是推动未来计算创新的隐形力量。
    软件加速硬件指数级创新
    毋庸置疑,英特尔在硬件层面的创新是有目共睹的。但是进入到超异构计算时代,计算力指数级上升的实现一定是基于硬件与软件的结合。所以英特尔借助“软件先行”的战略,推进硬件和软件的共同创新,来引领异构计算的整合和创新,实现计算力指数级增长,满足未来多元化的计算需求。
    在以数据为中心的战略指引下,英特尔不光在硬件层面进行创新,还在软件层面进行投入。因为整个计算架构不是原来的单一CPU架构,需要针对不同的架构和负载进行整合,软件在中间起了一个最关键的桥梁作用。
    其实,英特尔在软件领域的投入是巨大。英特尔在全球大概十万到十一万人,软件工程师占到15%左右(15000名左右)。而在中国,英特尔亚太研发中心正式员工超过2000人,是涵盖英特尔各个产品部在中国最大的、最完整的综合性研发机构,拥有世界一流的工程研发能力。
    英特尔通过软件实现软硬协同、生态共赢:提供简便可扩展的工具,来加速应用开发部署;坚持客户至上,针对不同类型的工作负载进行优化;秉承开放理念,推动开源、开放生态系统协作;产学研对接,培育面向未来的创新人才。
    在软件生态构件中,开发者是重要一环。英特尔已经深入开发者生态领域超过20年,并有10000项与客户紧密合作的软件部署,是Linux Kernel最大的贡献者,每年修改的代码超过50万行,为100多个操作系统进行过优化,并且拥有超过两千万活跃开发者的生态,而这些只是英特尔庞大的软件实力的一部分。英特尔跨基础架构、网络、操作系统的开发经验,开发工具和SDK以及其所参与并影响的标准制定组织的数量在业界是无与伦比的。
    基于这样深厚的积淀,英特尔希望通过“统一架构编程”,围绕架构创新进行扩展,并且让所做的一切都是简便和可扩展的。英特尔软件所做的事情使所有的硬件的每一个晶体管都能够能力充分发挥起来,使得开发者能够非常容易地把软硬件充分用起来。
    oneAPI打造统一架构编程
    跨架构(CPU、GPU、FPGA及其他加速器)开发能力对于处理数据密集型工作负载极为重要,因为这种工作负载需要多种架构,这也将成为未来的常态。不过多架构编程面临诸多挑战比如专用工作负载日益增多、尚无通用编程语言或 API、不一致的跨平台工具支持、每个平台需要单独的软件投资、需采用不同的以数据为中心的硬件等。
    在今天,每一个硬件平台往往需要开发者维护独立的代码库,这些代码库需要使用不同的语言、库和软件工具进行编程。这是一项极其复杂和耗费时间的工作,会大大降低开发速度、抑制创新。
    为了解决这样的业界难题,英特尔发布了一项全新软件行业计划oneAPI。oneAPI为异构计算提供了一个统一和简化的应用程序开发编程模型,这种统一性为开发者提供了一个统一的开发体验,因为其面对不同的异构硬件,他们不需要学习不同的编程方法。
    具体来说,oneAPI基于标准的跨架构语言Data Parallel C++和SYCL功能强大的API,旨在加速特定领域的主要功能底层硬件接口,可为供应商提供硬件抽象层,支持针对不同的架构和供应商重复使用代码。也就是说oneAPI支持直接编程和API编程,并提供统一的语言和库,可以在包括CPU、GPU、FPGA和AI加速器等不同硬件架构上提供完整的本地代码性能。oneAPI的简单易用和高性能让开发者不再需要维护不同的代码库、多种编程语言以及不同的工具和工作流程。
    
    英特尔对于未来计算的展望和承诺是:SVMS架构(S是Scalar标量,V是Vector向量,M是Matrix矩阵,S是Space空间),也就是我们前面提到的超异构计算。而在SVNS架构之上,英特尔构建oneAPI,对这些硬件进行了抽象。开发者针对的是这个抽象来写程序,而不是具体的硬件。在oneAPI是框架和中间件框架提供了更高一层的抽象和语义,开发者可以在上面快速开发,高效部署。
    我们可以将oneAPI理解成英特尔的中间件层,上面有各种不同类型的行业应用,如果你要调英特尔底层的硬件,就统一用oneAPI进行研发。比如面向视觉计算的OpenVINO就是构建在oneAPI之上,支持CPU、FPGA、Movidius、GPU等,编写一次以后可以通过异构的接口支撑跑在其他的硬件平台之上。
    
    oneAPI以开发者为中心,是为多架构并存的世界重新定义的一种新编程方式,让开发者可以自由选择架构,无需在性能上作出妥协,也大大降低了使用不同的代码库、编程语言、编程工具和工作流程所带来的复杂性。oneAPI产品为开发者提供了全套的开发工具,包括编译器、编程库、分析器等,并把这些工具封装为特定领域的工具包。
    oneAPI保留了现有软件投资,包括支持现有语言,同时为开发人员创造更多丰富的应用程序提供了灵活性,帮助他们在保留现有软件投资的基础上,搭建一座无缝连接的桥梁,从而为未来的多架构世界创造更多丰富的应用程序。比如oneAPI支持高级移植、分析和调试工具,包括英特尔Vtune分析器、英特尔Advisor等,其中英特尔DPC++兼容性工具支持CUDA代码迁移。
    
    除此以外,oneAPI包括了一项基于开放规范的行业计划,该规范包括一种编程语言、强大的API函数库以及底层硬件接口。比如Data Parallel C++可提供跨平台数据并行性支持,而SYCL是全行业开展的一项标准化工作,旨在定义面向C++的跨平台数据并行性支持。这就意味着各个不同加速器提供商可以在oneAPI框架里提供对它自己硬件的支持,其实已经有第三方通过oneAPI对于NVIDIA的CUDA进行上层的封装,这样对于开发人员来讲,他也可以oneAPI支持NVIDIA的GPU,其想象空间巨大。
    开发人员从现在开始就可以在英特尔DevCloud for oneAPI上对基于多种英特尔架构(包括英特尔至强可扩展处理器、带集成显卡的英特尔酷睿处理器、英特尔FPGA如英特尔Arria、Stratix等)的代码和应用进行测试。它是一个开发系统,支持使用英特尔的oneAPI测试版软件在所有英特尔CPU、GPU和FPGA上开发、测试和运行工作负载。用户无需下载,无需购买硬件,无需安装,无需设置和配置,即可使用英特尔oneAPI工具套件,了解 Data Parallel C++,评估工作负载,构建异构应用,设计项目原型。
    目前oneAPI还是Beta测试版,预计2020年Q4发布正式版。毕竟oneAPI是一个全新的开发编程模型,足够长的测试期可以收集更多开发人员的反馈,完善产品。只有更多的开发者使用oneAPI,其价值才会凸显出来。
    oneAPI的发布源自英特尔数百万小时软件工程开发的努力,并且标志着一个行业内的变革,从今天受限、封闭的编程方法演变到一个开放的、基于标准的模式,助力开发人员实现跨架构的参与和创新,为全球开发人员提供一座从现有代码和技能过渡到即将来临的xPU时代的桥梁。
    
    oneAPI是英特尔借助软件力量充分释放硬件性能这一长期探索之旅的第一步,也是重要一步。目前英特尔正在与高校、合作伙伴等通过将oneAPI引入学校课程、线下Workshop等让更多开发者认识和使用oneAPI,同时通过开发人员指南、培训、英特尔工具支持论坛、ISV和应用支持等加速oneAPI的落地。