Если вы работаете с большими матрицами, всегда есть возможность транспонировать и / или декомпозировать ваши матрицы. И да, 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

Ответы на вопрос(0)

Ваш ответ на вопрос