본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
요즘 화제
임의의 문서로
sitesupport
사용자 모임
사랑방
사용자 모임
관리 요청
편집 안내
소개
도움말
정책과 지침
질문방
한울위키
검색
검색
보이기
로그인
개인 도구
로그인
BLAS 문서 원본 보기
문서
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
보이기
사이드바로 이동
숨기기
←
BLAS
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
일반 사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{소프트웨어 정보 | name = BLAS | logo = <!-- Image name is enough --> | logo alt = | screenshot = <!-- Image name is enough --> | caption = | screenshot alt = | collapsible = | author = | developer = | released = <!-- {{시작 날짜와 나이|YYYY|MM|DD|df=yes}} --> | discontinued = | latest release version = 3.11.0 | latest release date = {{시작 날짜와 나이|2022|11|11|df=yes}} | latest preview version = | latest preview date = <!-- {{시작 날짜와 나이|YYYY|MM|DD|df=yes}} --> | status = | programming language = 구현체에 따라 다름 | operating system = | platform = [[크로스 플랫폼]] | size = | language = | language count = <!-- Number only --> | language footnote = | genre = [[라이브러리 (컴퓨팅)|라이브러리]] | license = | alexa = | website = {{URL|https://www.netlib.org/blas/}} | standard = | AsOf = }} '''BLAS'''(Basic Linear Algebra Subprograms, 기본 선형대수 서브프로그램)은 [[벡터 공간|벡터]] 덧셈, [[스칼라배]], [[스칼라곱]], 선형 결합, [[행렬 곱셈]]과 같은 일반적인 [[선형대수학]] 연산을 수행하기 위한 저수준 루틴 세트를 규정하는 [[시방서]]이다. 이것들은 선형대수 라이브러리를 위한 [[데 팍토]] 표준 저수준 루틴이며, 이 루틴들은 [[C (프로그래밍 언어)|C]]("CBLAS 인터페이스") 및 [[포트란]]("BLAS 인터페이스") 모두에 대한 바인딩을 가지고 있다. BLAS 시방서가 일반적이지만, BLAS 구현은 특정 머신에서 속도를 위해 최적화되어 있어 이를 사용하면 상당한 성능 이점을 얻을 수 있다. BLAS 구현은 벡터 레지스터 또는 [[SIMD]] 명령어와 같은 특수 부동 소수점 하드웨어를 활용한다. BLAS는 1979년에 포트란 라이브러리로 시작되었으며<ref name="lawson79">*{{서적 인용|last1=Lawson |first1=C. L. |last2=Hanson |first2=R. J. |last3=Kincaid |first3=D. |last4=Krogh |first4=F. T. |title=Basic Linear Algebra Subprograms for FORTRAN usage |journal=ACM Trans. Math. Softw. |volume=5 |issue=3 |pages=308–323 |date=1979 |id=Algorithm 539 |doi=10.1145/355841.355847 |hdl=2060/19780018835|s2cid=6585321 |hdl-access=free }}</ref> 그 인터페이스는 BLAS 기술(BLAST) 포럼에 의해 표준화되었으며, 최신 BLAS 보고서는 [[넷립]] 웹사이트에서 찾을 수 있다.<ref>{{웹 인용|url=https://netlib.org/blas/blast-forum|title=BLAS Technical Forum |website=netlib.org |access-date=2017-07-07}}</ref> 이 포트란 라이브러리는 [[참조 구현]](때로는 혼동되게 BLAS 라이브러리라고도 함)으로 알려져 있으며 속도를 위해 최적화되지는 않았지만 [[퍼블릭 도메인]]이다.<ref>[http://www.lahey.com/docs/blaseman_lin62.pdf blaseman] {{웹아카이브|url=https://web.archive.org/web/20161012014431/http://www.lahey.com/docs/blaseman_lin62.pdf |date=2016-10-12}} "The products are the implementations of the public domain BLAS (Basic Linear Algebra Subprograms) and LAPACK (Linear Algebra PACKage), which have been developed by groups of people such as Prof. Jack Dongarra, University of Tennessee, USA and all published on the WWW (URL: https://www.netlib.org/)."</ref><ref>{{웹 인용|url=https://www.netlib.org/utk/people/JackDongarra/PAPERS/netlib-history6.pdf |title=Netlib and NA-Net: building a scientific computing community |author=잭 동가라 |author2=진 골루브 |author3=에릭 그로스 |author4=클리브 몰러 |author5=키스 무어 |quote=The Netlib software repository was created in 1984 to facilitate quick distribution of public domain software routines for use in scientific computation. |publisher=netlib.org |access-date=2016-02-13}}</ref> 선형대수 루틴을 제공하는 대부분의 라이브러리는 BLAS 인터페이스를 준수하여 라이브러리 사용자가 사용되는 BLAS 라이브러리에 구애받지 않는 프로그램을 개발할 수 있도록 한다. 다양한 하드웨어 플랫폼을 목표로 하는 많은 BLAS 라이브러리가 개발되었다. 예를 들어 [[CUDA#프로그래밍_능력|cuBLAS]](엔비디아 GPU, [[GPGPU]]), [[ROCm#rocBLAS_/_hipBLAS|rocBLAS]](AMD GPU), [[OpenBLAS]] 등이 있다. CPU 기반 BLAS 라이브러리 브랜치의 예는 [[OpenBLAS]], [[BLIS (소프트웨어)|BLIS (BLAS와 유사한 라이브러리 인스턴스화 소프트웨어)]], Arm 퍼포먼스 라이브러리,<ref name="Arm Performance Libraries">{{웹 인용|date=2020 |title=Arm Performance Libraries |publisher=[[팔]] |url=https://www.arm.com/products/development-tools/server-and-hpc/allinea-studio/performance-libraries |access-date=2020-12-16}}</ref> [[자동 튜닝 선형 대수 소프트웨어|ATLAS]], [[인텔 수학 커널 라이브러리]](iMKL)가 있다. AMD는 [[AMD]] 플랫폼에 최적화된 BLIS 포크를 유지한다.<ref>{{웹 인용|url=https://developer.amd.com/amd-aocl/blas-library/|title=BLAS Library}}</ref> ATLAS는 임의의 아키텍처에 자동으로 최적화되는 이식 가능한 라이브러리이다. iMKL은 x86 및 x86-64에 최적화된 프리웨어<ref name="MKLfree">{{웹 인용|date=2015 |title=No Cost Options for Intel Math Kernel Library (MKL), Support yourself, Royalty-Free |publisher=[[인텔]] |url=https://software.intel.com/articles/free_mkl |access-date=31 August 2015}}</ref> 및 독점<ref name="MKLintel">{{웹 인용|date=2015 |title=Intel Math Kernel Library (Intel MKL) |publisher=[[인텔]] |url=https://software.intel.com/intel-mkl |access-date=25 August 2015}}</ref> 벤더 라이브러리로, [[인텔]] 프로세서의 성능에 중점을 둔다.<ref name="optnotice">{{웹 인용|year=2012 |title=Optimization Notice |publisher=[[인텔]] |url=https://software.intel.com/articles/optimization-notice |access-date=10 April 2013}}</ref> OpenBLAS는 인기 있는 많은 아키텍처에 대해 수동으로 최적화된 오픈 소스 라이브러리이다. [[LINPACK 벤치마크]]는 성능 측정을 위해 BLAS 루틴 <code>[[General Matrix Multiply|gemm]]</code>에 크게 의존한다. 많은 수치 소프트웨어 응용 프로그램은 [[LAPACK]], [[LINPACK]], [[아르마딜로 (C++ 라이브러리)|아르마딜로]], [[GNU 옥타브]], [[매스매티카]],<ref>{{서적 인용|author=더글러스 퀴니 |date=2003 |title=So what's new in Mathematica 5.0? |journal=MSOR Connections |volume=3 |number=4 |publisher=The Higher Education Academy |url=http://78.158.56.101/archive/msor/headocs/34mathematica5.pdf |url-status=dead |archive-url=https://web.archive.org/web/20131029204826/http://78.158.56.101/archive/msor/headocs/34mathematica5.pdf |archive-date=2013-10-29 }}</ref> [[매트랩]],<ref>{{웹 인용|author=클리브 몰러 |date=2000 |title=MATLAB Incorporates LAPACK |publisher=[[매스웍스]] |url=https://www.mathworks.com/company/newsletters/articles/matlab-incorporates-lapack.html |access-date=26 October 2013}}</ref> [[NumPy]],<ref name="cise">{{서적 인용|title=The NumPy array: a structure for efficient numerical computation |author=스테판 반 데르 발트 |author2=S. 크리스 콜베르트 |author3=가엘 바로쿼 |name-list-style=amp |date=2011 |journal=Computing in Science and Engineering |volume=13 |issue=2 |pages=22–30 |arxiv=1102.1523|bibcode=2011CSE....13b..22V |doi=10.1109/MCSE.2011.37|s2cid=16907816 }}</ref> [[R (프로그래밍 언어)|R]], [[줄리아 (프로그래밍 언어)|줄리아]], 리스프-스탯을 포함하여 BLAS 호환 라이브러리를 사용하여 선형대수 계산을 수행한다. ==배경== 수치 프로그래밍의 등장으로 정교한 서브루틴 라이브러리가 유용해졌다. 이러한 라이브러리에는 근 찾기, 행렬 역행렬 계산, 연립 방정식 해결과 같은 일반적인 고수준 수학 연산을 위한 서브루틴이 포함되었다. 선택된 언어는 [[포트란]]이었다. 가장 대표적인 수치 프로그래밍 라이브러리는 [[IBM]]의 [[과학 서브루틴 패키지]](SSP)였다.<ref>{{서적 인용| last1 = Boisvert | first1 = 로널드 F. | year = 2000 | title = Mathematical software: past, present, and future | journal = Mathematics and Computers in Simulation | volume = 54 | issue = 4–5 | pages = 227–241 | doi = 10.1016/S0378-4754(00)00185-3 | arxiv = cs/0004004| bibcode = 2000cs........4004B | s2cid = 15157725 }}</ref> 이러한 서브루틴 라이브러리는 프로그래머가 특정 문제에 집중하고 잘 알려진 알고리즘을 다시 구현하는 것을 피할 수 있도록 했다. 라이브러리 루틴은 또한 일반적인 구현보다 나았다. 예를 들어, 행렬 알고리즘은 더 나은 수치 정확도를 얻기 위해 전체 피벗팅을 사용할 수 있었다. 라이브러리 루틴은 또한 더 효율적인 루틴을 가졌다. 예를 들어, 라이브러리는 상삼각 행렬을 해결하는 프로그램을 포함할 수 있었다. 라이브러리는 일부 알고리즘의 단정밀도 및 배정밀도 버전을 포함했다. 초기에는 이러한 서브루틴들이 저수준 연산을 위해 하드코딩된 루프를 사용했다. 예를 들어, 서브루틴이 행렬 곱셈을 수행해야 한다면, 서브루틴은 세 개의 중첩 루프를 가졌다. 선형대수학 프로그램은 많은 공통적인 저수준 연산(이른바 "커널" 연산으로, [[커널 (컴퓨팅)|운영체제]]와는 관련이 없다)을 가지고 있다.<ref>SSP(1966년경 등장)조차 RADD(행 추가), CADD(열 추가), SRMA(행 스케일링 후 다른 행에 추가), RINT(행 교환)와 같은 일부 기본 루틴을 가졌다. 이 루틴들은 행렬 역행렬 계산과 같은 다른 루틴을 구현하기 위한 커널 연산으로 사용되지 않았던 것으로 보인다. {{인용|last=IBM |title=System/360 Scientific Subroutine Package, Version III, Programmer's Manual |edition=5th |publisher=International Business Machines |date=1970 |id=GH20-0205-4}}를 참조하라.</ref> 1973년에서 1977년 사이에 이러한 커널 연산 중 몇 가지가 식별되었다.{{Sfn|BLAST Forum|2001|p=1}} 이러한 커널 연산은 수학 라이브러리가 호출할 수 있는 정의된 서브루틴이 되었다. 커널 호출은 하드코딩된 루프에 비해 장점이 있었다: 라이브러리 루틴이 더 읽기 쉬워지고, 버그 발생 가능성이 줄어들며, 커널 구현이 속도에 최적화될 수 있었다. [[스칼라 (수학)|스칼라]] 및 [[벡터 공간|벡터]]를 사용하는 이러한 커널 연산에 대한 시방서인 레벨-1 기본 선형대수 서브루틴(BLAS)은 1979년에 발표되었다.{{Sfn|Lawson|Hanson|Kincaid|Krogh|1979}} BLAS는 선형대수 서브루틴 라이브러리 [[LINPACK]]을 구현하는 데 사용되었다. BLAS 추상화는 고성능을 위한 맞춤화를 허용한다. 예를 들어, LINPACK은 수정 없이 다양한 머신에서 사용할 수 있는 범용 라이브러리이다. LINPACK은 BLAS의 일반 버전을 사용할 수 있다. 성능을 높이기 위해 다른 머신은 BLAS의 맞춤형 버전을 사용할 수 있다. 컴퓨터 아키텍처가 더욱 정교해지면서 [[벡터 프로세서]]가 등장했다. 벡터 머신용 BLAS는 머신의 빠른 벡터 연산을 사용할 수 있었다. (벡터 프로세서는 결국 인기를 잃었지만, 현대 CPU의 벡터 명령어는 BLAS 루틴에서 최적의 성능을 위해 필수적이다.) 다른 기계 기능도 사용 가능하게 되었고 활용될 수 있었다. 따라서 1984년부터 1986년까지 BLAS는 벡터-행렬 연산과 관련된 레벨-2 커널 연산으로 확장되었다. 메모리 계층 구조도 활용될 수 있는 것으로 인식되었다. 많은 컴퓨터에는 주 메모리보다 훨씬 빠른 [[CPU 캐시|캐시 메모리]]가 있다. 행렬 조작을 지역화하면 캐시 사용을 개선할 수 있다. 1987년과 1988년에 행렬-행렬 연산을 수행하는 레벨 3 BLAS가 식별되었다. 레벨 3 BLAS는 블록 분할 알고리즘을 장려했다. [[LAPACK]] 라이브러리는 레벨 3 BLAS를 사용한다.{{Sfn|BLAST Forum|2001|pp=1–2}} 원래 BLAS는 밀집하게 저장된 벡터와 행렬만을 다루었다. [[성긴 행렬]]과 같은 BLAS에 대한 추가 확장이 다루어졌다.{{Sfn|BLAST Forum|2001|p=2}} ==기능== BLAS 기능은 "레벨"이라고 불리는 세 가지 루틴 집합으로 분류된다. 이는 정의 및 발행의 연대기적 순서와 알고리즘 복잡성의 다항식 차수에 모두 해당한다. 레벨 1 BLAS 연산은 일반적으로 [[선형 시간]] {{수학|O(n)}}이 걸리고, 레벨 2 연산은 이차 시간이, 레벨 3 연산은 삼차 시간이 걸린다.{{R|level3}} 최신 BLAS 구현은 일반적으로 세 가지 레벨을 모두 제공한다. ===레벨 1=== 이 레벨은 BLAS의 원본 발표(1979)에 설명된 모든 루틴으로 구성된다.<ref name="lawson79"/> 이 루틴은 [[배열 보폭|스트라이드 배열]]에 대한 벡터 연산만 정의했다: [[스칼라곱]], [[노름 (수학)|벡터 노름]], 일반화된 벡터 덧셈 (형식: :<math>\boldsymbol{y} \leftarrow \alpha \boldsymbol{x} + \boldsymbol{y}</math> ("<code>axpy</code>", 즉 "a 곱하기 x 더하기 y"라고 불림) 및 기타 여러 연산. ===레벨 2=== 이 레벨은 일반화된 행렬-벡터 곱셈(<code>gemv</code>)을 포함하는 행렬-벡터 연산을 포함한다: :<math>\boldsymbol{y} \leftarrow \alpha \boldsymbol{A} \boldsymbol{x} + \beta \boldsymbol{y}</math> 뿐만 아니라 선형 방정식 :<math>\boldsymbol{T} \boldsymbol{x} = \boldsymbol{y}</math> 에서 {{수학|'''x'''}}에 대한 해법도 포함한다. 여기서 {{수학|'''T'''}}는 삼각 행렬이다. 레벨 2 BLAS의 설계는 1984년에 시작되어 1988년에 결과가 발표되었다.<ref name="dongarra88"/> 레벨 2 서브루틴은 특히 [[벡터 프로세서]]에서 BLAS를 사용하는 프로그램의 성능을 향상시키는 것을 목표로 한다. 레벨 1 BLAS는 "컴파일러로부터 연산의 행렬-벡터 특성을 숨기기" 때문에 최적이 아니다.<ref name="dongarra88">{{서적 인용|first1=잭 J. |last1=동가라 |first2=제레미 |last2=뒤 크로즈 |first3=스벤 |last3=함마링 |first4=리처드 J. |last4=한손 |title=An extended set of FORTRAN Basic Linear Algebra Subprograms |journal=ACM Trans. Math. Softw. |volume=14 |date=1988 |pages=1–17 |doi=10.1145/42288.42291 |citeseerx=10.1.1.17.5421 |s2cid=3579623 }}</ref> ===레벨 3=== 1990년에 공식적으로 발표된 이 레벨은<ref name="level3">{{서적 인용|last1=동가라 |first1=잭 J. |last2=뒤 크로즈 |first2=제레미 |last3=함마링 |first3=스벤 |last4=더프 |first4=아인 S. |title=A set of level 3 basic linear algebra subprograms |doi=10.1145/77626.79170 |date=1990 |journal=[[ACM Transactions on Mathematical Software]] |issn=0098-3500 |volume=16 |issue=1 |pages=1–17|s2cid=52873593 |doi-access=free }}</ref> 다음 형태의 "일반 [[행렬 곱셈]]"(<code>gemm</code>)을 포함한 행렬-행렬 연산을 포함한다. :<math>\boldsymbol{C} \leftarrow \alpha \boldsymbol{A} \boldsymbol{B} + \beta \boldsymbol{C},</math> 여기서 {{수학|'''A'''}}와 {{수학|'''B'''}}는 루틴 내부에서 선택적으로 [[전치 행렬]]되거나 [[에르미트 켤레]]될 수 있으며, 세 행렬 모두 스트라이드될 수 있다. 일반적인 행렬 곱셈 {{수학|'''A B'''}}는 {{수학|α}}를 1로 설정하고 {{수학|'''C'''}}를 적절한 크기의 모든 0 행렬로 설정하여 수행할 수 있다. 레벨 3에는 다음을 계산하는 루틴도 포함된다. :<math>\boldsymbol{B} \leftarrow \alpha \boldsymbol{T}^{-1} \boldsymbol{B},</math> 여기서 {{수학|'''T'''}}는 [[삼각행렬]]이며, 다른 기능도 포함된다. 많은 과학 응용 프로그램에서 행렬 곱셈이 보편적으로 사용되고, 나머지 레벨 3 BLAS의 구현에도 포함되며,<ref name="Geijn_2008"/> 행렬-벡터 곱셈의 명백한 반복을 넘어 더 빠른 알고리즘이 존재하기 때문에 <code>gemm</code>은 BLAS 구현자의 최적화의 주요 대상이다. 예를 들어, {{수학|'''A'''}} 또는 {{수학|'''B'''}} 중 하나 또는 둘 모두를 [[블록 행렬]]로 분해하여 <code>gemm</code>은 [[행렬 곱셈 알고리즘#분할 정복 알고리즘|재귀적으로 구현]]할 수 있다. 이는 {{수학|β}} 매개변수를 포함하는 동기 중 하나이므로 이전 블록의 결과를 누적할 수 있다. 이 분해는 {{수학|β {{=}} 1}}의 특수 사례를 필요로 하며, 많은 구현에서 이를 최적화하여 {{수학|'''C'''}}의 각 값에 대한 곱셈을 하나씩 제거한다. 이 분해는 곱셈에 사용되는 데이터의 공간과 시간 모두에서 더 나은 [[참조 국부성]]을 허용한다. 이는 다시 시스템의 [[CPU 캐시|캐시]]를 활용한다.<ref>{{인용| last1=골루브 | first1=진 H. | author1-link=진 H. 골루브 | last2=반 로언 | first2=찰스 F. | author2-link=찰스 F. 반 로언 | title=Matrix Computations | publisher=존스 홉킨스 | edition=3rd | isbn=978-0-8018-5414-9 |date=1996}}</ref> 캐시 수준이 두 개 이상인 시스템의 경우, 블록을 계산에 사용하는 순서에 두 번째로 차단(blocking)을 적용할 수 있다. 이러한 최적화 수준은 [[자동 튜닝 선형 대수 소프트웨어|ATLAS]]와 같은 구현에서 사용된다. 최근에는 [[고토 가즈시게]]의 구현이 [[L2 캐시]]에만 블록킹을 적용하고, [[변환 색인 버퍼|TLB]] 미스를 줄이기 위해 연속 메모리로 복사하는 것을 신중하게 [[분할 상환 분석|분할 상환]]하는 것이 [[자동 튜닝 선형 대수 소프트웨어|ATLAS]]보다 우수하다는 것을 보여주었다.<ref name="Kazushige_2008"/> 이러한 아이디어를 기반으로 한 고도로 튜닝된 구현은 [[고토BLAS]], [[OpenBLAS]] 및 [[BLIS (소프트웨어)|BLIS]]의 일부이다. {{코드|gemm}}의 일반적인 변형은 {{코드|gemm3m}}으로, "기존의 네 번의 실수 행렬 곱셈과 두 번의 실수 행렬 덧셈 대신 세 번의 실수 행렬 곱셈과 다섯 번의 실수 행렬 덧셈"을 사용하여 복소 곱을 계산하는 알고리즘이다. 이는 [[슈트라센 알고리즘]]과 유사하며 피터 운가르가 처음 설명했다.<ref>{{서적 인용|last1=반 지 |first1=필드 G. |last2=스미스 |first2=타일러 M. |title=Implementing High-performance Complex Matrix Multiplication via the 3m and 4m Methods |journal=ACM Transactions on Mathematical Software |date=24 July 2017 |volume=44 |issue=1 |pages=1–36 |doi=10.1145/3086466|s2cid=25580883 }}</ref> ==구현== ; Accelerate: [[애플]]의 [[macOS]] 및 [[IOS (Apple)|iOS]]용 프레임워크로, 튜닝된 [[BLAS]] 및 [[LAPACK]] 버전이 포함되어 있다.<ref>{{웹 인용|url=https://developer.apple.com/library/mac/#releasenotes/Performance/RN-vecLib/|title=Guides and Sample Code|website=developer.apple.com|access-date=2017-07-07}}</ref><ref>{{웹 인용|url=https://developer.apple.com/library/ios/#documentation/Accelerate/Reference/AccelerateFWRef/|title=Guides and Sample Code|website=developer.apple.com|access-date=2017-07-07}}</ref> ; Arm Performance Libraries: [[Arm Performance Libraries]]는 Arm 64비트 [[AArch64]] 기반 프로세서를 지원하며 [[Arm Ltd.|Arm]]에서 사용할 수 있다.<ref name="Arm Performance Libraries"/> ; ATLAS: [[자동 튜닝 선형 대수 소프트웨어]]는 [[C (프로그래밍 언어)|C]] 및 [[포트란|포트란 77]]용 BLAS [[응용 프로그래밍 인터페이스|API]]의 [[오픈 소스 소프트웨어|오픈 소스]] 구현이다.<ref>{{웹 인용|url=https://math-atlas.sourceforge.net/|title=Automatically Tuned Linear Algebra Software (ATLAS)|website=math-atlas.sourceforge.net|access-date=2017-07-07}}</ref> ; [[BLIS (소프트웨어)|BLIS]]: 빠른 인스턴스화를 위한 BLAS와 유사한 라이브러리 인스턴스화 소프트웨어 프레임워크. 대부분의 최신 CPU에 최적화되어 있다. BLIS는 특정 플랫폼에 작성되어야 하는 코드의 양을 줄이는 고토BLAS의 완전한 리팩토링이다.<ref>{{인용|title=blis: BLAS-like Library Instantiation Software Framework|date=2017-06-30|url=https://github.com/flame/blis|publisher=flame|access-date=2017-07-07}}</ref><ref>{{인용|title=BLIS GitHub Repository|date=15 October 2021|url=https://github.com/flame/blis}}</ref> ; C++ AMP BLAS: [[C++ AMP]] BLAS 라이브러리는 비주얼 C++용 마이크로소프트 AMP 언어 확장을 위한 BLAS의 [[오픈 소스 소프트웨어|오픈 소스]] 구현이다.<ref>{{웹 인용|url=http://ampblas.codeplex.com/|title=C++ AMP BLAS Library|website=CodePlex|language=en|access-date=2017-07-07|archive-date=2017-07-08 |archive-url=https://web.archive.org/web/20170708151515/http://ampblas.codeplex.com/|url-status=dead}}</ref> ; cuBLAS: 엔비디아 기반 GPU 카드에 최적화된 BLAS로, 추가 라이브러리 호출이 거의 필요 없다.<ref>{{뉴스 인용|url=https://developer.nvidia.com/cublas|title=cuBLAS|date=2013-07-29|work=NVIDIA Developer|access-date=2017-07-07|language=en}}</ref> ; NVBLAS: 엔비디아 기반 GPU 카드에 최적화된 BLAS로, 레벨 3 기능만 제공하지만 다른 BLAS 라이브러리에 대한 직접적인 드롭인 대체품으로 사용될 수 있다.<ref>{{뉴스 인용|url=https://docs.nvidia.com/cuda/nvblas/index.htmls|title=NVBLAS|date=2018-05-15|work=NVIDIA Developer|access-date=2018-05-15|language=en}}{{깨진 링크|url=https://docs.nvidia.com/cuda/nvblas/index.htmls }}</ref> ; clBLAS: AMD의 [[OpenCL]] 기반 BLAS 구현. AMD 컴퓨트 라이브러리의 일부이다.<ref name="github.com">{{인용|title=clBLAS: a software library containing BLAS functions written in OpenCL|date=2017-07-03|url=https://github.com/clMathLibraries/clBLAS|publisher=clMathLibraries|access-date=2017-07-07}}</ref> ; clBLAST: 대부분의 BLAS API에 대해 튜닝된 [[OpenCL]] 구현이다.<ref name="https://github.com/CNugteren/CLBlast">{{인용|last=누게르텐|first=세드릭|title=CLBlast: Tuned OpenCL BLAS|date=2017-07-05|url=https://github.com/CNugteren/CLBlast|access-date=2017-07-07}}</ref> ; Eigen BLAS: [[모질라 라이선스|MPL]] 라이선스 [[Eigen (C++ 라이브러리)|Eigen 라이브러리]] 위에 구현된 [[포트란|포트란 77]] 및 [[C (프로그래밍 언어)|C]] BLAS 라이브러리로, [[x86]], [[x86-64]], [[ARM 아키텍처|ARM (NEON)]], [[파워PC]] 아키텍처를 지원한다. ; ESSL: [[IBM]]의 엔지니어링 및 과학 서브루틴 라이브러리로, [[AIX 운영체제|AIX]] 및 [[리눅스]]에서 [[파워PC]] 아키텍처를 지원한다.<ref name="https://www.ibm.com/support/knowledgecenter/en/SSFHY8/essl_welcome.html">{{인용|title=IBM Knowledge Centre: Engineering and Scientific Subroutine Library|url=https://www.ibm.com/support/knowledgecenter/en/SSFHY8/essl_welcome.html}}</ref> ; [[고토BLAS]]: [[고토 가즈시게]]의 BSD 라이선스 BLAS 구현으로, 특히 [[인텔]] [[네할렘 (마이크로아키텍처)|네할렘]]/[[인텔 아톰|아톰]], [[비아 테크놀로지스|비아]] [[비아 나노|나노프로세서]], [[AMD]] [[옵테론]]에 최적화되어 있다.<ref name="GotoBLAS2"/> ; [[GNU 사이언티픽 라이브러리]]: 많은 수치 루틴의 멀티플랫폼 구현. CBLAS 인터페이스를 포함한다. ; HP MLIB: [[휴렛 패커드|HP]]의 수학 라이브러리로, [[HP-UX]] 및 [[리눅스]]에서 [[IA-64]], [[PA-RISC]], [[x86]] 및 [[옵테론]] 아키텍처를 지원한다. ; 인텔 MKL: [[인텔]] [[수학 커널 라이브러리]]로, x86 32비트 및 64비트를 지원하며 [[인텔]]에서 무료로 제공한다.<ref name="MKLfree" /> [[인텔 펜티엄|펜티엄]], [[인텔 코어|코어]] 및 [[인텔 제온]] CPU와 [[인텔 제온 파이]]에 대한 최적화를 포함하며, [[리눅스]], [[마이크로소프트 윈도우|윈도우]] 및 [[macOS]]를 지원한다.<ref>{{웹 인용|url=https://software.intel.com/en-us/intel-mkl/|title=Intel Math Kernel Library (Intel MKL) {{!}} Intel Software|website=software.intel.com|language=en|access-date=2017-07-07}}</ref> ; MathKeisan: [[NEC 코퍼레이션|NEC]]의 수학 라이브러리로, [[SUPER-UX]]에서 [[NEC SX 아키텍처]]를, [[리눅스]]에서 [[아이테니엄]]을 지원한다.<ref>{{웹 인용|url=https://www.mathkeisan.com/|title=MathKeisan|last=Mathkeisan|first=NEC|website=www.mathkeisan.com|language=en|access-date=2017-07-07}}</ref> ; 넷립 BLAS: [[넷립]]의 공식 참조 구현으로, [[포트란|포트란 77]]로 작성되었다.<ref>{{웹 인용|url=https://www.netlib.org/blas/|title=BLAS (Basic Linear Algebra Subprograms)|website=www.netlib.org|access-date=2017-07-07}}</ref> ; 넷립 CBLAS: BLAS에 대한 참조 [[C (프로그래밍 언어)|C]] 인터페이스. C에서 포트란 BLAS를 호출하는 것도 가능하며 (인기가 많다).<ref>{{웹 인용|url=https://www.netlib.org/blas|title=BLAS (Basic Linear Algebra Subprograms)|website=www.netlib.org|access-date=2017-07-07}}</ref> ; [[OpenBLAS]]: 고토BLAS를 기반으로 최적화된 BLAS로, [[x86]], [[x86-64]], [[MIPS 아키텍처|MIPS]] 및 [[ARM 아키텍처|ARM]] 프로세서를 지원한다.<ref>{{웹 인용|url=https://www.openblas.net/|title=OpenBLAS : An optimized BLAS library|website=www.openblas.net|access-date=2017-07-07}}</ref> ; PDLIB/SX: [[NEC 코퍼레이션|NEC]]의 NEC [[NEC SX 아키텍처|SX-4]] 시스템용 공용 도메인 수학 라이브러리.<ref name=":0">{{웹 인용|url=http://www.nec.co.jp/hpc/mediator/sxm_e/software/61.html |title=PDLIB/SX: Business Solution | NEC |access-date=2007-05-20 |url-status=dead |archive-url=https://web.archive.org/web/20070222154031/http://www.nec.co.jp/hpc/mediator/sxm_e/software/61.html |archive-date=2007-02-22 }}</ref> ; rocBLAS: [[ROCm]]을 통해 [[AMD]] GPU에서 실행되는 구현.<ref>{{웹 인용|url=https://rocmdocs.amd.com/en/latest/ROCm_Tools/rocblas.html|title=rocBLAS|website=rocmdocs.amd.com|access-date=2021-05-21|archive-date=2021-05-22|archive-url=https://web.archive.org/web/20210522003949/https://rocmdocs.amd.com/en/latest/ROCm_Tools/rocblas.html|url-status=}}</ref> ;SCSL : [[실리콘 그래픽스|SGI]]의 과학 컴퓨팅 소프트웨어 라이브러리에는 SGI의 [[이릭스]] 워크스테이션용 BLAS 및 LAPACK 구현이 포함되어 있다.<ref>{{웹 인용|url=http://www.sgi.com/products/software/scsl.html |title=SGI - SCSL Scientific Library: Home Page |access-date=2007-05-20 |url-status=dead |archive-url=https://web.archive.org/web/20070513173030/http://www.sgi.com/products/software/scsl.html |archive-date=2007-05-13 }}</ref> ; Sun Performance Library: [[오라클 솔라리스|솔라리스]] 8, 9, 10 및 리눅스에서 [[SPARC]], [[인텔 코어|코어]] 및 [[AMD64]] 아키텍처에 최적화된 BLAS 및 LAPACK.<ref>{{웹 인용|url=https://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html|title=Oracle Developer Studio|website=www.oracle.com|access-date=2017-07-07}}</ref> ; uBLAS: BLAS 기능을 제공하는 일반 [[C++]] 템플릿 클래스 라이브러리. [[부스트 라이브러리]]의 일부이다. 통일된 표기법으로 많은 하드웨어 가속 라이브러리에 대한 바인딩을 제공한다. 또한 uBLAS는 고급 C++ 기능을 사용하여 알고리즘의 정확성에 중점을 둔다.<ref>{{웹 인용|url=https://www.boost.org/doc/libs/1_60_0/libs/numeric/ublas/doc/index.html|title=Boost Basic Linear Algebra - 1.60.0|website=www.boost.org|access-date=2017-07-07}}</ref> === BLAS를 사용하는 라이브러리 === ; 아르마딜로: [[아르마딜로 (C++ 라이브러리)|아르마딜로]]는 속도와 사용 편의성 사이의 균형을 잘 맞추는 것을 목표로 하는 C++ 선형대수 라이브러리이다. 템플릿 클래스를 사용하며, BLAS/ATLAS 및 LAPACK에 대한 선택적 링크를 제공한다. NICTA(호주)의 후원을 받으며 무료 라이선스로 배포된다.<ref>{{웹 인용|url=https://arma.sourceforge.net/|title=Armadillo: C++ linear algebra library|website=arma.sourceforge.net|access-date=2017-07-07}}</ref> ; [[LAPACK]]: LAPACK은 BLAS를 기반으로 구축된 고수준 선형대수 라이브러리이다. BLAS와 마찬가지로 참조 구현이 존재하지만 libFlame 및 MKL과 같은 많은 대안이 있다. ; Mir: [[D (프로그래밍 언어)|D]]로 작성된 과학 및 기계 학습을 위한 [[LLVM]] 가속 일반 수치 라이브러리. 일반 선형 대수 서브프로그램(GLAS)을 제공한다. CBLAS 구현을 기반으로 구축할 수 있다.<ref>{{웹 인용|url=https://github.com/libmir|title= Dlang Numerical and System Libraries|website= [[깃허브]]}}</ref> ==유사 라이브러리 (BLAS와 호환되지 않음)== {{참고|LAPACK#유사 프로젝트}} ; Elemental: Elemental은 [[분산 메모리]] 조밀 및 희소-직접 선형 대수 및 최적화를 위한 오픈 소스 소프트웨어이다.<ref>{{웹 인용|url=https://libelemental.org/|title=Elemental: distributed-memory dense and sparse-direct linear algebra and optimization — Elemental|website=libelemental.org|access-date=2017-07-07}}</ref> ; HASEM: 선형 방정식을 풀고 고윳값을 계산할 수 있는 C++ 템플릿 라이브러리이다. BSD 라이선스로 배포된다.<ref>{{웹 인용|url=https://sourceforge.net/projects/hasem/|title=HASEM|website=SourceForge|date=17 August 2015 |language=en|access-date=2017-07-07}}</ref> ; LAMA: 가속 수학 응용 프로그램 라이브러리([[Library for Accelerated Math Applications|LAMA]])는 [[분산 메모리]] 시스템에서 다양한 종류의 하드웨어(예: [[CUDA]] 또는 [[OpenCL]]을 통한 [[GPU]])를 대상으로 하는 수치 솔버를 작성하기 위한 C++ 템플릿 라이브러리로, 프로그램 개발자에게 하드웨어별 프로그래밍을 숨긴다. ; MTL4: [[매트릭스 템플릿 라이브러리]] 버전 4는 희소 및 밀집 BLAS 기능을 제공하는 일반 [[C++]] 템플릿 라이브러리이다. MTL4는 직관적인 인터페이스([[매트랩]]과 유사)와 [[제네릭 프로그래밍]] 덕분에 폭넓은 적용 가능성을 제공한다. ==희소 BLAS== 라이브러리 역사 동안 [[성긴 행렬]]을 처리하기 위한 BLAS의 몇 가지 확장이 제안되었다. 2002년에 작은 성긴 행렬 커널 루틴 세트가 마침내 표준화되었다.<ref>{{서적 인용|first1=아인 S. |last1=더프 |first2=마이클 A. |last2=헤루 |first3=롤단 |last3=포조 |title=An Overview of the Sparse Basic Linear Algebra Subprograms: The New Standard from the BLAS Technical Forum |journal= ACM Transactions on Mathematical Software|year=2002 |volume=28 |issue=2 |pages=239–267 |doi=10.1145/567806.567810|s2cid=9411006 }}</ref> ==배치 BLAS== 기존 BLAS 함수는 [[GPU]]와 같이 대규모 병렬 처리를 지원하는 아키텍처에도 이식되었다. 여기서 기존 BLAS 함수는 일반적으로 대규모 행렬에 대해 좋은 성능을 제공한다. 그러나 GEMM 루틴을 사용하여 많은 작은 행렬의 행렬-행렬 곱을 계산할 때는 이러한 아키텍처에서 상당한 성능 손실을 보인다. 이 문제를 해결하기 위해 2017년에 BLAS 함수의 배치 버전이 지정되었다.<ref name="dongarra17">{{서적 인용|last1=동가라 |first1=잭 |last2=함마링 |first2=스벤 |last3=하이암 |first3=니콜라스 J. |last4=렐튼 |first4=새뮤얼 D. |last5=발레로-라라 |first5=페드로 |last6=주농 |first6=마우시 |title=The Design and Performance of Batched BLAS on Modern High-Performance Computing Systems |journal=Procedia Computer Science |volume=108 |pages=495–504 |date=2017 |doi=10.1016/j.procs.2017.05.138|doi-access=free |hdl=2117/106913 |hdl-access=free }}</ref> 위의 GEMM 루틴을 예로 들면, 배치 버전은 많은 행렬에 대해 다음 계산을 동시에 수행한다: <math>\boldsymbol{C}[k] \leftarrow \alpha \boldsymbol{A}[k] \boldsymbol{B}[k] + \beta \boldsymbol{C}[k] \quad \forall k </math> 대괄호 안의 인덱스 <math>k</math>는 스택의 모든 행렬 <math>k</math>에 대해 연산이 수행됨을 나타낸다. 종종 이 연산은 모든 행렬이 배열 <math>A</math>, <math>B</math>, <math>C</math>에 연결되어 있는 스트라이드 배치 메모리 레이아웃에 대해 구현된다. 배치 BLAS 함수는 다목적 도구가 될 수 있으며, 예를 들어 많은 시간 단계를 가진 긴 통합 기간을 처리하는 [[행렬 지수 함수|지수 적분기]] 및 [[매그너스 적분기]]의 빠른 구현을 허용한다.<ref name="herb21">{{서적 인용|last1=허브 |first1=콘스탄틴 |last2=웰터 |first2=폴 |title=Parallel time integration using Batched BLAS (Basic Linear Algebra Subprograms) routines |journal=Computer Physics Communications |volume=270 |pages=108181 |date=2022 |doi=10.1016/j.cpc.2021.108181 |arxiv=2108.07126|bibcode=2022CoPhC.27008181H |s2cid=237091802 }}</ref> 여기서 계산적으로 비싼 부분인 [[행렬 지수 함수]]는 배치 BLAS 함수를 사용하여 모든 시간 단계에 대해 병렬로 구현할 수 있다. == 같이 보기 == * [[수치 라이브러리 목록]] * [[수학 커널 라이브러리]], [[인텔]] 아키텍처에 최적화된 수학 라이브러리; BLAS, LAPACK 포함 * [[수치선형대수학]], BLAS가 해결하는 문제 유형 == 각주 == {{각주|refs= <ref name="Kazushige_2008">{{서적 인용|author-last1=고토 |author-first1=가즈시게 |author-link1=고토 가즈시게 |author-last2=반 드 게이즌 |author-first2=로버트 A. |author-link2=로버트 반 드 게이즌 |title=Anatomy of High-Performance Matrix Multiplication |date=2008 |journal=[[ACM Transactions on Mathematical Software]] |issn=0098-3500 |volume=34 |issue=3 |pages=12:1–12:25 |doi=10.1145/1356052.1356053 |citeseerx=10.1.1.111.3873|s2cid=9359223 }} (25 pages) [https://www.cs.utexas.edu/~flame/web/FLAMEPublications.html#Goto]</ref> <ref name="GotoBLAS2">{{웹 인용|title=GotoBLAS2 |author-first=켄트 |author-last=밀펠트 |publisher=[[텍사스 첨단 컴퓨팅 센터]] |url=http://www.tacc.utexas.edu/tacc-software/gotoblas2 |access-date=2024-03-17 |url-status=dead |archive-url=https://web.archive.org/web/20200323172521/https://www.tacc.utexas.edu/research-development/tacc-software/gotoblas2 |archive-date=2020-03-23}}</ref> <ref name="Geijn_2008">{{서적 인용|author-last1=고토 |author-first1=가즈시게 |author-link1=고토 가즈시게 |author-last2=반 드 게이즌 |author-first2=로버트 A. |author-link2=로버트 반 드 게이즌 |title=High-performance implementation of the level-3 BLAS |journal=[[ACM Transactions on Mathematical Software]] |volume=35 |issue=1 |pages=1–14 |date=2008 |doi=10.1145/1377603.1377607 |s2cid=14722514 |archive-url=https://web.archive.org/web/20170706142000/ftp://ftp.cs.utexas.edu/pub/techreports/tr06-23.pdf |archive-date=2017-07-06 |url-status=dead |url=ftp://ftp.cs.utexas.edu/pub/techreports/tr06-23.pdf}}</ref> }} ==더 읽어보기== * {{인용|author=BLAST Forum |title=Basic Linear Algebra Subprograms Technical (BLAST) Forum Standard |date=21 August 2001 |publisher=University of Tennessee |location=Knoxville, TN }} * {{인용|last1=Dodson |first1= D. S. |last2=Grimes |first2=R. G. |title=Remark on algorithm 539: Basic Linear Algebra Subprograms for Fortran usage |journal=ACM Trans. Math. Softw. |volume=8 |issue= 4 |pages=403–404 |year=1982 |doi= 10.1145/356012.356020|s2cid= 43081631 }} * {{인용|last=Dodson |first=D. S. |title=Corrigendum: Remark on "Algorithm 539: Basic Linear Algebra Subroutines for FORTRAN usage" |journal=ACM Trans. Math. Softw. |volume=9 |page=140 |year=1983 |doi= 10.1145/356022.356032|s2cid=22163977 |doi-access=free }} * J. J. Dongarra, J. Du Croz, S. Hammarling, and R. J. Hanson, Algorithm 656: An extended set of FORTRAN Basic Linear Algebra Subprograms, ACM Trans. Math. Softw., 14 (1988), pp. 18–32. * J. J. Dongarra, J. Du Croz, I. S. Duff, and S. Hammarling, A set of Level 3 Basic Linear Algebra Subprograms, ACM Trans. Math. Softw., 16 (1990), pp. 1–17. * J. J. Dongarra, J. Du Croz, I. S. Duff, and S. Hammarling, Algorithm 679: A set of Level 3 Basic Linear Algebra Subprograms, ACM Trans. Math. Softw., 16 (1990), pp. 18–28. ; New BLAS * L. S. Blackford, J. Demmel, J. Dongarra, I. Duff, S. Hammarling, G. Henry, M. Heroux, L. Kaufman, A. Lumsdaine, A. Petitet, R. Pozo, K. Remington, R. C. Whaley, An Updated Set of Basic Linear Algebra Subprograms (BLAS), ACM Trans. Math. Softw., 28-2 (2002), pp. 135–151. * J. Dongarra, Basic Linear Algebra Subprograms Technical Forum Standard, International Journal of High Performance Applications and Supercomputing, 16(1) (2002), pp. 1–111, and International Journal of High Performance Applications and Supercomputing, 16(2) (2002), pp. 115–199. == 외부 링크 == * [https://www.netlib.org/blas/ BLAS 홈페이지] Netlib.org * [https://www.netlib.org/blas/faq.html BLAS FAQ] * [https://www.netlib.org/lapack/lug/node145.html LAPACK 사용자 가이드]의 BLAS 빠른 참조 가이드 * [https://web.archive.org/web/20061009230911/http://history.siam.org/oralhistories/lawson.htm 로슨 구술 역사] BLAS의 원작자 중 한 명인 찰스 L. 로슨이 구술 역사 인터뷰에서 BLAS의 생성에 대해 논의한다. 찰스 L. 로슨 구술 역사 인터뷰, 토머스 헤이그, 2004년 11월 6일, 7일, 캘리포니아 샌 클레멘테. 산업 및 응용 수학회, 필라델피아, PA. * [https://web.archive.org/web/20061009230904/http://history.siam.org/oralhistories/dongarra.htm 동가라 구술 역사] 구술 역사 인터뷰에서 잭 동가라는 BLAS와 LINPACK의 초기 관계, 새로운 아키텍처를 위한 고수준 BLAS 버전 생성, 그리고 특정 기계에 BLAS를 자동 최적화하기 위한 ATLAS 시스템에 대한 후기 작업에 대해 설명한다. 잭 동가라, 구술 역사 인터뷰, 토머스 헤이그, 2005년 4월 26일, 테네시 대학교, 녹스빌 TN. 산업 및 응용 수학회, 필라델피아, PA * [https://stackoverflow.com/questions/1303182/how-does-blas-get-such-extreme-performance BLAS는 어떻게 그렇게 극단적인 성능을 내는가?] 순진한 1000×1000 행렬 곱셈 10개(10^10 부동 소수점 곱셈-덧셈)는 2.6 GHz 프로세서에서 15.77초가 걸리지만, BLAS 구현은 1.32초가 걸린다. * An Overview of the Sparse Basic Linear Algebra Subprograms: The New Standard from the BLAS Technical Forum {{Doi-inline|10.1145/567806.567810}} {{수치선형대수학}} {{선형대수학}} {{위키데이터 속성 추적}} [[분류:수치선형대수학]] [[분류:수치 해석 소프트웨어]]
BLAS
문서로 돌아갑니다.
검색
검색
BLAS 문서 원본 보기
새 주제