java - 使用 NIO 浮点缓冲区在 Java 中进行快速 4x4 矩阵乘法

标签 java math matrix nio

我知道有很多这样的问题,但我找不到适合我的情况的问题。我将 4x4 矩阵实现为 NIO 浮点缓冲区(这些矩阵用于 OpenGL)。现在我想实现一个乘法,将矩阵 A 与矩阵 B 相乘,并将结果存储在矩阵 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 东西)为此提供了 native 代码,但其他的则没有。所以我想为这些实现提供一个通用的乘法方法。

最佳答案

真正的答案当然是测试不同的实现并检查哪一个是最快的。

未经测试,我的猜测是,由于矩阵非常小,手动扩展循环会产生最快的代码。例如。像

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$。

关于java - 使用 NIO 浮点缓冲区在 Java 中进行快速 4x4 矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797479/

相关文章:

java - 矩阵和 for 循环变得不一致?

Java排序数组列表以找到最大整数

javascript - struts2中如何使用arraylist显示 "no result found"

java - 将数字缩放为 <= 255?

flutter - 如何在Dart中直接划分两个Duration对象?

没有 for 循环的 R 二进制详尽列表

java - 在 Spring Batch Flatfile Reader 中跳过页脚和页眉记录

java - 如何为 java SDK 客户端项目同时支持 maven 和 gradle

html - 如何在知道容器和箱子的大小的情况下找到容器内每个箱子的百分比(6)

Javascript 矩阵赋值在填充情况下的行为与使用循环创建矩阵的情况不同。为什么?