条漫文案/正文 | 胡巍巍
条漫设计 | 付费下载自稿定设计
出品 | CSDN(ID:CSDNnews)
程小猿的难处,相信你也感同身受。
当下,异构计算如日中天,开发者在同一个数据中心里,既需要在CPU里做虚拟机,又需要在FPGA里做各种压缩,还需要在GPU里做深度学习。
因此,开发者得在数据中心里,安装很多硬件、和运行很多软件。这种情况下,开发者不加班才怪呢!
如果CPU、FPGA和GPU等,还是各自为政,当你的应用要扩容、硬件要升级时,或者哪怕你想做出任何改变,成本都非常高。
如果架构再发生变化,这等于你之前的付出,全部白费!
打个比方,某天中午,你既想吃天妇罗,还想吃水煮鱼,但这一个是日料、一个是川菜,你想同时吃到,就得分别去一家日料店和一家川菜馆。
有没有办法,可以让你在一家餐厅,就同时吃到鹅肝和水煮鱼呢?
当然有!去自助餐厅就可以。
而前文提到的oneAPI,正是英特尔为了让开发者能够自由享用“自助餐服务”而推出的,赋予开发者灵活选择各种架构进行任意组合的惬意
那么,oneAPI是一个怎样的产品?
四问oneAPI:是啥、干啥、啥时用、咋用
oneAPI是啥
在2019年超级计算大会上,oneAPI beta产品发布。
oneAPI beta产品,包括直接编程工具(Data Parallel C++)、基于API的编程工具、以及分析工具和调试工具等组件。oneAPI beta还可以把这些工具,封装为特定领域的工具包。
概括来说,oneAPI是一个统一和简化的编程模型,它的诞生使命,在于简化跨多架构的开发过程(如CPU、GPU、FPGA、加速器)。
它也是英特尔首创的自助餐式服务。举个例子,银行、物流、医院、工厂等不同行业的开发者,他们的需求,都不尽相同。在某一个硬件上,开发者用的可能是CPU+FPGA,也可能是GPU+FPGA。
但是跨不同的硬件、CPU、GPU和AI,有比较多复杂硬件的异构性。而oneAPI提供了更加简单的方法,来统一编程框架,让程序员在不同的硬件架构上,感受到统一的开发体验,这对于程序员来讲工作就会非常方便。
短短数月内,支持oneAPI的企业和机构已经超过30家。它们中间,既有一线厂商,还有名牌高校。
oneAPI干啥
它最重要的作用,就是帮你实现异构编程!
打个比方,oneAPI和异构编程的关系,有点像携号转网,当然这个“转网”,不需要有关部门的批复。
有了oneAPI,你在某一个数据中心里开发的东西,可以从CPU挪到FPGA上,也可以从NVIDIA的GPU挪到英特尔的GPU上。
此外,oneAPI还能简化各种架构的开发流程;它还可以统一语言和函数库,使其变得更简单,从而有利于表达并行化;oneAPI还拥有很好的本机高级语言性能;并能够与现有HPC编程模型互操作。
oneAPI啥时用
当下,oneAPI beta版已经发布。
而oneAPI的库和组件们,要么已经开源,要么即将走向开源。
俗话说,车马未动,粮草先行。
英特尔已在北京和上海,举办oneAPI beta研讨会,通过开发者的试用和反馈,来对oneAPI做出优化。一年后的2020年四季度,一个准备完美的oneAPI,就会和你见面。
oneAPI咋用
当下的oneAPI beta版,主要面向英特尔至强可扩展处理器、带集成显卡的英特尔酷睿处理器,以及英特尔FPGA。
如果你感兴趣,可以在Intel oneAPI DevCloud平台下载和试用oneAPI工具。想了解更多oneAPI详情,则可以戳software.intel.com/oneAPI。
DPC++:专门为oneAPI设计的编程语言
好马还要配好鞍,为了让你更丝滑地使用oneAPI。基于英特尔在架构和编译器领域积累的多年经验,英特尔专门给oneAPI,设计了一款名叫DPC++的编程语言。
它的全称叫Data Parallel C++,Data Parallel是数据并行的意思。它基于C和C++,并融合SYCL(OpenCL的高级编程模型)。
三剑合一,让DPC++能支持跨CPU、跨加速器的数据并行,并能让你实现异构编程。
可以说,DPC++存在的意义,正是为了简化编程、提高代码在不同硬件上的可重用性。此外,它还能根据特定的加速器进行调优。
未来可期:开发者如何享受oneAPI利好?
oneAPI大部分都是开源的,你可以按照自己的想法,在上面做拓展。
此外,oneAPI的诞生原因之一,便是为了减轻开发者工作量、以及方便开发者进行跨架构编程。
正因为oneAPI的是开源的,所以它也是瞬息万变的。
而它的变化,正取决于开发者对于oneAPI生态的贡献。
英特尔通过投入大量人力、物力,已经给oneAPI设立好起点。
接下来,就需要开发者和英特尔一起,来将oneAPI推得更高!
然后,水涨船高后,受益者就是你。
话说回来,谁说程序员工资高,都是加班加出来的?工具用得好,下班回家早!oneAPI用起来!