Здравствуйте, Rival, Вы писали:
Синтаксис Mono.Simd не помню, но в таком стиле.
public class/struct Matrix4
{
public float M11, M12, M13, M14,
M21, M22, M23, M23,
M31, M32, M33, M34,
M41, M42, M43, M44
}
// код перемножения
{
var row1 = new Vector4f(matrix1.M11,matrix1.M12,matrix1.M13,matrix1.M14) * new Vector4f(matrix1.M11,matrix1.M21,matrix1.M31,matrix1.M41);
var row2 = new Vector4f(matrix1.M21,matrix1.M22,matrix1.M23,matrix1.M24) * new Vector4f(matrix1.M12,matrix1.M22,matrix1.M32,matrix1.M42);
var row3 = new Vector4f(matrix1.M31,matrix1.M32,matrix1.M33,matrix1.M34) * new Vector4f(matrix1.M13,matrix1.M23,matrix1.M33,matrix1.M43);
var row4 = new Vector4f(matrix1.M41,matrix1.M42,matrix1.M43,matrix1.M44) * new Vector4f(matrix1.M14,matrix1.M24,matrix1.M34,matrix1.M44);
var returnMat = new Matrix4();
returnMat.M11 = row1.X;returnMat.M12 = row1.Y;returnMat.M13 = row1.Z;returnMat.M14 = row1.W;
// и т.д.
...
}
P.S.
сам хотел поиграться с этим делом(Mono.Simd), как раз активно матрицы множу в проекте.
Так что сообщи пожалуйста о результатах, но тут думаю дело в доступе к массивам. На тестах у меня как раз доступ к полю был быстрее раза в два.
«История жизни – это, по существу, развитие сознания, которое завуалировано морфологией.» Пьер Тейяр де Шарден