AMP编程挑战
随着多内核技术的演进,越来越多的SoC提供对称多内核架构实现低成本以及更高的性能。典型的AMP具有运行在不同操作系统上的异构内核、硬件加速器以及非所有内核共享的分布式存储器。在对称多内核处理器(SMP)应用中,内核完全相同并运行支持相同共享存储器架构的相同操作系统,因此使用操作系统带来的内核间通信、调度以及负载均衡功能相对而言更为直接。AMP器件的编程需要更高的并行编程技能,才能通过控制和协调不同的内核及操作系统实现可满足单内核或SMP编程需求的高稳定性及高性能。
传统非对称多内核处理要求在编译时对多内核资源进行静态分区。这样做难度往往较大,因为运行时的软件加载不能提前判别,尤其是4G LTE、LTE Advanced以及云计算等尖端技术。一般解决办法是预留额外的空间,以确保系统在最恶劣应用条件下也能正确运行。资源过度分配的不利影响是资源利用不足,最终会导致产品成本上升。另一方面,首次使用时或者引入新功能、需要现场强化或需求改更时,手动重新分区及软件优化会带来大量的软件工作。
同步性及处理器间通信(IPC)的效率在多内核编程过程中至关重要。缺乏对各种同步性与IPC机制的适当硬件支持,会因过多的软件开销而导致多内核利用低下,降低系统性能。
这对AMP多内核系统而言尤为如此,因为难以实现软件可扩展性与灵活性。
多内核导航器助力实现创新
多内核导航器为CorePac、AccelerationPac以及I/O提供统一接口,可将硬件队列用于图1所示的不同系统端点。这可为所有IP块提供支持通用通信方式的AMP系统。多内核导航器可充分利用内建在队列管理器中的uRISC内核来管理流量路由、IPC、资源管理、调度以及负载均衡,从而可优化和加速数据流。各种任务可由队列管理器按需派送和分配给负载最轻的内核或IP子系统。
多内核导航器可提供高效率内核间通信机制。硬件队列与数据包DMA是IPC的基本构建块。某些队列经过精心设计,可对IPC内核产生中断。多内核导航器内部的uRISC内核使用可编程中断通知功能实现自动队列监控与管理。多内核导航器可充分限制软件开销,降低同步时延,并可提高IPC吞吐量。此外,它还支持无锁编程模型。图2是使用多内核导航器的IPC示意图。
图2:使用多内核导航器实现处理器间的通信
图3主要展示Navigator Runtime概念及其与多内核导航器的互动。
图3:Navigator Runtime与多内核导航器的互动
多内核性能可使用加速性进行测量,加速性的定义是用单内核串行执行时间除以多内核执行时间。在理想条件下,8内核系统的加速性等于8。但在实际中,由于多内核总线判优、存储器访问时延、高速缓存一致性管理、同步以及IPC等多内核开销的影响,典型加速性与理想条件相距甚远。Navigator Runtime消耗的开销极少,以尽量接近理想加速性,实现多内核性能的最大化。
以LTE上行链路物理层处理为例,串行代码可细分为1,024个工作任务用于实现天线数据处理、通道估算以及均衡等。平均每个工作任务有4K输入数据及2K输出数据驻留在共享存储器中。Navigator Runtime将用于调度这些工作任务并分配给8个不同的内核,故加速性的计算如下:
8内核加速性 = 采用本地L2存储器中的数据单内核串行执行代码的时间 ÷ 采用共享DDR3存储器中的数据8内核并行执行的时间
在并行8内核执行示例中,在处理前可分配多个导航器数据包DMA通道将DDR3中的数据预加载到本地L2存储器中,并在处理后将数据从L2返回至DDR3,就像为降低存储器访问时延的 CPU高速缓存运行一样。结果所测得的KeyStone器件的加速性为:在3.2万个周期的工作任务中,从8内核KeyStone器件中测得的基准数据可实现7.8的加速性,而在1.6万个周期的工作任务中,其则可实现7.7的加速性,非常接近理想的8加速性。与KeyStone I相比,KeyStone II中的导航器已得到了明显的改进:4倍uRISC引擎数量可实现更多的调度资源,而数据包DMA通道、硬件队列以及描述符数量翻番,则可提高执行吞吐量。
图4为KeyStone Navigator Runtime在各种工作任务量情况下,2至8内核的实际加速性与理想加速性的比较。
图4:采用Navigator Runtime实现的多内核加速性
此外,TI KeyStone II架构还可为所有异构内核提供6MB的片上共享存储器(MSMC 存储器)容量。MSMC的存储器访问性能非常接近L2存储器访问性能。当数据存储在MSMC中时,无需使用导航器预加载和后存储数据,便可实现与上面情况类似的加速性。与其它可选解决方案相比,大型片上共享存储器可利用低系统时延为多内核性能带来独特的优势。
Navigator Runtime不但可支持各种系统应用,而且还能够与OpenMp等高级多内核编程范式集成。
OpenMP是一款支持多平台共享存储器多处理编程的应用编程接口(API),由编辑器指令、运行时库程序以及环境变量构成。在OpenMP中,用户可使用语言指令(例如编译器指令)来识别其软件中的并行性,也可使用工具帮助识别。使用兼容OpenMP的编译器可读取编译指令,其可将编译指令所注释的串行代码转换成并行代码,并在OpenMP运行时中插入调用。对在特定器件上运行的应用而言,多内核编程方法的运行时时延及开销性能将会限制可实现的并行性。更低的时延与开销可在应用中实现并行化创造更好的条件,进而实现更高的多内核效率。
下图5显示的是使用Navigator Runtime与OpenMP的KeyStone AMP编程流程。随同Code Composer Studio集成开发环境提供的Code Gen Tool 7.4版是一款立即可用于OpenMP的编译器。该编程流程具有通用性,不但可用于各种多内核应用,而且还可通过扩展支持各种不同内核及系统规模。其目的是以单内核编程的便捷性实现多内核的高性能。
图5:使用Navigator Runtime的KeyStone AMP编程流程
结论
多内核导航器是一款面向KeyStone器件的创新型智能芯片基础设施,可推动多内核编程的发展。多内核导航器与Navigator Runtime可为每个硬件组件带来抽象性,通过资源管理、调度以及动态负载均衡功能实现平台虚拟化,从而可最大限度地提高多内核效率,以更低的系统成本实现更高的硬件利用率。将Navigator Runtime与OpenMP等高级多内核编程模式相结合,可简化AMP多内核软件设计,提高多内核程序的可扩展性与灵活性,并能够以更低的成本快速部署新技术。
作者:
Eric Biscondi,德州仪器系统与架构经理
Tom Flanagan, 德州仪器技术战略总监
Frank Fruth, 德州仪器软件开发总监
Zhihong Lin, 德州仪器战略市场营销经理
Filip Moerman,德州仪器通信基础设施及多内核高级系统架构师
更多回帖