繁体   English   中英

适用于 JOGL + 通用矩阵数学的快速 Java 矩阵库?

[英]Fast Java matrix library suitable for JOGL + generic matrix math?

我有兴趣在 JOGL 2 中使用着色器而不是固定功能管道编写 OpenGL 应用程序。 我需要在 CPU 端做一些 4x4 双精度矩阵数学运算,以替换固定的 function 管道的推送/弹出/转换业务。 同一个应用程序还将包含一些需要对大型矩阵进行操作的机器学习代码。 我已经将 JBLAS 用于机器学习(并且由于我已经将 JNI 用于 JOGL,因此依赖另一个本机库的缺点很小)),但我不确定它是否是 GL- 的最佳选择相关矩阵。 想法?

您只需要操作 4x4 矩阵吗? 大多数通用线性代数库已经针对大型矩阵进行了高度优化,而很少关注较小的矩阵。 我编写EJML的部分原因是为了解决这个问题并激励其他开发人员针对小型矩阵进行优化。 EJML 对于小矩阵来说是最快的,但也有可能做得更好。

如果您真的需要很多性能,我不会使用任何常见的嫌疑人,而是使用您自己的高度专业化的代码。 应该可以多次击败通用库。

2x2 矩阵的简单示例:

public class Matrix2x2 {
  double a11,a12,a21,a22;
}

public static void mult( Matrix2x2 a , Matrix2x2 b , Matrix2x2 c ) {
  c.a11 = a.a11*b.a11 + a.12*b.a21;
  c.a12 = a.a11*b.a12 + a.12*b.a22;
  c.a21 = a.a21*b.a11 + a.22*b.a21;
  c.a22 = a.a21*b.a12 + a.22*b.a22;
}

注意我没有尝试编译这段代码,它只是一个例子。

这些基准可以帮助您选择满足您的性能需求的东西。

http://lessthanoptimal.github.io/Java-Matrix-Benchmark/

一方面,查看 JBLAS 的 API 文档,我认为这不是处理 OpenGL 矩阵的“最佳选择”,因为它缺少一些基本功能:

要使用 OpenGL 在屏幕上显示某些内容,您将需要通常的透视投影矩阵,并且可能需要一些东西来计算对象的仿射变换。 但是第一个只是你可以通过 copypasta 获得的几个 LOC,而后者是微不足道的,因为Java已经有它们,所以我认为你已经准备好 go 与你所拥有的。

您可能希望为机器学习和 OpenGL 使用不同的库

OpenGL 将显着受益于使用专门针对 2D、3D 和 4D 向量的小型、快速、优化矩阵。 这些通常包含在您的 OpenGL 库或游戏引擎中,例如 LWJGL 包括Matrix4f和朋友。 这些库还将提供各种其他与图形相关的功能,例如,您可能需要四元数进行旋转。

另一方面,机器学习算法需要为并行计算优化的大型矩阵。 平行柯尔特这样的东西是合适的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM