Java 向量计算:实现与优化
1. 引言
在编程领域,向量计算能力能显著提升程序性能。然而,传统的向量计算方法,如插入内联汇编、调用向量内在函数、使用向量 API 编写程序等,对 Java 程序员并不适用。为了将向量计算能力引入 Java 世界,我们开发了两种互补的方法:基于库的编程方法和基于编译的自动方法。
2. 相关工作
- Jikes RVM 中的 SLP 自动向量化器 :使用修改后的树模式匹配算法识别相似连续指令并转换为等效向量指令,依赖循环展开进行不同迭代的计算向量化。但处于初始阶段,不生成真正的单指令多数据(SIMD)指令,而是用 32 位整数指令模拟 16 位短整型和 8 位字节类型的简单向量计算。
- GCC 编译器的自动向量化 :支持简单的基于循环的自动向量化和循环中的交错内存访问。不过,当前 GCC 向量化器的内存访问步长必须是 2 的幂次方常量。我们的自动向量化算法无此限制,会展开无法向量化的循环部分,若展开指令访问连续地址,互补的 SLP 向量化器可进一步将其分组为向量指令。后来 GCC 向量化器的重要改进是将 SLP 向量化集成到之前的基于循环的向量化器中,形成循环感知的 SLP 向量化器,能更灵活处理各种内存访问模式。
- Intel C++ 编译器(ICC) :提供四级向量化支持,包括内联汇编、内在函数、C++ 向量库和自动向量化。C++ 向量库提供带有重载运算符的向量类,操作由编译器前端转换为向量中间表示(IR)。我们的 Java 向量类库功能类似,但因 Java 不支持运算符重载
超级会员免费看
订阅专栏 解锁全文
887

被折叠的 条评论
为什么被折叠?



