BLAS, LAPACK 및 기타 선형 대수 라이브러리의 관계는 무엇입니까?


26

내가 작업 한 프로젝트의 C ++ 선형 대수 라이브러리를 살펴 보았습니다. 여전히 이해하지 못하는 것은 BLAS와 LAPACK을 다른 선형 대수 라이브러리에 연결하는 것입니다.

선형 대수 라이브러리에 대한이 기사를 살펴보면 흥미로운 점을 발견했습니다.

  • 일부 라이브러리는 BLAS 및 LAPACK과 독립적입니다.
  • 일부는 BLAS 및 LAPACK이 필요합니다
  • 일부는 BLAS 및 LAPACK에 대한 선택적 인터페이스가 있습니다.
  • 내가 이해 한대로 BLAS와 LAPACK을 사용하여 선형 대수 문제를 직접 해결할 수 있습니다.

일부 라이브러리는 단순히 C 및 Fortran으로 작성된 BLAS 및 LAPACK 라이브러리에 대한 C ++ 인터페이스이고 다른 라이브러리는 자체 대체 루틴을 구현했다고 상상할 수 있습니다.

  1. BLAS 및 LAPACK에 대한 선택적 인터페이스의 의미는 무엇입니까? 옵트 아웃하여 무엇을 잃어 버리고 있으며 대신 도서관은 무엇을하고 있습니까?

  2. 라이브러리 중 하나가 단순한 인터페이스 이상의 것을 제공합니까? 예를 들어 UMFPACK은 C로 작성되었으며 BLAS 및 LAPACK에 대한 선택적 인터페이스가 있습니다. BLAS와 LAPACK이 자체적으로 할 수없는 UMFPACK (또는 다른 라이브러리)은 무엇을 할 수 있습니까?

답변:


15

내가 아는 한, Lapack은 수많은 알고리즘 (비대칭 밀도 고밀도 솔버, 의사-이차 시간 대칭 고유 솔버, 빠른 Jacobi SVD)의 공개적으로 사용 가능한 유일한 구현입니다. BLAS + Lapack에 의존하지 않는 대부분의 라이브러리는 행렬 곱셈, LU 분해 및 QR 분해와 같은 매우 원시적 인 작업을 지원하는 경향이 있습니다. Lapack에는 다른 곳에서는 구현되지 않은 고밀도 매트릭스 계산을위한 가장 정교한 알고리즘이 포함되어 있습니다.

따라서 (적어도 부분적으로) 귀하의 질문에 대답하기 위해

  1. BLAS / Lapack을 선택 해제하면 대체 인터페이스가없는 드문 옵션 인터페이스가 설계되지 않은 경우 일반적으로 기능이 누락되지 않습니다. 매우 정교한 작업을 원한다면 다른 라이브러리는 자체적으로 구현하지 않을 것입니다. BLAS는 아키텍처에 맞게 조정될 수 있기 때문에 엄청난 속도 향상을 놓칠 수 있습니다 (속도 차이는 거의 없습니다).

  2. 희소 행렬 분해를위한 UMFPACK에 대해 언급합니다. BLAS / Lapack은 밀도가 높은 매트릭스에만 관심이 있습니다. 일부 레벨의 UMFPACK은 사용자 정의 구현을 사용하거나 BLAS / Lapack을 호출하여 수행 할 수있는 중간 크기 밀도 문제에 대해 작업해야합니다. 여기서 차이는 속도에만 있습니다.

속도가 중요한 경우 선택적인 BLAS / Lapack 바인딩을 지원하는 라이브러리를 사용하고 더 빠르게 원하는 경우이를 사용하십시오.


3
  1. BLAS 및 LAPACK 루틴 (가장 중요하게는 BLAS 루틴)의 올바른 구현은 동일한 기능의 순진한 구현보다 훨씬 빠를 수 있습니다. 그러나 효율적인 구현에는 일반적으로 실행중인 특정 컴퓨터에 매우 특정한 최적화가 포함됩니다. 동일한 제조업체의 다른 프로세서 모델 (예 : 인텔 x86-64 프로세서)도 좋은 성능을 얻으려면 매우 다른 코드가 필요합니다. 최적화 된 BLAS / LAPACK 라이브러리를 소프트웨어 패키지에 제공하면 일반적으로 최적화되지 않은 루틴을 사용하는 것과 비교하여 코드 속도를 높일 수 있습니다. 그러나 많은 일반 사용자에게는 최적화 된 루틴을 설치하는 데 대한 전문 지식이 없을 수 있으므로 일반적으로 최적화되지 않은 선형 대수 루틴을 사용하는 옵션을 제공하는 것이 일반적입니다.

  2. UMFPACK은 희소 행렬 (0 엔트리의 비율이 높은 행렬)에서 선형 대수에 대한 루틴 라이브러리입니다. BLAS / LAPACK을 사용하여 발생하는 고밀도 행렬 (또는 행렬 내의 고밀도 블록)을 처리 할 수 ​​있습니다.


1

짧은 버전 : 주로 Fortran으로 작성된 라이브러리로, 많은 언어에서 수치 연산에 사용됩니다. 심지어 속도와 최적화로 인해 일부 C 프로그램도 있습니다. 그들은 또한 많은 알고리즘의 유일한 오픈 소스 구현 중 일부입니다 :)

의존성이없는 라이브러리를 사용할 필요는 없습니다. iirc 대부분은 상당히 독립적이며 아키텍처를 위해 더 나은 벡터화 함수와 같은 자신의 수학 함수를 항상 작성할 수 있습니다


1
가장 최적화 된 BLAS 및 LAPACK 루틴은 오랫동안 포트란 작성을 중단했습니다. 가장 빠른 BLAS 및 LAPACK 루틴은 일반적으로 netlib에서 다운로드 된 루틴이 아닙니다. 대부분의 프로세서 공급 업체는 칩 전용으로 설계된 BLAS 및 LAPACK의 최적화 된 버전을 판매하거나 배포합니다.
Bill Barth

죄송합니다. 인터넷에 배포 된 것들은 일반적인 것입니다. 물론 칩 특정 칩은 이식성이 떨어집니다. 즉, 인텔의 벡터 트릭 중 일부는 AMD 칩에서 제대로 작동하지 않기 때문에 라이브러리에 대한 면책 ​​조항이 있습니다. 그리고 다른 이름으로 브랜드가 바뀌었을 것입니다.
Eiyrioü von Kauyf

@BillBarth BLAS는 확실하지만 LAPACK 루틴도 다시 작성 되었습니까? 긴 BLAS 3이 성능이 우수하거나 멀티 스레드 인 경우 Afaik은 모든 이점을 제공합니다.
stali

1
BLAS와 LAPACK을 함수 이름과 인터페이스 이름으로 생각합니다. ACML, ESSL, MKL, ATLAS 등 다양한 구현이 있습니다.
Bill Barth

1
ATLAS와 같은 인터페이스 일뿐입니다. 실제 라이브러리가 아닙니다.
Eiyrioü von Kauyf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.