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

问题描述:

我有兴趣在JOGL 2中编写OpenGL应用程序,使用着色器代替固定功能管线。我需要做一些4x4双精度矩阵运算的CPU端,以取代固定功能管道的推/爆/变换业务。同一个应用程序也将包含一些机器学习代码,这些代码将需要在大型矩阵上进行操作。我已经看过JBLAS的机器学习的东西(因为我已经使用JNI作为JOGL,所以依赖于另一个本地库有最小的缺点)),但我不确定它是否是GL-相关矩阵。思考?适用于JOGL +通用矩阵数学的快速Java矩阵库?

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

如果你真的需要很多的表现,我不会使用任何常见的嫌疑人,而是推出自己的高度专业化的代码。应该可以多次击败通用库。 2×2矩阵

简单的例子:

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; 
} 

说明我还没有试过编译这段代码,它仅仅是一个例子。

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

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

这些基准测试可能会帮助您选择符合您的性能需求的产品。

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

您可能想要使用不同库用于机器学习和OpenGL。

OpenGL将从使用小型,快速,优化的矩阵中受益匪浅,这些矩阵是2D,3D和4D矢量的特例。这些通常包含在您的OpenGL库或游戏引擎中,例如LWJGL包含Matrix4f和朋友。这些库还将提供各种其他与图形相关的功能,例如,你可能想要四元数旋转。

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