맨위로가기

LAPACK

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

LAPACK은 선형 대수 계산을 위한 루틴 모음으로, 주로 포트란으로 작성되었으며, 다양한 프로그래밍 언어에서 사용할 수 있는 언어 바인딩을 제공한다. LAPACK 서브루틴은 `pmmaaa` 형식의 명명 규칙을 따르며, 사용되는 숫자 유형, 행렬 유형, 그리고 구현된 알고리즘을 나타낸다. LAPACK은 드라이버 루틴, 계산 루틴, 보조 루틴으로 구성되며, 선형 방정식 풀이, 고유값 문제 해결 등 다양한 문제를 처리한다. Netlib LAPACK이 공식 구현이며, ScaLAPACK, Intel MKL, OpenBLAS, 애플의 Accelerate 프레임워크 등 다양한 구현체가 존재한다.

더 읽어볼만한 페이지

  • 포트란 라이브러리 - LINPACK
    LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다.
  • 수치 해석 소프트웨어 - LINPACK
    LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다.
  • 수치 해석 소프트웨어 - NumPy
    NumPy는 파이썬에서 다차원 배열을 효과적으로 다루기 위한 라이브러리로, C API를 제공하여 외부 라이브러리와 연동을 지원하며, 다양한 연산 기능과 멀티스레딩을 통한 성능 향상을 제공한다.
  • 수치선형대수학 - 가우스 소거법
    가우스 소거법은 연립 일차 방정식의 해를 구하기 위해 행렬을 사다리꼴로 변환하는 알고리즘이며, 기본 행 연산을 통해 전진 소거와 후퇴 대입 단계를 거쳐 해를 계산하고, 행렬식 계산 등 다양한 분야에 응용된다.
  • 수치선형대수학 - LINPACK
    LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다.
LAPACK - [IT 관련 정보]에 관한 문서
일반 정보
이름LAPACK (Netlib 참조 구현)
종류소프트웨어 라이브러리
라이선스BSD-new
LAPACK 로고
개발
개발자Anderson, E.
Bai, Z.
Bischof, C.
Blackford, S.
제임스 데멜
잭 동가라
Du Croz, J.
앤 그린바움
Hammarling, S.
McKenney, A.
Sorensen, D.
프로그래밍 언어포트란 90, C 언어
릴리스 정보
최초 릴리스1992년
최신 버전3.12.0
최신 릴리스 날짜2023년 11월 24일
기타
웹사이트LAPACK 공식 웹사이트

2. 명명 규칙

LAPACK의 서브루틴 이름은 `pmmaaa` 형식의 명명 규칙을 따른다. 이는 초기 포트란 표준에서 식별자 길이를 6자로 제한했기 때문에 만들어졌다.[1]


  • `p`는 사용되는 숫자 상수의 유형을 나타내는 한 글자 코드이다.
  • `S`는 단정밀도 실수, `D`는 배정밀도 실수를 나타낸다.
  • `C`는 단정밀도 복소수, `Z`는 배정밀도 복소수를 나타낸다.
  • `mm`은 알고리즘에서 사용하는 행렬의 종류를 나타내는 두 글자 코드이다. (행렬 유형은 하위 섹션 참고)
  • `aaa`는 서브루틴에서 구현된 실제 알고리즘을 설명하는 1~3글자 코드이다.
  • `SV`는 선형 시스템을 푸는 서브루틴을 나타낸다.
  • `R`은 랭크-1 업데이트를 나타낸다.


예를 들어, 실수 배정밀도 연산을 사용하여 일반 행렬로 선형 시스템을 푸는 서브루틴은 `DGESV`이다.[1]

2. 1. 행렬 유형

LAPACK 명명 규칙의 행렬 유형
약호설명
BD이중대각 행렬
DI대각 행렬
GB일반 띠 행렬
GE일반 행렬 (비대칭, 직사각형일 수도 있음)
GG일반 행렬, 일반화된 문제 (일반 행렬 쌍)
GT일반 삼중 대각 행렬
HB에르미트 띠 행렬
HE에르미트 행렬
HG상부 헤센베르크 행렬, 일반화된 문제 (헤센베르크 행렬과 삼각 행렬)
HP에르미트 행렬, 팩 행렬
HS상부 헤센베르크 행렬
OP직교 행렬, 팩 행렬
OR직교 행렬
PB대칭 행렬 또는 에르미트 행렬 양의 정부호 띠 행렬
PO대칭 행렬 또는 에르미트 행렬 양의 정부호
PP대칭 행렬 또는 에르미트 행렬 양의 정부호, 팩 행렬
PT대칭 행렬 또는 에르미트 행렬 양의 정부호 삼중 대각 행렬
SB대칭 행렬 띠 행렬
SP대칭 행렬, 팩 행렬
ST대칭 행렬 삼중 대각 행렬
SY대칭 행렬
TB삼각 띠 행렬
TG삼각 행렬, 일반화된 문제 (삼각 행렬 쌍)
TP삼각, 팩 행렬
TR삼각 행렬 (준삼각 행렬일 수도 있음)
TZ사다리꼴 행렬
UN유니타리 행렬
UP유니타리 행렬, 팩 행렬


3. 서브루틴 구성

LAPACK의 서브루틴은 크게 드라이버 루틴, 계산 루틴, 보조 루틴의 세 가지로 나뉜다.[1]


  • 드라이버 루틴(driver routines): 선형 방정식계를 풀거나 대칭 행렬의 고유값 문제 등을 해결한다.
  • 계산 루틴(computational routines): 행렬을 LU 분해하거나 대칭 행렬을 삼중 대각 행렬로 변환하는 등의 계산 작업을 실행한다.
  • 보조 루틴(auxiliary routines): 블록 알고리즘 내부 계산이나 BLAS의 확장 기능 등을 수행한다.

3. 1. 드라이버 루틴 (Driver Routines)

LAPACK의 드라이버 루틴은 사용자가 직접 호출하여 선형 방정식계를 풀거나 대칭 행렬의 고유값 문제와 같은 특정 문제를 해결하는 데 사용된다.[1] 사용자는 자신의 요건에 맞는 기능의 드라이버 루틴이 있는 경우 해당 루틴을 사용하는 것이 좋다.[1]

3. 2. 계산 루틴 (Computational Routines)

LAPACK의 드라이버 루틴에서 호출되어 실제로 계산 작업을 수행하는 루틴이다. 드라이버 루틴은 계산 루틴을 연속적으로 호출하여 문제를 푼다. 계산 작업에는 행렬을 LU 분해하는 것이나 대칭 행렬을 삼중 대각 행렬로 변환하는 것 등이 있다. 전자는 선형 방정식계를 풀기 위해, 후자는 대칭 행렬의 고유값 문제를 풀기 위해 필요하다. 사용자의 요건에 맞는 드라이버 루틴이 없는 경우 계산 루틴을 조합하여 문제를 풀게 된다.

3. 3. 보조 루틴 (Auxiliary Routines)

BLAS의 기능을 약간 확장하고, 블록 알고리즘 내부에서 사용되는 계산 작업의 일부를 실행하는 것을 포함한다.[1]

4. 다른 프로그래밍 언어와의 연동

LAPACK은 포트란으로 작성되었지만, C, C++, Python, Java, Go, Rust 등 다양한 프로그래밍 언어에서 사용할 수 있도록 언어 바인딩이 제공된다. 특히, C 언어 인터페이스인 LAPACKE는 LAPACK 3.4.0부터 공식적으로 포함되었다.[5][6]

오늘날 많은 프로그래밍 환경은 C 바인딩(LAPACKE)을 지원하여, 몇 가지 제약 사항만 준수하면 LAPACK 루틴을 직접 사용할 수 있다. 또한 R,[7] MATLAB,[8] SciPy[9]와 같이 과학 및 수치 계산을 위한 많은 다른 소프트웨어 라이브러리와 도구가 LAPACK 위에 구축되어 있다.

C 언어에서는 관용적인 행렬의 row-major ordering을 계산하는 경우, LAPACKE에서 지정 옵션이 제공된다. 이 경우, 내부에서 행렬 전치가 수행되어 오버헤드가 발생한다.

4. 1. 언어 바인딩 목록

프로그래밍 언어바인딩
C/C++
Python
GoGonum
Rust[https://docs.rs/lapack/latest/lapack/ lapack]
기타


5. 구현체

LAPACK은 다양한 구현체가 존재하며, 특정 시스템에서 더 나은 성능을 제공하기 위해 튜닝되거나 재작성되기도 한다. LAPACK은 계산 대부분을 기본 BLAS 루틴을 호출하여 수행하므로, 더 잘 튜닝된 BLAS 구현에 연결하는 것만으로도 성능을 크게 향상시킬 수 있다. 따라서 LAPACK은 BLAS만큼 자주 재구현되지는 않는다.

LAPACK에는 서브루틴의 기능과 인터페이스에 호환성을 갖는 구현이 많이 존재한다.

5. 1. 주요 구현체 목록


  • '''Netlib LAPACK''': 공식 LAPACK이다.[10][11]
  • '''ScaLAPACK''': PBLAS를 기반으로 구축된 확장 가능한(멀티코어) LAPACK이다.
  • '''Intel MKL''': 인텔 x86 CPU용 인텔의 수학 루틴이다.
  • '''OpenBLAS''': BLAS 및 LAPACK의 오픈 소스 재구현이다.
  • '''Accelerate''': macOS 및 iOS를 위한 애플의 프레임워크로, 튜닝된 버전의 BLAS 및 LAPACK을 포함한다.[10][11]
  • '''Gonum LAPACK''': 부분적인 네이티브 Go 구현이다.

5. 2. 유사 프로젝트

다음 프로젝트들은 LAPACK과 유사한 기능을 제공하지만, 주 인터페이스는 LAPACK과 다르다.

  • '''Libflame:''' 밀집 선형 대수 라이브러리이다. LAPACK 호환 래퍼를 가지고 있다. BLIS가 선호되는 구현이지만, 어떤 BLAS와도 함께 사용할 수 있다.[12]
  • '''Eigen:''' 선형 대수를 위한 헤더 라이브러리이다. 호환성을 위해 BLAS와 부분적인 LAPACK 구현을 가지고 있다.
  • '''MAGMA:''' GPU 및 멀티코어 아키텍처에서의 행렬 대수(Matrix Algebra on GPU and Multicore Architectures) 프로젝트는 LAPACK과 유사하지만, GPGPU로 가속화된 멀티코어 시스템을 포함한 이기종 및 하이브리드 아키텍처를 위한 밀집 선형 대수 라이브러리를 개발한다.
  • '''PLASMA:''' 확장 가능한 멀티코어 아키텍처를 위한 병렬 선형 대수(The Parallel Linear Algebra for Scalable Multi-core Architectures) (PLASMA) 프로젝트는 멀티코어 아키텍처를 위한 LAPACK의 현대적인 대체재이다. PLASMA는 비동기 작업을 개발하기 위한 소프트웨어 프레임워크이며, 방향 비순환 그래프로 종속성을 표현하는 모든 코드에 사용될 수 있는 QUARK라는 런타임 스케줄러를 사용하여 순서 외 스케줄링 기능을 제공한다.[13]

참조

[1] 서적 LAPACK Users' Guide https://www.netlib.o[...] Society for Industrial and Applied Mathematics 2022-05-28
[2] 웹사이트 LAPACK 3.2 Release Notes https://www.netlib.o[...] 2008-11-16
[3] 웹사이트 PLAPACK: Parallel Linear Algebra Package https://www.cs.utexa[...] University of Texas at Austin 2017-04-20
[4] 웹사이트 LICENSE.txt https://www.netlib.o[...] 2022-05-28
[5] 웹사이트 The LAPACKE C Interface to LAPACK https://netlib.org/l[...] 2024-09-22
[6] 웹사이트 LAPACK 3.4.0 https://netlib.org/l[...] 2024-09-22
[7] 웹사이트 R: LAPACK Library https://stat.ethz.ch[...] 2022-03-19
[8] 웹사이트 LAPACK in MATLAB https://www.mathwork[...] 2022-05-28
[9] 웹사이트 Low-level LAPACK functions https://docs.scipy.o[...] 2022-05-28
[10] 웹사이트 Guides and Sample Code https://developer.ap[...] 2017-07-07
[11] 웹사이트 Guides and Sample Code https://developer.ap[...] 2017-07-07
[12] 웹사이트 amd/libflame: High-performance object-based library for DLA computations https://github.com/a[...] AMD 2020-08-25
[13] 웹사이트 ICL http://icl.eecs.utk.[...] 2017-07-07
[14] 웹사이트 lapack/LICENSE at master · Reference-LAPACK/lapack https://github.com/R[...] 2024-06-10
[15] 웹사이트 Release History - LAPACK — Linear Algebra PACKage https://www.netlib.o[...] 2024-05-25
[16] 문서
[17] 문서
[18] 문서
[19] 문서
[20] 문서



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com