---
title: OmniRuntime OmniOperator算子加速
description: "大数据主流计算引擎以Java/Scala高级编程语言为主，算子是访存密集型的计算类型，其有很大的不足之处。首先，Java的本身的性能还是弱于Native Code，JVM一层的开销依然存在。其次，由于Java的语义的限制，对于整体的类SIMD指令支持较弱，无法完全发挥CPU的算力。此外，大数据现有引擎以行式内存数据结构进行内存计算，无法充分利用芯片的向量化指令，执行效率有待提升。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/twp/kunpengbds_19_0034.html
sourcePath: /source/zh/kunpengbds/twp/kunpengbds_19_0034.html
indexId: 1faab93abe6cc424af8302fffa1786bc7e4cf6a4ec9479350b8ab930702da9ac49
---
# 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 Shuffle加速。

图1 OmniOperator算子加速逻辑图

OmniOperator算子加速基于TPC-DS 99条基准测试用例实现Spark组件计算性能平均提升30%+。

图2 OmniOperator算子加速基于TPC-DS测试结果

OmniOperator算子加速基于TPC-DS 99条基准测试用例实现Hive组件计算性能平均提升20%+。

图3 OmniOperator算子加速基于TPC-DS性能测试结果
