2013-06-17 3 views
0

У меня есть код нужно сделать некоторые умножения матриц какумножения матриц в С-код

ML2=ML+uMc+c1+c2 
    MC2=v*ML+(u*v+1)*Mc+c2 

Где ML является MXM матрица

ML=[1 1 1 1....1;2 2 2 2...2......;M M M.....M] 
    MC=[1 2 3 4 ...M;1 2 3 4...M......;1 2 3.....M] 

и, v, c1 и c2 постоянны 8 немного.

Я хочу найти значения ML2, MC2 в быстрое время выполнения, используя любые быстрые библиотеки

+0

Я думаю [этот вопрос] (http://stackoverflow.com/questions/4501322/c-libraries-for-mathematics-matrix-operations) поможет вам. – Josh

ответ

0

Для умножения матрицы А (Axb) и matrixB (BXC) матрицы привести к matrixC (AxC)

for(int i=0;i<l;i++) 
{ 
    for(int j=0;j<n;j++) 
    { 
     matrixC[i][j]=0; 
     for(int k=0;k<m;k++) 
     { 
      matrixC[i][j]=matrixC[i][j]+(matrixA[i][k] * matrixB[k][j]); 
     } 
    } 
} 
+1

Это наивная реализация матричного умножения, которая очень неэффективна. Вероятно, он получит менее 1% от эффективности пиковых FLOPS/s процессора. ОП запросил быструю библиотеку. –

1

вы не указать платформу, которую вы хотите это для, но и для матричных операций ничего быстрее, чем Intel Math Kernel Library для процессоров Intel

http://software.intel.com/en-us/intel-mkl

Это приближается, как я видел, к пиковым выбросам на CPU. MKL, однако, является дорогостоящим и закрытым источником. Если вам нужна хорошая открытая исходная и бесплатная альтернатива, тогда проверьте Eigen. Это использует C++, но я не знаю, действительно ли вы ограничены только кодом C. Eigen также хорошо работает на другом оборудовании, таком как AMD (Intel калечит его библиотеку на процессорах AMD) и ARM.

http://eigen.tuxfamily.org/index.php?title=3.0

Третий вариант, чтобы написать его самостоятельно. После нескольких недель усилий не должно быть слишком сложно победить Eigen с помощью AVX и OpenMP (Eigen поддерживает только SSE), но маловероятно, что вы побьете MKL.

+0

Спасибо за все, но мне нужна быстрая бесплатная библиотека, чтобы сделать матричное умножение в коде C, а не на других языках, а также op - 32-битный Windows –

0

Поскольку ML является связкой идентичных векторов 1: M, а MC - это только транспонирование ML, вам не требуется общее умножение матрицы. Вы можете взять алгебраические сокращения.

Смежные вопросы