所有当前的硬件平台,从台式机到智能手机,都是围绕多核和异构片上系统(SoC)构建的。 服务器和超级计算机也使用专用内核(如GPU)来提高性能和功效。

    Qualcomm异构计算SDK(HetCompute)通过以下方式在用户应用程序级别上实现硬件的充分利用:

    通过提供并行编程模型,允许程序员在其应用程序中表达并发性。 HetCompute强大的抽象功能通过一种从头开始构建动态并发的设计,减轻了并行编程的负担。 在高层次上,HetCompute提供了一组并行编程模式,可以捕获许多现有的并行构建块,并添加数据流和工作取消作为提高程序员工作效率的一流原语。

    通过将异构执行无缝集成到并发任务图中,消除了在不同设备上执行的内核之间管理数据传输和显式数据副本的负担。 在较低级别,HetCompute为工作窃取和功率优化提供了最先进的算法,允许它隐藏硬件特性以允许便携式应用程序的开发。 此外,HetCompute旨在支持动态映射到异构执行单元。 此外,专家程序员可以通过精心设计的属性和指令系统来负责执行,这些属性和指令系统为运行时系统提供有关HetCompute用作构建块的模式,任务和缓冲区的附加语义信息。

    通过在C ++中嵌入编程模型并提供C ++库API。 C ++是大量面向性能的程序员熟悉的语言,因此程序员可以轻松快速地获取抽象。 C ++嵌入还允许对现有应用程序进行增量开发,因为HetCompute可与现有库(如pthread和OpenGL)进行互操作。

    HetCompute在运行时系统之上运行,该系统将在SoC上的所有可用计算资源上执行并发应用程序。 HetCompute运行时系统本质上是线程,地址空间和设备的资源管理器。 它建立在一系列最先进的算法之上,使程序员免于明确管理这些资源的需要,并为HetCompute执行模型提供最佳性能。

    下图说明了HetCompute架构:

                                                          Snapdragon Hetcompute SDK Overview

    HetCompute是一个用户级库,它与OS服务集成,以尽可能地隐藏硬件的复杂性,同时仍然为程序员提供对性能的控制。 HetCompute利用现有标准在整个SoC上执行:POSIX和C ++ 11用于利用多核,OpenCL用于调度到GPU,Hexagon SDK用于调度到Qualcomm Hexagon(™)DSP。 使用HetCompute的优势在于它为所有这些设备提供了无缝接口,因此使程序员能够专注于正在开发的应用程序,而不是管理硬件,不同的执行模型和数据传输。

    HetCompute的执行模型是并发任务图,具有非循环控制依赖性和/或数据依赖性,用于定义哪些任务应同时执行。任务(在任务和任务参考API简介部分中正式定义)是独立工作的单元。它们是一种直观的方法,用于指定可映射到不同执行单元的计算块。依赖关系(控制和数据)提供了动态构建并发任务图的机制。该任务将并行执行,因为此时平台上有许多执行单元可用。请注意,在移动设备上,由于功率和热量限制,某些执行单元将无法使用,甚至无法动态消失。因此,最好是程序员专注于使用HetCompute任务表达并发性,运行时将它们映射到所有可用资源。在HetCompute中,异构执行与多核执行没有什么不同。但是,为了提供最佳性能,HetCompute要求程序员编写专门的内核。当前版本的HetCompute支持在OpenGL语言和C99中的DSP内核中编写GPU内核。

    HetCompute运行时使用最先进的工作调度程序管理任务并将它们映射到平台资源。 调度程序基于程序员使用新颖的高级API驱动的启发式方法,实现普遍的工作窃取和任务到执行单元的动态映射。 在本指南的后面,将讨论几个关于程序员如何控制运行时行为的示例,例如使用模式调整器和任务属性。 这些特别适用于移动设备。

    HetCompute提供两个级别的API:

    一组高级API,包括并行编程模式和基本任务以及组创建和启动。 这些API适用于首先关注生产力的程序员。 使用这些API可在大多数情况下为您提供最佳性能,而编码工作量相对较少。 精确定义了这些API的语义,并且HetCompute类型系统旨在捕获许多并发编程错误。 

    一组低级API,允许专家程序员更好地控制并行执行。 这些API可以提供更好的性能,但代价是消除了高级API提供的一些保证。 直接访问任务指针对象,任务属性和模式调整器,专用分配器,缓冲区一致性和同步以及存储类是这些API的一些示例。 这些是高级API的基础,因此这两个级别协同工作。 但是,使用低级API需要很好地理解并行编程以及并发执行可能对程序产生的副作用; 因此,请谨慎使用!

    HetCompute的目标受众是需要性能的程序员。 设想HetCompute被应用程序员和库程序员用来构建高性能应用程序和特定于域的库。 它旨在简化组合库:HetCompute任务可以从任何应用程序线程启动(无需加入特定的线程池),可以分层启动任务,单独或作为一组同步,以及模式和任务的统一表示。 这些新颖的特性使HetCompute成为异构执行的框架。 许多其他应用程序员可以通过嵌入这样的支持Qualcomm HetCompute的库来从HetCompute中受益,从而间接和异构执行间接受益,而无需并行编程的负担。

相关文章:

  • 2021-10-03
  • 2021-08-21
  • 2021-12-07
  • 2022-12-23
  • 2022-02-15
  • 2022-01-06
  • 2021-07-23
  • 2022-12-23
猜你喜欢
  • 2021-08-15
  • 2021-10-30
  • 2021-05-24
  • 2021-07-17
  • 2022-12-23
  • 2022-01-14
  • 2021-06-14
相关资源
相似解决方案