DPC++の学习之旅(1) - 什么是DPC++?

前言

本人是一名就读于北京市十一学校国际部的中学生,属于技术党,热爱软硬件设计与编程,涉及范围广;也爱音乐,一名新晋V家P主。XDflight是我几乎所有平台的统一ID,曾用名有dqr0802、dqr、daqirui等。
我接触并行数据处理是很偶然的,最开始是为了自己计算东西用。不过我找了很多很多库也没有几个满意的,而且在语言的选择上也老是不定:Python虽然简单但速度慢,C虽然快但是代码太冗余且跨平台麻烦。而像Java这种则看起来就不像做数据分析的(别打我啊啊啊);对于库来说,像TensorFlow这种就只能用于ML和DL,而且GPU只支持NVIDIA的,而且大部分的库都跟TensorFlow相似,也就是说硬件不够弹性。而最终推动我的还是学业。我上学主要带一个MacBook,众所周知MacBook的显卡一直就离谱,核显或AMD独显,不能满足GPU数据处理的要求。而租服务器又贵的离谱,我又不能把台式机从家里带来。所以在众多因素的推动下,加上我爱折腾的性格哈哈哈哈 ,最终打算去尝试一下这款由Intel推出不久的oneAPI解决方案。

何为oneAPI?

这是我《从零开始学习oneAPI》系列的第一期,那么我们肯定得说说啥是oneAPI。

正如此系列简介中写到的,oneAPI是Intel推出的一款新的跨平台且多设备兼容的数据并行处理加速解决方案。它集CPU、GPU、FPGA以及专用AI加速芯片为一体,包含多种高级API以及底层硬件控制库,构建在C++17之上。

听起来十分高大上,而且又是Intel出品(Intel YES! ),感觉就很厉害。你可能以为Intel出品的东西文档肯定不会差吧,那确实,但我写这写文章的主要目的就是因为,它那些文档是很全面,但因为没有像很多知名的高级API一样的全面的入门教程,看起来≈天书[微笑]。

所以我的这一系列博客就将要记录我自学这堆奇奇怪怪的东西的过程,我将会尽可能地完全地叙述整个过程,以免中途有遗漏或不清导致一些莫名其妙的问题。当然,如果你发现有一段时间我咕了,多半是我下一篇中的某些代码出了些问题哈哈哈;然后也可能出现我在之后的博客中修正我前面的概念性错误的事情哈哈哈,希望不会被喷(害怕)。还有一点就是,我最终的目标可能是做一个oneAPI在其他语言上的移植版本之类的,来简化编程。不过这是以后的事情了。

最后我要说明一下版本。我写这篇日志的时候oneAPI的最新稳定版的版本为2020-09,且用的操作系统OS X 10.15.6。不过操作系统你们倒是不用担心,因为后续我会建议非Linux用户使用Linux虚拟机进行开发,因为Linux真的是环境部署友好哈哈哈哈。而如果以后oneAPI的某个新版本发生了很大的改变的话,请联系我更新整套日志,防止日志版本过期,从而避免引发一些不明争端。

还有就是日志的bug反馈,请直接在评论区指出,我会尽快修改的。

何为DPC++?

说了半天oneAPI,那DPC++又为何物?其实我前面也提到了,oneAPI实际上是一堆API的组合,而DPC++则是它里头最核心的一个组件。oneAPI总共含有以下组件:DPC++、oneCCL、oneTBB、oneDPL、Level Zero、oneVPL、oneDNN、oneDAL以及oneMKL,所有的组件我们后期都会去试试看能干些什么,但让我们先focus on DPC++。排除DPC++与Level Zero不说,其他的几个组件都是建立在他们之上的。而你又可以认为DPC++是建立在Level Zero之上的。Level Zero是最底层的库,用来直接操控硬件。虽然接口多,但代码写起来很复杂。而DPC++则是Level Zero的一个高级封装,虽然不像其他组件一样专门为某些应用做过了调优,但是它却因为这样而能够适应几乎各种类型的计算。

不过为了满足各位的好奇心,我还是把每个组件能干嘛先摆出来:
DPC++の学习之旅(1) - 什么是DPC++?

翻译:DPC++是一种基于LLVM编译器的用来实现oneAPI规范的语言。它提供了很多能够定义并执行并行函数的功能。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:oneDPL提供了在C++标准中所定义的函数的并行扩展、部署与卸载支持。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:oneDNN是服务于深度学习应用的。它包含了一些被优化过的神经网络基本构建结构块。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:oneCCL提供了一种高效的用于深度学习的通信模式实现。(说实话我自己不太清楚这个模块是干嘛的,所以翻译的可能不太对哈哈哈)

DPC++の学习之旅(1) - 什么是DPC++?

翻译:Level Zero提供了很多用在oneAPI中的低级硬件直通接口。它被高级API用来当做底层的运行时,因为它能够提供足够综合的硬件控制功能。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:oneDAL提供了很多被极致优化过的算法用于各种数据分析:数据的预处理、变换、分析、建模、测试和决策判断等。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:oneTBB可以让您很容易地用C++写出并行执行的程序,并且可以尽可能获得所有多核运算所带来的性能提升,而且它拥有可扩展性、便携性和可组合性。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:oneVPL提供一个视频处理接口,可以用来编码、解码和视频处理,而且这些操作都是可以被部署在一个很多加速器上面的。

DPC++の学习之旅(1) - 什么是DPC++?

翻译:这是一个接口层,用来为oneMKL的接口实现提供运行时与编译时的设备调度。(说实话看了名字还能猜出点这个模块是干嘛的,结果看了解释就蒙了哈哈哈哈)

结语

其实大家看完以上的解释我也没啥可说的了。这个库非常庞大,学起来也十分困难。不过我相信它既然是个给正常人用的库,那就肯定是能让用户搞明白的,我们也一定能学会。

不过我感觉今天写了不少,大部分都是关于概念的,也差不多了。下一篇开始就是正题啦!应该与环境的部署有关,估计这个环境装起来挺麻烦的(害怕)。那就下一篇再见喽!

相关文章:

  • 2021-12-16
  • 2022-12-23
  • 2021-04-09
  • 2021-10-15
  • 2022-12-23
  • 2021-12-12
  • 2022-02-11
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
  • 2021-09-03
相关资源
相似解决方案