2013-07-25 8 views
93

BLAS, LAPACK 및 ATLAS가 어떻게 관련되어 있고 어떻게 함께 사용해야하는지 이해할 수 없습니다! 나는 모든 매뉴얼을 검토하고 BLAS와 LAPACK에 대한 일반적인 생각과 내가 찾은 몇 가지 예제를 사용하는 방법을 알고 있지만 ATLAS를 사용하여 실제 예제를 찾을 수는 없다. 이 두 사람.BLAS, LAPACK 및 ATLAS의 관계는 무엇입니까

매트릭스에서 저수준 작업을하려고합니다. 기본 언어는 C입니다. 먼저 GSL을 사용하고 싶지만 BLAS와 ATLAS를 사용해야하는 경우 가장 좋은 성능을 원합니다. 이 모든 것을 함께 사용하는 좋은 예를 보여주는 좋은 웹 페이지가 있습니까? 다른 말로하면이 세 가지 (또는 그 중 일부만 사용)에 대한 자습서를 찾고 있습니다. 간단히 말해서 나는 혼란 스럽다!

+1

또한보십시오 http://scicomp.stackexchange.com/questions/8052/what-is-the-relationship-of-blas-lapack-and-other-linear-algebra- libraries –

답변

8

나는이 간단한 웹 페이지를 둘러보고 몇 가지 간단한 예제 만 사용하여이 두 웹 페이지를 찾을 수있었습니다. 더 많은 사람들이이 라이브러리를 사용하기위한 코드 예제를 추가하기를 바랍니다.

http://www.lindonslog.com/programming/atlas-blas-lapack-linear-algebra-libraries/

+2

이 repo를 보시기 바랍니다 : https://github.com/Foadsf/Cmathtuts 여기 예제를 많이 수집했습니다. 내가 인터넷에서 찾을 수있는 거의 모든 것, 언급 한 게시물에있는 것들도 포함됩니다. – Foad

112

BLAS는 저수준 행렬 및 벡터 산술 연산 모음 ("스칼라로 벡터 곱하기", "두 행렬 곱하기 및 세 번째 행렬에 추가"등)입니다.

LAPACK은 상위 선형 대수 연산 모음입니다. "행렬의 고유 값 찾기"또는 "행렬의 특이 값 찾기"또는 "선형 시스템 분석"과 같은 일을하는 데 사용되는 행렬 인수 분해 (LU, LLt, QR, SVD, Schur 등) ". LAPACK은 BLAS 위에 구축되었습니다. LAPACK의 많은 사용자 은 LAPACK 인터페이스를 사용하며 BLAS를 전혀 알 필요가 없습니다. LAPACK은 일반적으로 BLAS와 별도로 컴파일되며 사용 가능한 고도로 최적화 된 BLAS 구현을 사용할 수 있습니다.

ATLAS는 가장 일반적으로 사용되는 LAPACK 작업 중 몇 가지를 구현하는 BLAS 인터페이스를 휴대하고 합리적으로 잘 구현합니다.

"사용해야 할 사항"은 수행하려는 작업의 세부 사항과 사용중인 플랫폼에 따라 다소 다릅니다. 그러나 "ATLAS + LAPACK 사용"으로 너무 멀리 잘못하지는 않을 것입니다.

+0

설명을위한 감사합니다. ATLAS + LAPACK을 사용하는 방법에 대한 예를 알고 있습니까? 이들을 사용하는 방법을 이해하기 위해 몇 가지 예를 살펴볼 필요가 있습니다! 나는 그들이 무엇을하는지, 그리고 그들이 무엇을하는지에 대한 이론을 이해하지만, C에서 실제 구현 방법에 대한 예제를 거의 찾을 수 없습니다. – makhlaghi

+1

@astroboy : 당신이 실제로하려고하는 것에 대한 정보를 좀 주시겠습니까? LAPACK은 특히 거대한 * 라이브러리입니다. –

+0

간단히하기 위해 매트릭스가 있고 특정 값으로 곱하기를 원한다고 가정 해 봅시다. C에서 ATLAS와 (LAPACK 또는 BLAS)를 어떻게 조합 할 수 있습니까? 이 함수들을 구현하는 법을 알고 싶습니다. http://www.netlib.org/lapack/lapacke.html에 몇 가지 예가 있지만 ATLAS에 대한 언급은 없습니다! – makhlaghi

2

http://www.seehuhn.de/pages/linear

내 BLAS, ATLAS 사이의 관계에 대한 인터넷 검색, LAPACK 해당 페이지로 저를 가져왔다. 질문은 이미 오래되었지만 Stephen Canon의 대답은 초기 이해에 매우 도움이되었지만 같은 질문이있는 다른 사람들에게 Wikipedia entry on BLAS으로 회부합니다. 페이지와 링크는 내게 매우 도움이되었습니다. 내가 C 일부 선형 대수학 일을 시작했을 때

+0

위키 링크는 확실한 참고서입니다.하지만 블래스터와 아틀라스에 초점을 맞추고 있습니다. – javadba

21

전에 있지만, 그것은 그들이 초석이 든 사실에도 불구하고, BLAS, LAPACK 및 기타 기본적인 API들에 대한 그래서 몇 가지 자습서가 볼 수있는 놀라운 나에게왔다 다른 많은 도서관의 그런 이유로 나는 BLAS, CBLAS, LAPACK, CLAPACK, LAPACKE, ATLAS, OpenBLAS 더 ... this Github repo 모든 인터넷을 통해 찾을 수있는 모든 예제/자습서를 수집하기 시작했다.

글쎄, 나는 기계 공학자로서 그런 repo 또는 github을 관리하는데 거의 경험이 없다는 것을 경고해야합니다. 그것은 처음에는 너희들에게 완전한 혼란으로 보일 것이다. 그러나 지저분한 구조를 극복 할 수 있다면 모든 종류의 예제와 지침이 도움이 될 것입니다. 필자는 컴파일을 확실히하기 위해 노력했지만 컴파일하지 않은 것은 내가 언급했다.나는 많은 것들을 GNU compilers (gcc, g++ 그리고 gfortran)으로 편집 할 수 있도록 수정했다. 나는 을 작성하여 C 또는 C++ 프로그램의 개별 Fortran/FORTRAN 루틴을 호출하는 방법을 학습 할 수 있습니다. 나는 또한 맥과 리눅스 (미안 윈도우즈!)에 대한 몇 가지 설치 지침을 넣어. 또한 일부 라이브러리의 자동 컴파일을 위해 bash.sh 개의 파일을 만들었습니다. 및 LAPACK은 다소 API이 아닌 SDK입니다. 다른 질문으로 이동하십시오. BLASLAPACKAPI이 아닌 SDK입니다. 그것들은 구현이나 라이브러리 라기보다는 사양 또는 언어 확장 목록 일뿐입니다. 그렇다면 Netlib의 원래 구현은 BLASLAPACK 일 때 대부분의 사람들이 참조하는 (혼란스럽게도!) FORTRAN 77입니다. 따라서 API을 사용할 때 이상한 일들이 많이 발생한다면 C 라이브러리와 함수가 아닌 C에 실제로 FORTRAN 루틴을 호출했기 때문입니다. ATLASOpenBLAS은 내가 알고있는 한 BLASLACPACK의 가장 좋은 구현 중 일부입니다. 원래 API에 부합하지만, 내 지식으로는 처음부터 C/C++에 구현되었습니다 (확실하지 않습니다!). 또한 특정 하드웨어 나 플랫폼에 최적화 된 벤더 특정 구현이 있으므로 누구나 사용을 강력히 권유합니다.

CBLASLAPACK를 사용하여 배우고 싶은 사람에게 나의 추천 먼저 FORTRAN-C 혼합 프로그래밍을 배우는 것입니다. 언급 된 repo의 첫 번째 장은이 문제에 전념하고 있으며 여러 가지 다른 예를 수집했습니다.

+5

일부 SO 사용자의 적대감을 결코 이해하지 못했습니다. 나는 몇몇 사람들에게 정말로 도움이 될 수있는 이러한 예들을 몇 주 동안 모으고 마침내 나는이 질문에 답하기에 충분한 점수를 얻었을 때 어떤 사람들이 나를 찬성표를 던지며 투표했다. 난 이해가 안 돼요. 이 회신에서 실수를 저 지르면 간단히 의견을 말하고 알려 주시면 편집하고 개선 할 수 있습니다. 또는 편집을 제안 할 수 있으며 검토 및 적용 할 수 있습니다. – Foad

+2

Foad 이전 댓글이지만 노력과 좌절에 감사드립니다. 나는 적개심을 이해하지 못한다.나는 민속의 사용을 노선으로 생각하며, 잔디밭으로 발걸음을 옮기는 사람을 아래로 투표함으로써 질투심을 지켜줍니다. – cdcdcd

+1

@cdcdcd 늦은 답장과 친절한 말에 대한 사과드립니다. 네 말에 전적으로 동의 해. 물론 초보 사용자 인 SO 사용자로서 많은 문제를 해결할 수는 있지만 개선을위한 권장 사항을 제공하지 않고 나를 downvoting하는 것은 다소 파괴적입니다. 나는 우리가 서로에 대해보다 관대하고 참을성있게 될 날을 고대합니다. – Foad

0

내가 아는 한 ATLAS 저장소를 통해 작업 한 결과, C에 BLAS를 다시 구현 한 것으로 보입니다. 그보다 조금 더 많지만 질문에 대답하기를 바랍니다.