2012-01-05 8 views
0

많은 Norms, Dot Products 및 가장 중요한 Matrix Vector 곱셈을 수행해야하는 어플리케이션이 있습니다.BLAS 2 용 Fortran vs

매트릭스 및 벡터는 거대한입니다. 매트릭스 치수는 100000x100000

루프 구조로 경향이되어 있습니다 : 나는 현재 인텔 MKL과 인텔 포트란을 사용하고

while(condition) 
/* usually iterations=dimension of matrix, so around 1 million iterations are *at least* required (if not more) */ 
matrix-vector multiplication 
3 dot prods 
2 norms 

. Intel MKL을 사용하는 Intel C의 코드를 다시 작성합니까? 누구도 DGEMV의 벤치 마크를 수행하지 않았습니까? 코드를 다시 작성하는 것은 큰 어려움이 있지만 이유를 알았다면 다시 작성할 수 있습니다.

EDIT : I misspoke : 행렬 크기는 백만 개가 아닙니다. 꽤 심각한 오류 : |

그렇습니다. 행렬 은 밀도가 높고 밀도가 높기 때문에입니다. 또한 대칭이 아니며 양의 확정적도 아닙니다. 내 알고리즘은 QMR의 수정 된 버전입니다.

+2

4000GB 밀도 매트릭스로 작업하고 계십니까? 좀 더 자세히 알려주세요 .... – talonmies

+3

1x1M 매트릭스의 복식은 8TB (8,000GB)의 메모리가 필요하다는 것을 알고 계실 것입니다. 조밀 한 매트릭스가 정말로 필요하다고 확신합니까? 귀하의 알고리즘은 행렬 - 벡터 곱을 필요로하는 전형적인 itarative linear algebra 알고리즘처럼 들립니다. 나는 당신의 행렬이 표준 BLAS 루틴의 일부가 아닌 특별한 데이터 구조가 존재하는 드문 드문 구조를 가지고 있다고 확신한다. 이는 언어 전환으로 얻을 수있는 작은 속도 향상 (있는 경우)을 제공하는 대신 O (n^3)에서 O (n^2)로 코드를 가속화하기 때문에 최적화를 찾는 첫 번째 포인트가됩니다. –

+0

인텔 C는 무엇입니까? ISO C99 또는 다른 표준 언어를 사용해야합니다. Intel 직원으로 써서 Intel을 반대하지는 않습니다 .- – Jeff

답변

9

성능은 라이브러리 호출을 지원하는 실제 구현이 동일하고 코드의 본질적으로 모든 시간이 라이브러리 호출에 소요되므로 C 또는 Fortran에서 완전히 동일합니다.

+0

첫째, 완전히 명확하지 않은 경우, 이는 슈퍼 컴퓨팅 문제이며 코드를 자세히 설명했습니다. OpenMP 작성/파괴 기능과 Matrix Vector에서 BLAS 1/2가 단순한 병렬화가 아니기 때문에 많은 시간이 낭비되는 것으로 나타났습니다. 장벽이나 동기화 문제가 없습니다. C가 내 고유의 단축키를 제공 할 수 있다면, 나는 다시 쓰고 싶을 것이다. –

+9

그런 다음 프로파일 링 정보를 제공하고 그에 대한 제안을 요청해야합니다. 원래의 질문은 단지 무의미하다. C에서 라이브러리 루틴을 호출하는 것이 FORTRAN에서 동일한 라이브러리 루틴을 호출하는 것보다 더 빠를 것입니다. 특히 루틴이 FORTRAN으로 주로 작성 되었기 때문입니다 (적어도 어느 시점에서). C는 어떻게 "바로 가기"를 제공하겠습니까? –