[c] BLAS, LAPACK 및 ATLAS의 관계는 무엇입니까

BLAS, LAPACK 및 ATLAS가 어떻게 관련되어 있고 어떻게 함께 사용해야하는지 모르겠습니다. 나는 모든 매뉴얼을 살펴 보았고 BLAS와 LAPACK에 대한 일반적인 아이디어와 내가 찾은 몇 가지 예제와 함께 사용하는 방법을 알고 있지만 ATLAS를 사용하여 실제 예제를 찾을 수는 없습니다. 이 두.

행렬에 대해 저수준 작업을 수행하려고하는데 기본 언어는 C입니다. 먼저 GSL을 사용하고 싶지만 최상의 성능을 원한다면 BLAS와 ATLAS를 사용해야한다고 말합니다. 이들을 모두 함께 사용하는 방법에 대한 좋은 예를 제공하는 좋은 웹 페이지가 있습니까? 다른 말로, 나는이 세가지 (또는 그것들의 일부)를 사용하는 것에 대한 튜토리얼을 찾고 있습니다. 요컨대 나는 혼란 스럽다!



답변

BLAS는 저수준 행렬 및 벡터 산술 연산 ( “스칼라에 벡터 곱하기”, “두 개의 행렬 곱하기 및 세 번째 행렬에 더하기”등) 모음입니다.

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

ATLAS는 BLAS 인터페이스의 이식성이 뛰어나고 합리적으로 구현되며 가장 일반적으로 사용되는 LAPACK 작업도 구현합니다.

“사용해야 할”내용은 수행하려는 작업과 사용중인 플랫폼에 대한 세부 사항에 따라 다릅니다. 그러나“use ATLAS + LAPACK”을 사용하면 그리 잘못되지 않을 것입니다.


답변

나는 일부 선형 대수학 일을 시작했을 때 전 있지만, C그것은을위한 그래서 몇 가지 자습서가 볼 수있는 놀라운 나에게 와서 BLAS, LAPACK그리고 다른 기본적인 API그들은 어떻게 든 많은 다른 라이브러리의 초석이라는 사실에도 불구하고,들. 이 때문에 I가 인터넷을 통해 내가 모두 찾을 수있는 모든 예 / 자습서를 수집하기 시작 BLAS, CBLAS, LAPACK, CLAPACK, LAPACKE, ATLAS, OpenBLAS…에서 이 Github에서의 REPO .

글쎄, 나는 기계 엔지니어로서 그런 깃 저장소 또는 GitHub를 관리 한 경험이 거의 없다는 것을 경고해야합니다. 먼저 여러분에게 완전한 혼란으로 보일 것입니다. 그러나 지저분한 구조를 극복하면 도움이 될 수있는 모든 종류의 예제와 지침을 찾을 수 있습니다. 나는 그것들을 컴파일하기 위해 대부분을 시도했다. 그리고 내가 컴파일하지 않은 것들에 대해 언급했습니다. GNU compilers( gcc, g++gfortran) 로 컴파일 가능하도록 많은 항목을 수정했습니다 . 나는 프로그램 이나 프로그램 에서 MakeFile개별 Fortran/FORTRAN루틴을 호출하는 방법을 배우기 위해 읽을 수있는 것을 만들었습니다 . 또한 Mac 및 Linux (죄송한 Windows 사용자!)에 대한 설치 지침을 작성했습니다. 나도 만들었 어CC++bash .sh 이 라이브러리 중 일부의 자동 컴파일을위한 파일.

그러나 다른 질문에가는 : BLAS그리고 LAPACK오히려 있습니다 API특정 아니에요 SDK들. 그것들은 구현이나 라이브러리가 아닌 사양 또는 언어 확장 목록 일뿐입니다. 그 말로 Netlib의 에 의해 구현 된 원본이 FORTRAN 77있으며 대부분의 사람들은 BLAS및 에 대해 이야기 할 때 (혼란합니다!) LAPACK. 따라서이 APIs를 사용할 때 많은 이상한 것을 보게되면 실제로 라이브러리와 함수 FORTRANC아닌 루틴을 호출했기 때문 C입니다. ATLAS그리고 OpenBLAS최고의 구현의 일부 BLASLACPACK내가 아는 한. 그들은 API비록 그들이 구현 한 내 지식 에 따라 원본을 준수합니다 .C/C++처음부터 (확실하지 않습니다!). 의 GPGPU 구현이 있습니다 API사용의 OpenCL: CLBlast는 , clBLAS는 , clMAGMA , ArrayFireViennaCL이 일부 언급은. 특정 하드웨어 또는 플랫폼에 최적화 된 공급 업체별 구현도 있으므로 누구나 사용하지 않는 것이 좋습니다.

사용 배우고 싶은 사람에게 나의 추천 BLAS하고 LAPACK있는이 C배우는 것입니다 FORTRAN-C첫번째 혼합 프로그래밍. 언급 된 리포지토리의 첫 번째 장은이 문제에 전념하고 있으며 여러 가지 예를 모았습니다.

추신 : 나는 때때로 저장소의 개발 부서 에서 일해 왔습니다 . 약간 덜 지저분 해 보인다!


답변

ATLAS는 이제 상당히 구식입니다. 다양한 플랫폼에 BLAS를 최적화하는 것이 인간의 능력을 넘어서는 것이라고 생각할 때 개발되었으며, 그 결과 자동 생성 및 자동 조정이 진행되었습니다.

2000 년대 초에는 Kazushige Goto가 등장했습니다. 당신은 뉴욕 타임즈에서 흥미로운 기사를 즐길 수 있습니다 : https://www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- computer-keeps.html .

한편 Kazushige는 고성능 매트릭스 매트릭스 곱셈 구현에 대한 이론에 대한 통찰력을 향상 시켰으며 다른 한편으로는이를 더 잘 설계했습니다. 현재 CPU에서 가장 성능이 뛰어난 그의 접근 방식은 ATLAS가 자동 튜닝하는 검색 공간에 없습니다. 따라서 ATLAS는 본질적으로 열등합니다. Kazushige의 BLAS 구현은 GotoBLAS로 알려졌습니다. 그가 산업에 합류했을 때 OpenBLAS로 포크되었습니다.

GotoBLAS의 기본 개념은 새로운 알고리즘 인 BLAS (BLACK-like Library Instantiation Software) 프레임 워크 ( https://github.com/flame/blis ) 로 리팩토링되어 동일한 알고리즘을 구현하지만 코드를 덜 구성합니다. 새로운 아키텍처를 위해 맞춤형으로 구현해야합니다. BLIS는 C로 코딩됩니다.

이 토론에서 보여주는 것은 BLAS의 구현이 많이 있다는 것입니다. BLAS 자체는 사실상 인터페이스의 표준입니다. ATLAS는 한때 최첨단 기술이었습니다. 더 이상 없습니다.


답변

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


답변