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


143

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

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


답변:


156

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

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

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

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


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

1
@astroboy : 실제로하려는 일에 대한 정보를 제공해 주시겠습니까? LAPACK은 특히 거대한 도서관입니다.
Stephen Canon

간단히하기 위해 행렬이 있고 특정 값을 곱하고 싶다고 가정 해 봅시다. C에서 ATLAS와 (LAPACK 또는 BLAS)를 결합하여 어떻게 할 수 있습니까? 이러한 기능을 구현하는 방법을 알고 싶습니다. netlib.org/lapack/lapacke.html 에는 몇 가지 예가 있지만 ATLAS에 대한 언급은 없습니다!
makhlaghi

BLAS, LAPACK 또는 MKL과 같이 메모리보다 훨씬 큰 objetc와 투명하게 작동 할 수 있습니까?
스칸

1
@ MinhNghĩa : 표준 netlib.org/blas/blast-forum 이 있지만 (a) 시행이 없습니다-테스트 스위트가없는 표준은 실제로 표준이 아닙니다-(b) 생각하지 않습니다 누구나 해당 문서에서 설명하는 전체 인터페이스 세트를 구현합니다. 음, 열망입니다.
Stephen Canon

40

나는 일부 선형 대수학 일을 시작했을 때 전 있지만, 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첫번째 혼합 프로그래밍. 언급 된 리포지토리의 첫 번째 장은이 문제에 전념하고 있으며 여러 가지 예를 모았습니다.

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


LAPACK의 Wikipedia 페이지는 "LAPACK (Linear Algebra Package)은 표준 소프트웨어 라이브러리"로 시작합니다. 그것은 API 사양이고 구현이 아니기 때문에 그것이 틀렸다고 말하는가?
Noah_S

1
일부 연구 후 LAPACK과 BLAS는 실제로 구현 된 것 같습니다. BLAS에 대한 NetLib의 FAQ : "BLAS (기본 선형 대수 서브 프로그램)는 기본 벡터 및 행렬 연산을 수행하기위한 표준 빌딩 블록을 제공하는 루틴입니다." LAPACK의 GitHub 페이지에서 : "LAPACK은 포트란 서브 루틴의 라이브러리입니다". 이를 바탕으로 LAPACK의 GitHub 프로젝트를 읽은 결과 BLAS와 LAPACK이 실제로 구현 된 것입니다. LAPACK은 BLAS를 기반으로보다 정교한 기능을 제공합니다.
Noah_S

1
@Noah_S Wikipedia를 "the"참조로 사용하지는 않았지만 제한된 지식으로 LAPACK을 여러 가지 구현했습니다. API 호출이 더 정확하다고 생각합니다. 하지만 내가 틀렸다면 정정 해주세요.
Foad

2
나는 혼란의 일부 BLAS는 API / 사양이라고 생각하지만이 또한 도 바로 "BLAS 라이브러리"라고합니다 (NETLIB에서) BLAS의 "참조 구현". 일반적으로 사람들이 BLAS를 말할 때는 참조 구현이 최적화되지 않았기 때문에 API를 의미하므로 실제 / 산업에서는 많이 사용되지 않습니다. ATLAS는 일부 LAPACK 서브 루틴의 최적화 된 구현을 제공 한 다음 선택적으로 나머지 LAPACK을 LAPACK 자체에서 가져와 내장 된 ATLAS lib 파일에서 완전한 LAPACK 구현을 생성합니다.
Andrew Janke

1
@Noah_S 모순이 없습니다. 각 라이브러리에는 API가 있으므로 API 호환성을 유지하면서 실제 기능을 다시 구현할 수 있습니다. 이것이 LAPACK에서 발생한 일입니다.
안드레이

17

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는 한때 최첨단 기술이었습니다. 더 이상 없습니다.


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.