英特尔开发中心在俄罗斯的项目。英特尔集成性能基元

我们在俄罗斯进行的另一个英特尔项目的故事。这是Intel Integrated Performance Primitives库-一组即用型,针对各种Intel架构进行高度优化的库,以及完全免费的基本功能,可用于处理图像,信号和任意数据。该项目的起源,发展方式以及Intel IPP现在正在发生的事情-摘自本文。按照总结中的惯例,我们将从现在开始。



在KDPV-下诺夫哥罗德英特尔办事处IPP地板入口



什么是英特尔IPP



因此,由于对特定的微体系结构和Intel平台进行了特定的优化以及向量指令集Intel SSE和所有版本的Intel AVX的最大可能使用,因此Intel IPP是功能原语的构建块,可以大大加快处理媒体和数据的软件的运行。

IPP功能涵盖四个大领域:



  • 图像处理;
  • 数据压缩;
  • 信号处理;
  • 密码学。


当前的Intel IPP 2020 Update 2包含2,500多个图像处理原语,1,300信号处理原语,500计算机视觉和300密码。



该库一直在不断改进-针对新平台进行了优化,添加了新功能,不可避免地删除了旧的,很少使用的库。

英特尔IPP可在运行Linux,macOS,Windows和Android的任何x86设备上运行。也就是说,不仅支持英特尔处理器,而且还支持其他制造商的处理器,而且IPP可以在它们上快速运行,尽管当然不如在英特尔设备上那么快。



同时,IPP用户不需要使用IPP及其相关操作的代码执行平台的深入知识-所需的优化版本将被自动调用。



IPP使用所谓的内部编译器函数用C编写。对于使用该库的不同模型,它有不同的版本:单线程用于从外部应用程序的不同线程进行调用,而多线程则使用有效的内部并行化。



对于那些对Intel Xeon和Core的工作速度感兴趣的人-一些基准



IPP当前可作为Intel Parallel Studio XEIntel System Studio的一部分使用,也可以单独使用...并且-完全免费,可用于个人和商业用途。



有趣的是,我们生活中最``封闭''的领域是密码学,就IPP而言,它现在是最开放的-这是Github上可用的开源项目



IPP首次出现在信号和图像处理中时所带来的基础,方法和API现在可以称为保密标准-密码学也是如此。



世界上成千上万的应用程序中的数百万用户使用所有库组件。包括公司内部-英特尔各个部门。英特尔IPP极大地加速了OpenCV库。顺便说一下,英特尔IPP定制构建具备2015年发布的OpenCV使用的功能,成为IPP的第一个免费版本。



英特尔IPP可以在包括医学在内的所有领域的图像识别和增强应用中找到。打印机,包括3D;数字视频监控;自动驾驶汽车;语音识别与合成;数据压缩 电信和游戏。IPP随处可见-从服务器到可穿戴设备。可以说,如果发明了时间机器,那么其软件肯定会使用英特尔IPP。



IPP的历史



这一切都始于英特尔的信号处理(SPL)和图像处理(IPL)库,该库是由英特尔在萨罗夫(Sarov)的VNIIEF联邦核中心订购的(我们在有关OpenCV故事中对此进行了介绍)。



1996年(据不同的目击者称,1997年)在英特尔圣塔克拉拉总部举行了一次会议,会议上关于SPL和IPL的进一步开发计划,美国项目策展人和来自Sarov的邀请专家参加了会议。 Sabanin以及目前正在领导IPP密码学工作的Sergey Kirillov。



Sarov团队带来了他们的提案清单,其中之一是向用户开放低级IPL和SPL功能的接口,因为它们已经被实施和优化,而有些用户对IPL数据格式不满意。他们建立的图像格式。鲍里斯·萨班宁(Boris Sabanin)在一次餐巾纸上的讨论中创建了IPP接口的原型原型,该原型使用的结构比IPL / ISL更为简单。但是当时,俄罗斯方面的建议尽管没有遭到拒绝,但并没有得到太多支持,它只是排在低优先级的中间。但是几年之后,英特尔的某个人想起了这一点(很可能是后来成为英特尔IPP的“传道者”的李欣(Shin Li)),并且计划也有所改变。





Stewart Taylor撰写的2004年Intel IPP书籍,是历史性IPP会议的参加者(当时是Intel的新聘斯坦福大学学士)。



这就是Intel Performance Primitives工作的开始方式,后来将其更名为Integrated Performance Primitives。



IPP的内部版本,我们称之为1.0,创建于1999年。它更像是概念验证,它是证明概念可行性的原型。它没有作为产品发布,但确实定义和完善了IPP的概念,体系结构和规范。第一个公开版本的编号立即为2.0,并于2002年4月发布。



直到2009年,有关IPP图书馆的大部分工作都是在鲍里斯·萨班宁(Boris Sabanin)的领导下进行的,鲍里斯·萨班宁(Boris Sabanin)可被视为IPP的教父和灵魂。他为该项目投入了大量精力,组建了一支由多才多艺的专家组成的团队,但不幸的是,他并没有辜负英特尔IPP成立20周年。





鲍里斯·萨班宁(Boris Sabanin)创作的画作“萨洛夫塔的桥梁”,不仅为IPP所熟知(在这里您可以看到萨班宁的其他画作,包括他的自画像),



但IPL / ISL的遗产并不仅限于此。加密和数据压缩的基元几乎立即出现。实验从计算机视觉领域开始,后来发展为使用OpenCV的项目,使用ippCV域中的原语加速算法。



当然,这不是库创建历史上唯一的实验和分支。 IPP与所有英特尔并驾齐驱。因此,例如,除x86之外,第五版IPP还支持Intel XScale处理器(ARM体系结构)和Intel Itanium(IA-64)!多年来,IPP包括逼真的渲染,小矩阵运算,数据完整性,视频和音频编解码器等组件。



如果需要,现在可以使用可下载IPP旧版库软件包来使用此功能



而且,IPP视频编解码器后来成为了另一种著名的英特尔产品-英特尔媒体SDK的基础和光线跟踪是在开源英特尔Embree项目中实现的



IPP结构领域中有趣的技术实验包括一个Windows驱动程序示例,用于演示内核模式下IPP的可能性,以及用于在用C for Metal编写的集成Intel GPU上运行的IPP版本



很好奇的是,IPP版本号从1到9依次排列,然后在发布年份-2017-2020开始指定。





2003年英特尔IPP开发团队在



IPP系列图书馆的存在期间,有100多人参加了他们的工作-在萨罗夫,下诺夫哥罗德和莫斯科。现在,IPP总部位于下诺夫哥罗德,看上去非常迷人!





英特尔IPP地板装饰



IPP根本不是原始库!



尽管英特尔IPP的名称包含“原始”一词,乍看之下,用于创建生产性程序(实际上是IPP)的“设计器部件”集没有任何根本性困难,但这些库的结构一点都不琐碎。已经应用了有趣的技术解决方案来确保IPP的最大性能和可用性。



如前所述,IPP包含数千个功能(每个功能具有针对特定体系结构进行优化的多个版本),这导致大量现成的库,这对IPP用户而言根本不是好处。

因此,以特殊方式收集IPP。包含大量简单功能的源文件在编译之前通过特殊脚本被切成许多小文件,每个文件一个功能。然后编译这些小文件。而且,对于具有相应标志的不同体系结构,它们不会一次编译,而是多次编译。结果是每个IPP域都有多个庞大的静态库。但是这些静态库是从很小的目标文件中粘在一起的。因此,当IPP静态链接到应用程序时,应用程序的大小几乎完全由IPP使用的功能的大小增加,而不是增加字节。



IPP还具有一种基于现有工具生成自定义库的机制,而无需向用户开放源代码。即,用户从头文件中选择感兴趣的功能列表,然后由大型静态库中的脚本自动创建仅包含必需功能及其依赖项的小型动态库。而且,为了进一步减小大小,此动态库可能不包括针对这些功能的汇编选项,而不是针对所有硬件选项,而仅针对用户指定的平台列表。



在IPP库性能每增加一个百分点的情况下,决定在什么级别上并行化代码就变得非常重要:在库函数内部,这对于从一个用户线程进行IPP调用是有益的,或者在用户应用程序级别对外部的IPP调用而言,这是有益的。多线程应用程序,它们独立地为IPP分离工作和数据。



由于应用程序不同,因此IPP也有所不同。即,IPP软件包包括两组32位和64位版本的库:一组在内部是纯单线程的,另一组是使用OpenMP对大量函数进行内部并行化的(函数的确切列表随附于文档中)。此外,还有一个图像处理库版本-“线程层”,它是单线程IPP的附加组件,并使用OpenMP或Intel TBB进行图像上的外部并行处理,为此将其分为多个片段(平铺) ... IPP软件包中提供了IPP线程层源代码,供那些希望最大程度地控制其代码如何并行运行的人使用。



几乎自IPP诞生以来,开发人员就不得不担心由独立IPP功能组成的图像和信号处理管道运行速度慢于预期的问题。解释很简单:通常,在调用IPP函数时,会从缓存甚至从内存中进行加载和卸载,并且该操作可能比实际计算要昂贵得多。在处理大数据(不是那些称为大数据的大数据,例如FullHD图像(更不用说4K))时,这种效果尤其明显。



在这种情况下,将IPP内的多个功能组合为一个功能的决定是不合适的-然后,我们将从游戏“ Tetris”中获得花哨的细节,而不是原始的砖块,将其插入用户应用程序会遇到问题,并且各种可能的组合将超出所有合理的限制。



结果,实现了基于IPP的C ++附加组件,它构建了管线图,将图片切成碎片,然后启动了一个并行循环,该循环不在每个线程中执行一个操作,而是在单独的图块上执行整个IPP管线。最后,结果当然是紧密结合在一起的。首先制造了一个原型,它显示出不错的加速度。然后创建一个称为DMIP(延迟模式图像处理)的设置。此外,2011年,在Khronos举行的OpenVX标准化委员会的首次会议之一中,由于图形在硬件开发人员中的流行,DMIP受到了委员会的热烈支持。因此,OpenVX标准原来是基于图形技术的。由于各种原因,OpenVX标准尚未得到足够的普及,但是现在,图范式已得到Intel Graph API团队的支持和开发。而且由于Graph API包含在OpenCV,OpenVINO,Movidius SDK中,因此IPP技术对计算机视觉标准和现代API产生直接影响。



IPP-有用的链接



再次,这里是本文中最重要的链接。





英特尔IPP第一人称



让我们为这些年来在英特尔性能基元的命运中扮演重要角色的人们发言。



2009-2011年,英特尔IPP团队负责人Vladimir Dudnik

-, IPP – , . , - , .. IPP - , - .

, , , , SIMD . , , MKL, IPP .


, OpenCV, IPPCV 2006-2008

IPP , , , . FFT. — ! , IPP , , .

IPP , , OCaml, Spiral, FFT — IPP. IPP. , , , , 13-14 , .



, IPP QA 2011-2015 , IPP 2017-2020

IPP QA 2000. , , .

17 IPP. Intel . waterfall & development agile & DevOps. . , .

– . , , . , , , . , , , .


, Image & Signal Processing Intel IPP, 2020 –

IPP SW 2011 , . , . IPP , , , Resize, WarpAffine, WarpPerspective . . C 2017 , , , 2018 IPP Crypto GitHub. 2018 , 2020 IPP, Image & Signal Processing . , , IPP Intel, .



All Articles