簡體   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