멀티코어 CPU를 갖는 공유 메모리 구조의 대규모 병렬 유한요소 코드에 대한 설계 고려 사항 Design Considerations on Large-scale Parallel Finite Element Code in Shared Memory Architecture with Multi-Core CPU원문보기
멀티코어 CPU와 BLAS, LAPACK을 구현한 최적 수치라이브러리, 직접 희소 솔버의 대중화 등 PC나 워크스테이션 수준에서도 대규모 유한요소 모델을 해석할 수 있도록 컴퓨팅 환경이 급속도로 변화되었다. 이 논문에서는 멀티코어 CPU를 갖는 공유 메모리 구조에 대한 병렬 유한요소 프로그램 설계시 고려사항으로 (1) 최적화된 수치라이브러리의 사용, (2) 최신 직접 희소 솔버의 사용, (3) OpenMP를 이용한 병렬 요소 강성 행렬의 계산, (4) 희소행렬 저장방식의 일종인 triplet을 이용한 어셈블 기법 등을 제시하였다. 또한 대규모 수치모델을 통해 많은 시간이 소요되는 작업을 기준으로 병렬화 효과를 검토하였다.
멀티코어 CPU와 BLAS, LAPACK을 구현한 최적 수치라이브러리, 직접 희소 솔버의 대중화 등 PC나 워크스테이션 수준에서도 대규모 유한요소 모델을 해석할 수 있도록 컴퓨팅 환경이 급속도로 변화되었다. 이 논문에서는 멀티코어 CPU를 갖는 공유 메모리 구조에 대한 병렬 유한요소 프로그램 설계시 고려사항으로 (1) 최적화된 수치라이브러리의 사용, (2) 최신 직접 희소 솔버의 사용, (3) OpenMP를 이용한 병렬 요소 강성 행렬의 계산, (4) 희소행렬 저장방식의 일종인 triplet을 이용한 어셈블 기법 등을 제시하였다. 또한 대규모 수치모델을 통해 많은 시간이 소요되는 작업을 기준으로 병렬화 효과를 검토하였다.
The computing environment has changed rapidly to enable large-scale finite element models to be analyzed at the PC or workstation level, such as multi-core CPU, optimal math kernel library implementing BLAS and LAPACK, and popularization of direct sparse solvers. In this paper, the design considerat...
The computing environment has changed rapidly to enable large-scale finite element models to be analyzed at the PC or workstation level, such as multi-core CPU, optimal math kernel library implementing BLAS and LAPACK, and popularization of direct sparse solvers. In this paper, the design considerations on a parallel finite element code for shared memory based multi-core CPU system are proposed; (1) the use of optimized numerical libraries, (2) the use of latest direct sparse solvers, (3) parallelism using OpenMP for computing element stiffness matrices, and (4) assembly techniques using triplets, which is a type of sparse matrix storage. In addition, the parallelization effect is examined on the time-consuming works through a large scale finite element model.
The computing environment has changed rapidly to enable large-scale finite element models to be analyzed at the PC or workstation level, such as multi-core CPU, optimal math kernel library implementing BLAS and LAPACK, and popularization of direct sparse solvers. In this paper, the design considerations on a parallel finite element code for shared memory based multi-core CPU system are proposed; (1) the use of optimized numerical libraries, (2) the use of latest direct sparse solvers, (3) parallelism using OpenMP for computing element stiffness matrices, and (4) assembly techniques using triplets, which is a type of sparse matrix storage. In addition, the parallelization effect is examined on the time-consuming works through a large scale finite element model.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 연구에서는 유한요소법의 수치해석 관점에서 최신 컴퓨팅 환경 변화를 조사하였다. 이러한 환경 변화를 고려하여 멀티코어 CPU를 갖는 공유 메모리 구조에 대한 병렬 유한요소 프로그램 설계시 중요 고려 사항으로 (1) 최적화된 수치라이브러리의 사용, (2) 최신 직접 희소 솔버의 사용, (3) OpenMP를 이용한 병렬 요소 강성 행렬의 계산, (4) 희소행렬 저장방식의 일종인 triplet을 이용한 어셈블 기법 등을 제시하였다.
특히 멀티코어 CPU가 일반화됨에 따라 개인용 컴퓨터 또는 워크스테이션에서도 대규모 고성능 연산이 가능한 하드웨어 기반이 마련되었으며, 그 성능을 극대화할 수 있는 여러 소프트웨어적인 노력이 추진되고 있다. 이 논문에서는 멀티코어 CPU를 갖는 공유 메모리 구조에 대한 병렬 유한요소 프로그램 설계시 고려사항을 제시하고, 대규모 수치모델을 통해 그 효과를 검토하였다.
가설 설정
이 방식은 동일한 정식화 과정을 거친 유한요소의 경우 요소 강성 행렬의 계산 시간이 동일하다는 가정을 통해 고안된 것이다. 만약 비선형 변형을 보일 경우 이 방식은 효율이 떨어질 수도 있으나 요소 강성 행렬의 병렬 계산을 간단하게 구현할 수 있는 장점이 있다.
제안 방법
이중 (1)과 (2)는 적절한 라이브러리를 선택함으로써 달성가능하며, (3)과 (4)는 병렬 유한요소 코드의 설계 관점에서 보다 코드의 복잡도를 낮추는 새로운 방법을 제시하였다. 또한 대규모 유한요소모델을 통해 많은 시간이 소요되는 작업을 기준으로 병렬화 효과를 검토하였다.
본 연구에서는 견고성이 우수하고 수식번호 최적화 기능이 내장되어 간단한 유한요소 코드 설계가 가능한 직접 희소 솔버인 PARDISO 솔버를 채용하였다. PARDISO는 University of Basel에서 개발하였으며, Intel MKL에 도입되어 무료로 사용 가능하며 성능이 우수한 것으로 알려져 있다.
본 연구에서는 공유 메모리 구조를 위한 병렬 프로그래밍 API인 OpenMP를 이용하여 모든 요소를 순회하여 요소 강성 행렬을 계산하는 과정을 병렬화하였다. 개별 요소의 계산시간이 다를 경우 개별 코어로 요소 강성 행렬의 계산 작업을 할당하는 스케줄링(scheduling)이 필요하며 이는 병렬화 작업의 효율성에 큰 영향을 미치게 된다.
본 연구에서는 동일한 요소 타입에 대한 병렬화를 순차적으로 진행하는 간단한 방식을 적용하였다. 예를 들어 유한요소 모델 내에 8절점 솔리드 요소와 4절점 쉘 요소가 혼재되어 있는 경우 8절점 솔리드 요소 집합에 대한 병렬 루프(parallel loop)를 실행하고, 이후 4절점 쉘 요소 집합에 대한 병렬 루프를 실행하는 방식으로 설계하였다.
방향별 길이는 3000, 30, 30으로 설정하였다. 수치실험은 Table 1에 표시한 것과 같은 메쉬의 크기를 변경한 4가지 모델에 대해 수행하였다. 가장 큰 해석 모델은 최대 자유도수가 200만개인 대규모 유한요소 모델이다.
이 논문에서는 멀티코어 CPU를 갖는 공유 메모리 구조에 대한 병렬 유한요소 프로그램 설계시 고려사항으로 (1) 최적화된 수치라이브러리의 사용, (2) 최신 직접 희소 솔버의 사용, (3) OpenMP를 이용한 병렬 요소 강성 행렬의 계산, (4) 희소 행렬 저장방식의 일종인 triplet을 이용한 어셈블 기법 등을 제시하였다. 이들 설계 사항은 비교적 코드 반영이 용이한 장점이 있다.
본 연구에서는 유한요소법의 수치해석 관점에서 최신 컴퓨팅 환경 변화를 조사하였다. 이러한 환경 변화를 고려하여 멀티코어 CPU를 갖는 공유 메모리 구조에 대한 병렬 유한요소 프로그램 설계시 중요 고려 사항으로 (1) 최적화된 수치라이브러리의 사용, (2) 최신 직접 희소 솔버의 사용, (3) OpenMP를 이용한 병렬 요소 강성 행렬의 계산, (4) 희소행렬 저장방식의 일종인 triplet을 이용한 어셈블 기법 등을 제시하였다. 이중 (1)과 (2)는 적절한 라이브러리를 선택함으로써 달성가능하며, (3)과 (4)는 병렬 유한요소 코드의 설계 관점에서 보다 코드의 복잡도를 낮추는 새로운 방법을 제시하였다.
8과 같은 캔틸레버 모델을 사용하였다. 해석 모델에서는 8절점 솔리드 요소를 x, y, z방향으로 nx, ny, nz개로 분할하여 해석한다. 방향별 길이는 3000, 30, 30으로 설정하였다.
대상 데이터
수치실험은 Table 1에 표시한 것과 같은 메쉬의 크기를 변경한 4가지 모델에 대해 수행하였다. 가장 큰 해석 모델은 최대 자유도수가 200만개인 대규모 유한요소 모델이다. 표는 각 모델에 대한 요소수(No.
시퀀셜 버전의 경우에도 캐쉬 메모리의 특성을 사용하기 때문에 간단한 행렬 연산이라 하더라도 직접 코딩한 것보다 계산 속도가 빠르며, 멀티스레드 버전은 추가적으로 OpenMP를 기반으로 멀티코어의 성능을 활용하게 된다. 본 연구에서는 비교적 성능이 우수하고 최근 무료화된 Intel MKL을 사용하였다.
00GHz CPU 2기와 256 GB 메모리를 장착한 시스템에서 수행되었다. 시스템의 전체 코어수는 24개이다. Table 2와 Table 3은 코어 1개와 코어 24개를 사용할 때의 해석소요시간을 나타낸 것이다.
이론/모형
본 연구에서 제안한 방법에 대한 효과를 검토하기 위해 Fig. 8과 같은 캔틸레버 모델을 사용하였다. 해석 모델에서는 8절점 솔리드 요소를 x, y, z방향으로 nx, ny, nz개로 분할하여 해석한다.
본 연구에서는 유한요소 모델 어셈블 방법으로 triplet을 이용한 방법 (3)을 채택하였다. 이 방법에서는 방법 (2)와 달리 CSC 또는 CSR 저장형식을 미리 계산하고 어셈블시 요소 행렬의 각 항의 위치를 계산하는 번거러움이 없기 때문에 유한요소 프로그램의 설계 구조를 간략화할 수 있다.
성능/효과
9~11은 약 86만개의 자유도를 갖는 C300×30×30 모델에 대한 코어별 계산 시간을 나타낸 것이다. State Determination Time 중 Element Time은 본 연구에서 제안한 방법에 따라 병렬화가 잘 이루어짐을 나타내고 있다. 반면에 이전 단락에서 언급한 것과 같이 Assembling Time에 대한 병렬화 효과는 거의 없다.
Triplet을 이용하여 어셈블할 때 순간 최대 메모리가 많이 소요되지만 직접 희소 솔버를 사용할 때 소요되는 순간 최대 메모리 보다는 상당히 작음을 알 수 있다. 따라서 본 연구에서 제안한 어셈블 방법에서 메모리는 문제되지 않음을 알 수 있다.
이들 설계 사항은 비교적 코드 반영이 용이한 장점이 있다. 또한 약 200만 자유도를 갖는 대규모 수치모델을 통해 많은 시간이 소요되는 작업을 기준으로 병렬화 효과를 검토하였으며, PC나 워크스테이션에서 병렬화를 통해 충분히 대규모 모델을 계산할 수 있음을 확인하였다.
후속연구
향후 연구에서는 반복 희소 솔버의 대규모 유한요소모델에 대한 적용성을 검토할 예정이며, Message Passing Interface(MPI)를 활용한 분산 메모리 구조(distributed memory architecture)에 대한 유한요소 코드 설계와 관련된 주제를 수행할 예정이다.
질의응답
핵심어
질문
논문에서 추출한 답변
유한요소 프로그램의 구성은?
유한요소 프로그램은 (1) 요소 행렬 및 개별 하중 벡터의 계산, (2) 전체 행렬과 전체 하중 벡터의 계산, (3) 선형 방정식 또는 고유치 문제를 통해 해의 계산(변위 계산 등), (4) 계산된 해를 이용한 후처리(하중 계산, 응력 계산 등) 등으로 구성된다. (3)에 해당하는 Ax=b 형태의 선형방정식(linear system of equations)이나 Ax=λx 또는 Ax=λMx 형태의 고유치 문제(eigenvalue problems)를 해석하는데 가장 많은 시간과 메모리가 필요하다.
직접 희소 솔버의 장단점은?
직접 희소 솔버는 한번 행렬 분해(factorization)을 수행하고 나면 여러 번 우변 벡터(right-hand side vector)에 적용 가능하며, 행렬의 상태(condition)가 나쁘더라고 동일한 시간이 소요되는 등의 장점을 가지고 있다. 하지만 필인(fill-in, 원래 0인 항이나 행렬 분해 도중에 0이 아닌 항으로 바뀌는 항)의 존재로 인해 메모리가 많이 소요되는 단점이 있다. Multifrontal, supernodal methods 등의 알고리즘을 사용하는 직접 희소 솔버는 그래프 이론(graph theory)에 따라 연산회수와 필인을 최소화하며, 연산 도중 생성되는 작은 크기의 꽉찬 행렬(dense submatrices)을 최적화된 BLAS와 LAPACK을 이용함으로써 빠르게 해를 구할 수 있다(Davis, 2006).
최적 수치라이브러리란 무엇인가?
캐쉬 메모리가 장착된 CPU나 multi-core CPU의 성능을 최대한 이끌어 내기 위해서는 최근 대중화된 최적 수치라이브러리(math kernel library)를 적극적으로 활용해야 한다. 이들 라이브러리는 벡터과 행렬 간의 기본 연산을 정의한 BLAS(basic linear algebra subprogram), 꽉찬 행렬(dense matrix)에 대한 선형방정식과 고유치문제의 해를 풀 수 있는 함수 집합인 LAPACK(Linear Algebra PACKage) 등의 표준 수치 라이브러리 인터페이스를 캐쉬 메모리와 멀티코어 CPU의 성능을 극대화할 수 있도록 CPU 차원에서 최적화한 라이브러리를 의미한다. 다음은 대표적인 최적 수치라이브러리를 정리한 것이다.
참고문헌 (23)
ABQUS Inc. (2007) ABAQUS Analysis User's Manual (Version 6.7).
ACML-AMD Core Math Library http://developer.amd.com/tools-and-sdks/archive/compute/amd-core-math-library-acml.
ADINA R&D Inc. (2005) Theory and Modeling Guide, ADINA System 8.3.
ANSYS Inc. (2007) Release 11.0 Documentation for ANSYS-Mutitibody Analysis Guide.
ATLAS-Automatically Tuned Linear Algebra Software, http://math-atlas.sourceforge.net
Bathe, K.J. (1995) Finite Element Procedures, Prentice Hall.
Benzi, M., Kouhia, R., Tuma, M. (1998) An Assessment of Some Preconditioning Techniques in Shell Problems, Comm. Numer. Methods Eng., 14, pp.897-906.
Benzi, M., Cullum, J.K., Tuma, M. (2000) Robust Approximate Inverse Preconditioning for the Conjugate Gradient Method, J. Sci. Comput., 22(4), pp.1318-1332.
Benzi, M. (2002) Preconditioning Techniques for Large Linear Systems: A Survey. J. Comput. Phys., 182(2), pp.418-477.
Lim, J.-S., Son I.-M., Kim J.-M., Seo C.-G. (2016) A Speed-Up in Computing Time for SSI Analysis by p-version Infinite Elements, J. Comput. Struct. Eng. Inst. Korea, 29(5), pp.471-482.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.