Qualcomm 骁龙™ 845移动平台 中集成的Qualcomm® Kryo™ 385 CPU等处理器基于Arm big.LITTLE架构,该架构由高性能“大”核心和高功效“小”核心组成,前者负责处理计算密集型任务,而后者负责处理轻量密集型任务。我们的目标是为移动设备提供灵活的方案,可以在操作系统和应用层面实现计算需求与功效的动态平衡。

因此,在提供灵活性的同时,我们还希望强调在开发移动解决方案时需要考虑的几个big.LITTLE关键点。这种架构如何影响应用的效率?

了解核心优势

传统的频率、电压调节和内核扩展已经取得了长足的进步,大大提高了电源效率。但是,现在我们拥有了各种不同类型的内核,给我们带来了新的可能性,可以在应用运行时根据需求变化调整电源效率。了解移动开发中可供支配的不同类型核心具有重要的意义,这样,在设计应用时可以有多种选择供您考虑。

例如,您可以编写例程,始终在某个核心运行,或者在两种类型的核心之间进行转换。您可以通过操作系统任务调度程序自动执行,也可以使用SDK提供的控件手动执行。

关键在于要提前确定各种例程运行在或需要哪些类型的核心。一般来说,我们要尽可能在小核心上运行,因为这样可以减少发热量和功耗。在作计划时,我们可以将任务分为重要/不重要,高/低优先级,短期和长期运行等,然后决定如何合理地将它们分配给最合适的处理器。

例如,如果您知道某些代码(例如渲染和人工智能)必须在60fps执行,那么这种高优先级例程可能需要永久分配给大核心。相反,后台线程(如发送和侦听网络信息)可以分配给小核心。

了解操作系统和API的作用

操作系统(OS),尤其是其任务调度程序,在协调big.LITTLE平台任务方面发挥着关键作用。任务调度程序通常要了解各任务(例如,线程)要求的关键点并进行复杂的分析。任务调度程序利用这些信息,将任务分配或迁移到特定的核心。在某些实现中,未使用的内核可能会被闲置,这一点在分析应功耗时应予注意。big.LITTLE任务调度程序的一个主要目的是执行运行状态迁移,即为任务选择大内核或小内核。任务调度程序使用以下三种通用方法:

· 核心群集:相同大小的核心被视为一个群集,然后根据系统的需求选择最合适的群集。

· 内核切换:将大核心和小核心配对成为一个虚拟核心,根据需要仅使用该虚拟核心中其中一个物理核心。

· 全局任务调度:所有的物理内核随时可用,全局任务调度程序根据需要为每个内核分配任务。

最好自己尝试一下,确定给定硬件平台操作系统如何处理运行状态迁移。确认目标平台上的可用架构,以及构建使用的操作系统以及该操作系统如何处理运行状态迁移。了解上述信息至少可以提供一些有关该平台运行状态迁移的总体信息,以及能为您计划编写的应用带来多少好处。

有多少控制功能可供利用?

有的制造商可能会屏蔽大小核心选择,这样,您在开发过程根本不需要考虑如何选择,有的制造商会通过API实现不同程度的控制。例如,Qualcomm Snapdragon Power Optimization SDK通过API提供两种主要模式,以便开发人员控制电源效率:

· “静态模式”:根据应用的当前状态控制性能/功耗平衡。该模式提供了许多风格,如窗口模式,可以配置核心以使用的最低和最高频率比例。

· “动态模式”:通过反馈回路调整核心使用和频率,反馈回路可根据期望的吞吐量指标自我调节系统。

对于不想处理性能/功耗平衡的程序员而言,很多平台都提供了开箱即用的核心管理配置,可为各种应用类型很好地实现性能/功耗平衡。

不要忘记工具

最后,不要忘记,在某些时候,您还需要优化和调试应用。因此,为帮助您在应用执行时了解big.LITTLE的内部工作原理和优化,您的SDK应包含优秀的开发工具。例如,Qualcomm Snapdragon Profiler可以就代码在Kryo 385不同核心上的执行情况提供深度可视化分析。您应该在开发IDE中寻找方便您在核心和不同处理器之间进行调试的功能。在分析状态时,调试器应该可以让您轻松停止多线程应用的执行。big.LITTLE的初衷很容易理解,就是实现提高应用效率这样直接的好处。虽然多年来,Qualcomm开发者网络已经为我们的骁龙移动平台提供了各种优化工具,但现在是您尝试结合使用SDK和big.LITTLE帮助优化开发的好时机。