簡體   English   中英

Java中的快速4x4矩陣乘法與NIO浮點緩沖區

[英]Fast 4x4 matrix multiplication in Java with NIO float buffers

我知道有很多這樣的問題,但我找不到具體的情況。 我有4x4矩陣實現為NIO浮點緩沖區(這些矩陣用於OpenGL)。 現在我想實現一個乘法方法,它將Matrix A與Matrix B相乘並將結果存儲在Matrix C中。所以代碼可能如下所示:

class Matrix4f
{
    private FloatBuffer buffer = FloatBuffer.allocate(16);

    public Matrix4f multiply(Matrix4f matrix2, Matrix4f result)
    {
        {{{result = this * matrix2}}} <-- I need this code

        return result;
    }
}

執行此乘法的最快代碼是什么? 一些OpenGL實現(與Android中的OpenGL ES相似)為此提供本機代碼,但其他實現不提供。 所以我想為這些實現提供通用的乘法方法。

真正的答案當然是測試不同的實現並檢查哪一個是最快的。

我的猜測,沒有測試,將是因為矩陣是如此之小,手動擴展循環將導致最快的代碼。 比如像

result[0][0] = this[0][0] * matrix2[0][0] + this[0][1] * matrix2[1][0] 
             + this[0][2] * matrix2[2][0] + this[0][3] * matrix2[3][0];
result[0][1] = // ... and so forth

或者然后可能只是展開最里面的循環,並保留兩個最外面的循環以節省一些打字以及I $。

如果支持該操作,請瀏覽FloatBuffer.array() 然后只需通過該數組執行必要的乘法運算,並返回結果矩陣。

看看GameDev.net - Matrix Math的精確計算。

如果你想進一步優化它,你可以嘗試 Strassens算法 您甚至不需要填充矩陣,因為它們是正方形且大小為2的冪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM