Tag: 矩阵乘法

高效的4×4矩阵乘法(C vs汇编)

我正在寻找一种更快,更棘手的方法来将C中的两个4×4矩阵相乘。我目前的研究主要集中在具有SIMD扩展的x86-64汇编上。 到目前为止,我已经创建了一个函数,比一个简单的C实现快了大约6倍,这超出了我对性能改进的期望。 不幸的是,只有在没有使用优化标志进行编译时(GCC 4.7),这种情况才会成立。 随着-O2 ,C变得更快,我的努力变得毫无意义。 我知道现代编译器利用复杂的优化技术来实现几乎完美的代码,通常比巧妙的手工assembly更快。 但在少数性能关键的情况下,人类可能会尝试使用编译器争取时钟周期。 特别是,当一些支持现代ISA的数学可以被探索时(就像我的情况一样)。 我的函数如下(AT&T语法,GNU汇编程序): .text .globl matrixMultiplyASM .type matrixMultiplyASM, @function matrixMultiplyASM: movaps (%rdi), %xmm0 # fetch the first matrix (use four registers) movaps 16(%rdi), %xmm1 movaps 32(%rdi), %xmm2 movaps 48(%rdi), %xmm3 xorq %rcx, %rcx # reset (forward) loop iterator .ROW: movss (%rsi), %xmm4 # Compute four values (one row) […]