日常任务中的OpenCL
最近,我们讨论了HSA,并在讨论构建PC的新方法的优势时,我们谈到了一个有趣的话题,例如GPGPU-图形加速器上的通用计算。如今,AMD视频加速器使用OpenCL提供了对其资源的访问,OpenCL是一个提供相对简单直观的可编程高并行系统的框架。如今,OpenCL技术得到了市场上所有主要参与者的支持:为程序提供“高级”加速访问的能力(也是免费的,因为OpenCL并不意味着任何特许权使用费)显然是值得的,每个人都将从此类API的多功能性中受益在其产品中实现OpenCL支持的人。了解更多有关您今天在日常生活中可以在哪里见到OpenCL的信息,如何加快常规办公软件的速度以及今天为开发人员带来的机遇,我们将进行讨论。GPGPU,OpenCL和一些历史
当然,OpenCL不是实现常规GPU计算的唯一方法。除了OpenCL,市场上还有CUDA,OpenACC和C ++ AMP,但是前两种技术确实很流行并且广为人知。向世界提供OpenGL和OpenAM技术的人:Khronos Group,正在开发OpenCL标准。 OpenCL商标本身归苹果所有,但幸运的是,对于全球的程序员和用户而言,该技术并未与“苹果”公司的产品封闭或捆绑在一起。除了苹果公司之外,Khronos Goup还包括诸如动视暴雪,AMD,IBM,英特尔,NVidia等市场巨头,以及后来加入该联盟的十几家公司(主要是ARM解决方案制造商)。在某种程度上,OpenCL和CUDA在意识形态和句法上相似,社区仅从中受益。由于某些方法和方法的相似性,程序员更容易使用这两种技术,从“封闭”和NVidia CUDA硬件绑定切换到通用且可在任何地方使用(包括普通的多核CPU和基于CELL架构的超级计算机)OpenCL 。日常使用的OpenCL
现在您会想,“是的,他们会谈论游戏和Photoshop。” 不,OpenCL不仅可以加速图形处理,还可以加速计算。跨平台办公套件LibreOffice是使用GPGPU功能的最流行的应用程序之一。OpenCL支持于2014年出现,用于在Calc表管理器中加快计算速度。以下是视频性能的视频比较,其中包括带有R7图形核心的AMD A10-7850K和带有HD4600的英特尔酷睿I5:在综合测试中,使用OpenCL的异构计算中相同的AMD A10-7850K的性能几乎是昂贵的i5-4670K / 4690的两倍:顺便说一句,在科学及其应用领域中,有许多任务可以完美地转移到视频加速器的矢量处理器上,并使您执行计算的速度比CPU快数十倍至数百倍。例如,线性代数的各个部分。向量和矩阵的乘法运算是GPU每天处理图形的工作。在这些任务中,它们实际上是不平等的,因为他们的体系结构已经为解决此类问题而进行了磨练多年。这还包括快速傅立叶变换及其所有相关功能:通过各种方法求解复杂的微分方程。另外,我们可以区分N体的引力问题用于计算空气动力学和流体动力学,对液体和等离子体进行建模。计算的复杂性在于每个粒子彼此相互作用,相互作用的规律非常复杂,并且计算需要并行进行。对于此类任务,OpenCL和AMD GPU功能非常适合,因为可以与许多对象并行计算,因此每天都可以在此类处理器上成功解决:像素着色器中。在栅格图形中经常使用结构化网格。非结构化-在流体力学领域的计算中以及在其图具有不同权重的元素的各种计算中。结构化光栅与非结构化光栅在每个元素的“邻居”数量上的差异:结构化光栅具有相同的差异,非结构化光栅具有不同的差异,但是它们都完全符合OpenCL的加速计算能力。传递计算的困难主要是数学上的。也就是说,程序员的主要任务不仅是“编写”系统的工作,而且是开发数学描述,以使用OpenCL将数据传输到硬件功能。组合逻辑(哈希计算也适用于此),蒙特卡洛方法-可以很好地移植到GPU。大量计算模块,并行计算中的高性能才是真正加速这些算法的因素。使用OpenCL和强大的GPU还能加速什么呢?
搜索回来的路。图形计算和动态编程:排序,碰撞检测(接触,相交),规则结构的生成,各种选择和搜索算法。尽管存在一些限制,但它们有助于优化和加速神经网络及相关结构的工作,但是在这里,问题更可能是神经结构虚拟化“昂贵”,使用FPGA解决方案更有利可图。有限状态机(例如,在处理视频信号的压缩/解压缩或查找重复元素时已经用于处理GPU)的工作非常出色。OpenCL与CUDA
直接比较OpenCL和CUDA的性能没有任何意义。首先,如果我们将它们与AMD和NVidia视频卡进行比较,则AMD视频适配器将在计算能力的激烈竞争中获胜:现代NVidia加速器在NVidia自身引入的FP64格式上有许多性能限制,以便为以下产品销售“专业”视频卡计算(特斯拉和泰坦Z系列)。它们的价格比基于AMD解决方案的FLOPS同类产品和NVidia编号行中的“相关”卡的价格高得多,这使得比较起来相当复杂。您可以考虑每瓦性能或每美元生产率,但这与计算能力的纯粹比较几乎没有关系:“不计任何成本的FLOPS”很难适应当前的财务状况,就每美元的性能而言,“老妇人” 7970 GHz版(又名R9 280X)仍然是利润最高的视频卡之一。其次,您可以尝试比较NVidia的视频卡上的OpenCL和CUDA,但是NVidia本身在驱动程序级别通过CUDA实现了OpenCL,因此出于明显的原因,这种比较有些不诚实。另一方面,如果您不仅考虑性能,那么仍可以进行一些分析。与NVidia CUDA相比,OpenCL在更大的硬件列表上运行。几乎所有支持SSE 3指令集的CPU,从Radeon HD5xxx和NVidia GT8600到最新的Fury / Fury-X和980Ti / Titan X的视频加速器,AMD的APU,英特尔集成显卡-通常,几乎任何具有多个内核的现代硬件都可以利用这项技术。
CUDA和OpenCL的实现功能(以及相当复杂的文档,因为从整体上来说,并行编程远非最容易的开发领域),而是反映在特定的开发功能和工具上,而不是在生产力领域。例如,由于“此处的OpenCL文档非常不清楚”,因此OpenCL存在一些内存分配问题。同时,CUDA在流同步领域(数据,指令,内存等)不如OpenCL。另外,使用OpenCL,您可以使用乱序队列和指令,而CUDA仍然只知道如何排序。实际上,这避免了等待数据时处理器的停机时间,并且效果越明显,处理器覆盖时间越长,内存速度与计算模块速度之间的差异就越大。简而言之:您在OpenCL下分配的功率越多,性能差距将越大。 CUDA将需要编写更复杂的代码才能获得可比的结果。开发工具(调试器,探查器,编译器)CUDA比OpenCL中的同类工具要好一些,但是CUDA通过C实现API,并通过C ++实现OpenCL,从而简化了面向对象编程的工作,而这两个框架都带有“本地”功能。 »技巧,限制和功能。
在这种情况下,NVidia的方法与Apple的工作原理非常相似。一个封闭的解决方案,具有大量的限制和严格的规则,但是对于在特定硬件上的工作而言,它已经变得更加完善。OpenCL提供了更灵活的工具和功能,但是需要开发人员进行更高级别的培训。纯OpenCL上的通用代码应在支持它的任何硬件上运行,但同时针对特定解决方案(例如AMD视频加速器或CELL处理器)进行“优化”将可以更快地工作。 Source: https://habr.com/ru/post/zh-CN388421/
All Articles