• 검색 결과가 없습니다.

4. 순차코드 최적화

4.6. M ATHEMATICAL L IBRARY

새로운 마이크로 프로세서 칩을 장착한 슈퍼 컴퓨터가 나올 경우, 이를 지원하는 OS, chip-specific 컴파일러, device drivers 등과 같은 새로운 소프트웨어가 같이 나오게 된다. 또한 새로 운 software에는 일반적인 수학 라이브러리 루틴에 대한 chip-optimized 라이브러리가 포함된다.

프로그래머는 해당 시스템에 최적화된 이러한 라이브러리를 최대한 사용하는 것이 좋다.

시스템 최적화된 라이브러리 이외에 특정 시스템에 의존하지 않는 많은 ‘전통적인’ 수학 라이브러 리가 있다. 설치와 이용하기가 쉽고 다양한 영역의 수학 문제를 처리하는 많은 수의 루틴을 가지 며 일부 라이브러리는 free로 제공되기도 한다.

4.6.1. Vendor-Supplied Mathematical libraries

대부분의 시스템 업체에서는 해당 프로세서 칩에 최적화된 수학 라이브러리를 제공하고 있으나, 모든 분야에 대한 것은 아니며, 상대적으로 많이 사용되는 수학 분야의 문제에 국한된다.

4.6.1.1. Calculator Functions

trigonometric, log와 exponential, hyperbolic, exponential, factorial 같은 기본적인 수학 함수들 이다. 사용 가능한 calculator 함수는 보통 vendor-optimized된 normal 라이브러리와 특별히 높 은 수준으로 최적화된 special 라이브러리의 두 가지 버전이 있다. 대개의 경우, 높은 수준으로 최적화된 special 함수들은 그 수가 작으며, 주로 trigonometric, log와 exponent 함수 정도이다.

또, 이러한 special 함수들은 수치 연산에 대한 IEEE의 규칙을 따르지 않을 수 있으므로, 이러한 루틴을 사용하기 전에 noieee와 같은 컴파일러 옵션을 확인 후 사용하도록 해야 한다. special 함 수를 사용한 프로그램에서 정밀도 손실 문제는 프로그래머의 경험과 테스트에 의해 판단되어야 한다.

4.6.1.2. Linear Algebra

자주 사용되는 선형대수 라이브러리들이 업체에서 제공하는 수학 라이브러리에 종종 포함된다.

선형대수 라이브러리로 대표적인 BLAS 라이브러리는 벡터-벡터(BLAS1), 행렬-벡터(BLAS2), 행 렬-행렬(BLAS3) 계산을 수행하는 루틴들로 구성돼 있다. 업체에서는 시스템에 최적화시킨 선형 대수 계산 라이브러리의 루틴 이름을 BLAS 루틴의 이름과 동일하게 제공하는 방식으로 프로그래

머에게 최적화된 수학 라이브러리 환경을 제공하고 있다. 예를 들자면, BLAS2에서 제공하는 행 렬-벡터 곱셈 루틴 이름이 SGEMM(Single precision General Matrix Multiply)인데 업체에서 제 공하는 최적화된 수학 라이브러리에서도 같은 계산을 하는 루틴의 이름을 SGEMM으로 사용하는 것이다.

LAPACK은 BLAS 루틴을 기반으로 개발된 선형대수 계산 라이브러리로 선형 방정식, 고유치 (eigenvalue)와 고유벡터(eigenvector) 문제, 선형 최소자승 맞춤(linear least square fitting) 등 의 문제해결에 관련된 루틴을 제공하고 있다. 업체에서 제공하는 라이브러리는 LAPACK 라이브 러리를 포함하고 있는 것이 대부분이다.

4.6.1.3. Fast Fourier Transforms

FFT 루틴들은 대부분의 계산 수학 라이브러리에 포함되며, 1차원, 2차원 FFT, complex variable FFT 등 다양한 루틴들이 존재한다. 업체에서 제공하는 라이브러리에 대부분 FFT 계산 루틴이 포함돼 있다.

4.6.1.4. Parallel Numerical Libraries

지난 수년 동안, 많은 수학 라이브러리들의 병렬화 작업이 시도돼 왔으며, 그 중 BLAS와 LAPACK의 병렬화 작업이 가장 먼저 이뤄졌다. BLAS의 병렬 버전은 PBLAS, LAPACK의 병렬 버전은 ScaLAPACK으로 안정화 됐으며 이에 따라, 최근의 업체 제공 라이브러리에는 대부분 PBLAS와 ScaLAPACK이 포함돼 있다.

PBLAS와 ScaLAPACK의 기능은 BLAS와 LAPACK과 대부분 유사하며 프로그래머가 글로벌 배 열 데이터를 로컬 부분 배열로 나눠 개별 프로세서의 로컬 메모리로 분배하도록 하는 기능과 해 당 계산을 병렬로 실행할 수 있는 기능을 추가적으로 가지고 있다. 이와 같은 병렬 라이브러리에 서는 내부적으로 데이터 통신이 필수적이고 이를 위해 또 다른 라이브러리인 BLACS를 사용하게 된다. BLACS는 해당 병렬 시스템에서 사용하는 메시지 패싱 라이브러리(MPI, PVM 등)를 기반으 로 하고, 특히 배열의 전송에 그 기능을 맞춰 개발된 데이터 통신 라이브러리이다.

그림 4-6. 선형대수 계산 라이브러리

4.6.1.5. Code Optimization with Library Calls

코드 성능 최적화를 언제나 강조되는 것은 프로그램을 실행하고자 하는 시스템 업체에서 제공하 는 라이브러리를 사용하라는 것이다. 행렬-행렬 곱셈과 같은 계산을 직접 프로그래밍하는 것 보 다는 관련 라이브러리를 호출해 사용하는 것이 코드도 간단하게 하면서 코드 성능도 좋게 하는 지름길이 된다. 물론 관련 라이브러리가 해당 업체에서 제공하는 최적화된 라이브러리라면 더욱 좋을 것이다.

일부 매우 잘 개발된 컴파일 시스템에서는 ‘라이브러리 루틴 대체’ 옵션을 제공하는 경우도 있다.

이는 컴파일러가 프로그래머가 직접 작성한 수학 계산 코드를 분석해 동일한 계산을 하는 업체 제공 라이브러리 루틴으로 컴파일 단계에서 대체해 버리는 기능이다.

4.6.2. Traditional Math Libraries

NAG와 IMSL 라이브러리는 전통적인 수학 라이브러리를 대표한다. 이 두 개의 라이브러리는 수 학 및 통계 분야의 광범위한 문제를 다루고 있다.

- 프로그램 안에서 어떤 수학 계산을 하고자 한다면, 대부분 NAG나 IMSL 라이브러리에서 그에 해당하는 루틴을 찾을 수 있다. 다음은 NAG에서 다루고 있는 수학 계산들을 정리해 놓은 것이다.

Sample of NAG Mathematical Library Routines

y Complex Arithmetic y Extremes (Min/Max) of a function

y Zeros of Polynomials m Roots of Transcendental Equations

y Matrix Factorizations m Eigenvalues & Eigenvectors

y Fourier Transforms (1D, 2D, and

3D) y Determinants

y Quadrature Numerical Integration y Simultaneous Linear Equations y Ordinary Differential Equations m

Partial Differential Equations

y Linear Algebra m Sparse Linear Algebra

y Mesh Generation y Statistical Analysis y Interpolation m Curve and Surface

Fitting

y Correlation & Regression m Multivariate Methods m Univariate Estimation

y Random Number Generation y Contingency/Survival Analysis y Time Series Analysis y Sorting

y Mathematical Constants y Special Functions y Utility Functions

- NAG와 IMSL 라이브러리는 사용 알고리즘과 루틴의 각 인수들, 발생하는 오류 코드, 해 당 루틴을 사용하는 간단한 예제 프로그램과 그 프로그램의 결과 등에 대해 상세히 설명된 documents를 제공하고 있다.

- 루틴들에 대한 병렬화 작업이 계속 이루어 지고 있다.

- 새로운 수학 문제에 대한 루틴이 계속 추가되고 있다.

- 다양한 시스템, 운영체제, 프로세서 등에서 사용할 수 있다. 단, 그 모든 시스템에 최적화 된 성능을 보장하지는 못한다.

- NAG와 IMSSL 라이브러리의 단점은 고가의 라이센스 및 유지보수 비용.