Если вы работаете с большими матрицами, всегда есть возможность транспонировать и / или декомпозировать ваши матрицы. И да, SIMD не для слабонервных.
ой код для ускорения умножения матриц, но он всего на 5% быстрее, чем простой. Что я могу сделать, чтобы увеличить его как можно больше?
* К таблицам обращаются, например, как:С [sub2ind (I, J, N)] дляC [i, j] позиция.
void matrixMultFast(float * const C, /* output matrix */
float const * const A, /* first matrix */
float const * const B, /* second matrix */
int const n, /* number of rows/cols */
int const ib, /* size of i block */
int const jb, /* size of j block */
int const kb) /* size of k block */
{
int i=0, j=0, jj=0, k=0, kk=0;
float sum;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[sub2ind(i,j,n)]=0;
for(kk=0;kk<n;kk+=kb)
{
for(jj=0;jj<n;jj+=jb)
{
for(i=0;i<n;i++)
{
for(j=jj;j<jj+jb;j++)
{
sum=C[sub2ind(i,j,n)];
for(k=kk;k<kk+kb;k++)
sum += A[sub2ind(i,k,n)]*B[sub2ind(k,j,n)];
C[sub2ind(i,j,n)]=sum;
}
}
}
}
} // end function 'matrixMultFast4'
* Он написан на C и должен поддерживать C99