2012-09-08 5 views
13

저는 fortran 90/95에서 스파 스 행렬을 처리하기위한 라이브러리를 찾고 있습니다. 행렬 - 벡터 곱셈과 같은 아주 기본적인 연산 만 필요합니다. 내가 쓰는게 뭐라 생각하니?스파 스 매트릭스 용 Fortran 90/95 라이브러리?

나는 주위를 수색하고 BLAS의 확장은 폭발 기술 포럼 사양의 제 3 장에서 설명하는 "스파 스 BLAS를",라고 (?) :

http://www.netlib.org/blas/blast-forum/,

이상적 보인다. 이 문서에 따르면, 도서관에 대한 포트란 95 인터페이스가 있어야합니다. 그러나, 나는 다운로드 할 수 있었던 곳이라면이 스펙의 실제 구현을 찾을 수 없었다. 포트란 95 스파 스 블라스 사양이 실제로 구현되지 않는다는 인상을 받고 있습니까? 어쨌든 오픈 소스가 아닙니다.

나는 또한 도서관이 sparsekit라는 발견 :

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

사람이 두 가지 중 하나, 또는 포트란 90/95에 대한 다른 희소 행렬 라이브러리와 경험이있어? 나는 어느 것을 사용할 지에 대한 조언과, 그것을 얻을 수있는 조언을 원한다. (sparsekit의 경우 위의 링크를 통해 소스 코드를 사용할 수있다.) BLAS가 밀도가 높은 행렬과 같은 스파 스 행렬의 "표준"과 같은 것이 있습니까?

건배,

아르네

+0

F95는 언어의 일부 개정판이며 종종 F90을 사용합니다. 커다란 행렬을 가지고 무엇을 했으니 까.하지만 http://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html F90 버전 인 것 같습니다. – Rook

+0

감사합니다 Idigas,하지만 그게 다라고 생각하지 않습니다. 당신에게 연결되는 것은 BLAS 라이브러리이고, "스파 스 블라스"는 그 부분이 아닙니다. 예를 들어, "duscr_begin"(또는 "blas_duscr_begin")이라는 서브 루틴이 있어야합니다 (BLAS 라이브러리에서 찾지 못했던 스파 스 매트릭스를 초기화하는 데 사용하는 하위 항목). 나는 http://www.netlib.org/sparse-blas/index.html에서 모든 파일을 다운로드하고, "grep -i duscr_begin * .f"를 행운없이했습니다. 나는 그것이 매우 혼란 스럽다는 것을 알았다. – arne

+0

아, 그럴 수 있습니다. 나는 그것을 서둘러 마지막으로 보았다. – Rook

답변

12

OK, 나는 부분적으로 내 자신의 질문에 답변 해 드리겠습니다 :

: 스파 스 BLAS의 전체 F95 구현을 찾을 수

은 위에서 @alexurba에 의해 제공되었다

http://www.netlib.org/toms/818

그게 전부! 이 스크립트는 당신이 그것을 실행하는 폴더에 모든 소스 코드를 생성합니다 (필자는 전에 이런 방식으로 제공된 소프트웨어를 본 적이 없습니다).

INSTALL 스크립트가 작동하도록하려면 몇 가지 변경 작업이 필요했습니다. 설치 지침에 따라 INSTALL 스크립트를 편집하고 적절한 "아치"를 선택하라는 메시지가 표시됩니다. 선택 사항은 AIX, ALPHA, CRAY, HP, NAG, SGI 및 SUN입니다. 이들 중 어느 것도 나에게 적절하지 않은 것 같았습니다. 리눅스를 사용하고 있으며이 컴퓨터에있는 유일한 포트란 컴파일러는 gfortran입니다.

1) INSTALL에서 변수 SB_ARCH = 'GNU'를 설정하여 GNU라는 새 "아치"를 만들었습니다.이 옵션의 목적을 잘 이해하지 못했지만, . 2) SOFTWARE/Makefile에서 FC = f90을 FC = gfortran으로 변경하십시오. 3) TESTER에서 Makefile.NAG 파일을 Makefile.GNU로 복사하고 FC = f90을 FC = gfortran으로 변경 한 다음 'NAG'의 모든 인스턴스를 변경하십시오 '~'GNU '. (아마도 Makefile에서 FFLAGS 옵션을 바꾸기를 원할 것입니다.)

이 후에 INSTALL, TESTER/test_all을 실행하고 테스트 결과 "0.000 ..."이 나왔다고 가정합니다. 모든 것이 작동하고 있다는 것을 의미합니다.

나는이 소스 코드가 매우 어렵다는 것을 발견했다. 운 좋게도이 스레드는 "fortran 90 스파 스 매트릭스 라이브러리"를 검색 할 때 Google에서 상당히 높게 나타납니다.

최종 해결책 : 아이러니하게도 스파 스 BLAS의 전체 구현을 마침내 찾은 후에는 필자가 필요로하는 것은 매트릭스 - 벡터 곱셈이므로 직접적인 접근 방식을 사용하는 것이 더 바람직하다는 결론을 얻었습니다. (Compressed Sparse Row (CSR))이 내 문제에 적합하다고 생각하는 스파 스 매트릭스 표현을 찾아 내고 스파 스 BLAS 소스 코드에서 해당 행렬 벡터 곱셈 루틴을 찾아 입력 방법을 확인한 후 내 코드에서 직접.

+0

나는 테스트 결과가 "0.000 ..."이라는 오류가 발생하여 모든 것이 작동하고 있음을 의미한다고 가정합니다. 자, 내가 필요로하는 곳에이 라이브러리 (또는 라이브러리?)를 어떻게 사용합니까? 내 프로그램이 들어있는 디렉토리에 어떤 파일을 복사해야합니까? –