我知道有很多这样的问题,但我找不到适合我的情况的问题。我将 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/