【问题标题】:Fast Java matrix library suitable for JOGL + generic matrix math?适用于 JOGL + 通用矩阵数学的快速 Java 矩阵库?
【发布时间】:2011-06-10 21:37:32
【问题描述】:

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

【问题讨论】:

    标签: java matrix jogl


    【解决方案1】:

    您只需要操作 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;
    }
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          另一方面,机器学习算法需要针对并行计算进行优化的大型矩阵。像Parallel Colt 这样的东西是合适的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-28
            • 1970-01-01
            • 1970-01-01
            • 2015-03-18
            • 2019-04-03
            • 2013-07-12
            相关资源
            最近更新 更多