OmniRuntime OmniOperator
大数据主流计算引擎以Java/Scala高级编程语言为主,算子是访存密集型的计算类型,其有很大的不足之处。首先,Java的本身的性能还是弱于Native Code,JVM一层的开销依然存在。其次,由于Java的语义的限制,对于整体的类SIMD指令支持较弱,无法完全发挥CPU的算力。此外,大数据现有引擎以行式内存数据结构进行内存计算,无法充分利用芯片的向量化指令,执行效率有待提升。
OmniRuntime OmniOperator算子加速采用Native Code(C/C++)实现大数据SQL算子。首先,以列式内存数据格式OmniVec进行内存计算,同列数据内存连续,提升数据访问性能,充分利用向量化加速。其次,向量化算子采用C++实现,使用向量化执行思想,算子在进行处理时从逐行处理变为逐批处理,更好利用现代CPU的能力。向量化算子拥有更多机会利用CPU中SIMD指令(单指令多数据)和提高CPU Cache命中率进行向量化执行,提升查询性能和有效提升CPU利用率。此外,算子在核心功能处理,如Hash计算以及聚合值计算时,显式调用鲲鹏NEON指令以及鲲鹏加速库进行加速,能够基于单条指令对多个数据同时进行操作,进一步提升算子处理性能。
同时,OmniOperator算子加速可以叠加OmniShuffle Shuffle加速,进一步端到端提升大数据计算引擎性能,性能结果请参见OmniRuntime OmniShuffle。
图1 OmniOperator算子加速逻辑图

OmniOperator算子加速基于大数据联盟TPCDS 99条基准测试用例实现Spark组件计算性能平均提升30%+。
图2 OmniOperator算子加速 TPC-DS测试结果

OmniOperator算子加速基于大数据联盟TPCDS 99条基准测试用例实现Hive组件计算性能平均提升20%+。
父主题: 方案特性