2013-06-17 5 views
0

난 코드는 ML이 U는 V, C1 및 C2는도 8의 정수이다행렬 곱셈

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] 

의 MXM 행렬

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

같은 일부 행렬 곱셈을 수행 할 필요가있을 비트.

I가 matrixC 발생하는 matrixA (AXB) 및 matrixB (BXC) 행렬의 곱셈 패스트 라이브러리

+0

저는 [이 질문] (http://stackoverflow.com/questions/4501322/c-library-for-mathematical-matrix-operations)이 도움이 될 것이라고 생각합니다. – Josh

답변

0

를 이용하여 빠른 실행 시간 ML2, MC2의 값을 찾을 (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

그건 매우 비효율적 인 매트릭스 곱셈의 순진한 구현입니다. CPU의 최고 FLOPS/s 효율의 1 % 미만을 얻는 경향이 있습니다. OP는 빠른 라이브러리를 요청했습니다. –

1

당신은 당신이 있지만, 행렬 연산 아무것도이 원하는 플랫폼을 언급하지 않았다 인텔 CPU를

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

,536 용 인텔 수학 커널 라이브러리보다 빠르다

이것은 CPU에서 가능한 최고봉까지봤을 때와 비슷합니다. 그러나 MKL은 값 비싸고 폐쇄 소스입니다. 좋은 오픈 소스 및 무료 대안을 원한다면 Eigen을 확인하십시오. 이것은 C++을 사용하지만 실제로 C 코드에만 국한되는지는 알 수 없습니다. Eigen은 AMD와 같은 다른 하드웨어에서도 잘 작동합니다 (Intel은 AMD CPU의 라이브러리를 사용하지 못합니다).

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

세 번째 옵션

하나를 직접 작성합니다. 몇 주간의 노력 끝에 AVX 및 OpenMP (Eigen 만 SSE 만 지원)로 Eigen을 이길 때 너무 어렵지는 않지만 MKL을 이길 가능성은 거의 없습니다.

+0

고마워요.하지만 C 언어로 된 행렬 곱셈을 할 수있는 빠른 무료 라이브러리가 필요합니다. 다른 언어도 아니고, op도 Windows 32 비트입니다. –

0

ML은 동일한 벡터 1 : M의 무리이므로 MC는 ML의 전치 일 뿐이므로 일반적인 행렬 곱셈은 필요하지 않습니다. 대수적인 단축키를 사용할 수 있습니다.