前言
本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见100个问题搞定Java虚拟机
正文
向量化优化借助的是 CPU 的 SIMD 指令,即通过单条指令控制多组数据的运算。
它被称为 CPU 指令级别的并行。
HotSpot 虚拟机运用向量化优化的方式
第一种是使用 HotSpot intrinsic,在调用特定方法的时候替换为使用了 SIMD 指令的高效实现。
Intrinsic 属于点覆盖,只有当应用程序明确需要这些 intrinsic 的语义,才能够获得由它带来的性能提升。
关于 intrinsic 可以参考我的这篇博客——HotSpot虚拟机中的intrinsic是指什么?
第二种是依赖即时编译器进行自动向量化,在循环展开优化之后将不同迭代的运算合并为向量运算。
自动向量化的触发条件较为苛刻,因此也无法覆盖大多数用例。
向量化计算的典型应用——ClickHouse
笔者在学习 ClickHouse 之前对于向量化计算一直比较模糊,学习了 ClickHouse 才知道了向量化计算的强大。
ClickHouse 并不是用 Java 语言来写的(C++),但是底层原理都是共通的。
以下内容摘自 ClickHouse 官网:
Distinctive Features of ClickHouse
...
Vector Computation Engine
Data is not only stored by columns but is processed by vectors (parts of columns), which allows achieving high CPU efficiency.
翻译
ClickHouse 的独特功能
...
向量化计算引擎
数据不仅由列存储,还由向量(列的一部分)处理,从而实现较高的CPU效率。
关于 ClickHouse 大家可以关注我的另一个专栏——1000个问题搞定大数据技术体系