병렬화(*)

디자인 문서에서 밝혔다시피 이 라이브러리는 병렬 처리를 고려하지 않습니다. 이 단원은 기초적인 병렬 컴퓨팅의 개요를 서술합니다. 따라서 간결한 라이브러리 구현에서 병렬화를 왜 고려하지 않는지, 어떠한 사항을 추가로 고려해야 하는지에 대해 알아봅시다.

용어

병렬 컴퓨팅, 병행 컴퓨팅, 분산 컴퓨팅 등 많은 용어가 존재합니다. 세세한 개념의 차이 자체는 있지만 이들을 완벽하게 구분할 수 있는 기준은 없습니다. 이 부록에서는 병렬 컴퓨팅이라는 용어를 사용합니다. 이 용어에서 시작해 살펴볼 것이며 나머지 개념들은 추가로 해당 내용이 나올 때 서술하겠습니다.

병렬 처리

  1. 초고성능의 슈퍼 컴퓨터의 제작

  2. 낮은 비용으로 일정 수준 이상의 계산 성능을 가진 계산 시스템의 제작

병렬 처리 구조는 이렇듯 초고성능의 구현과 재정적 효율성 측면 각각에서 모두 고려될 수 있습니다. 전자는 일반적으로 대규모 전산 유체 역학이나 천체 에너지 계산등이 필요한 시뮬레이션 등에서 사용됩니다. 일상적으로는 기상 예측 시스템에서 사용합니다. 후자는 그리드 컴퓨팅으로 잘 구현되어 있습니다. SETI@home 이나 Boinc 시스템이 그 예시입니다.

이러한 분야는 컴퓨터 아키텍처, OS의 구성과 관리 시스템 등과도 연관되어 있습니다. 세세하게 살펴볼 경우, 아키텍처의 역사, 발전, 분류, 그 위에서 돌아가는 OS의 구성, 구현 방법 관리, 병렬화를 지원하는 언어와 그 확장까지 모두 살펴볼 수 있습니다. 이들을 짧은 부록안에서 전부 서술하는 것은 불가능합니다. 간단한 개요 수준으로만 살펴보도록할 것입니다.

컴퓨터 아키텍처의 분류

스레드와 프로세스

스레드

스레드 안전과 병렬화

스레드 안전한 프로그램은 손쉽게 멀티-스레드 프로그램으로 사용할 수 있습니다. GSL의 대부분의 기능들은 디자인 특성상 스레드-안전합니다.

C에서 스레드-안전에 영향을 미치는 요인으로 다음이 있습니다.

  • 전역 변수

  • 정적 변수

프로세스

프로세스는

근래의 개인용 컴퓨터들도 멀티-코어 시스템이 매우 흔한만큼 일반 개인들도 병렬 프로그래밍을 공부할 때 하드웨어의 제약이 그리크지는 않습니다. 게임 시장의 활발한 성장에 감사합시다.

구현 라이브러리와 소프트웨어

Message-Passing Interface에 관한 표준 규약이 존재합니다. 해당 내용은 MPI-Forum <https://www.mpi-forum.org/> 에서 관리하며 표준 문서는 무료로 온라인에 pdf로 공개되어 있습니다.

  • POSIX thread routines

    POSIX는 IEEE가 제정한 이식성 있는 운영체제를 위한 어플리케이션 인터페이스로 Portable Operating System Interface uniX의 약자입니다. 약자에서 보이다시피 Unix 및 Unix-like 운영체제에서 사용가능하며, 대표적으로 Linux 와 Mac의 OSX가 있습니다. 이 기능들은 Multi-thread processing을 위한 처리입니다.

  • Open MPI

    Open source Message Passing Interface의 약자입니다. MPI 표준을 구현하기 위한

  • OpenMP

    Open Multi-Processing의 약자로 shared

참고 문헌과 추가 자료

병렬 컴퓨팅의 개요로 다음의 서적들을 참고할 수 있습니다.

  • Parallel Programming in C with MPI and Open MP

  • Parallel Numerical Algorithms

라이브러리들에 관한 자세한 내용과 추가 자료들은 다음의 공식 문헌들을 참고하길 바랍니다.

병렬 컴퓨팅을 다루는 학술지로 다음이 있습니다.

참고 문헌

  • Blaise Barney, Livermore Computing (retired), Donald Frederick, LLNL, Introduction to Parallel Computing Tutorial, URL: https://hpc.llnl.gov/training/tutorials/introduction-parallel-computing-tutorial#Whatis, CHECKED: Jan 2022

  • Ian Foster, Designing and Building Parallel Programs,

  • Victor Eijkhout with Robert van de Geijn and Edmond Chow, Introduction to High Performance Scientific Computing, lulu, 2011, ISBN: 978-1-257-99254-6.

  • Selim G. Aki, The Design and Analysis of Parallel Algortihms, Prentice Hall Publication, 1989, ISBM: 0-13-200056-3.

  • Alhubail, Maitham Makki, A thread-based parallel programming library for numerical algorithms, MIT PhD Thesis, 2014, URI: http://hdl.handle.net/1721.1/90080

    C++ 기반으로 짜인 스레드 기반 병렬 처리 라이브러리에 관한 논문입니다.

  • GSL Parallel 구현 논문들
    • Park et al, Training and Research on Computational Science and Cyber-Infrastructure, Government White paper, KISTI, Dec. 2011. ReNum: TRKO201200010737, URL: https://repository.kisti.re.kr/handle/10580/11076.

    • Aliaga J. et al. (2004) Parallelization of GSL: Architecture, Interfaces, and Programming Models. In: Kranzlmüller D., Kacsuk P., Dongarra J. (eds) Recent Advances in Parallel Virtual Machine and Message Passing Interface. EuroPVM/MPI 2004. Lecture Notes in Computer Science, vol 3241. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-30218-6_31

    • Aliaga, J.I., Almeida, F., Badía, J.M. et al. Toward the parallelization of GSL. J Supercomput 48, 88-114 (2009). https://doi.org/10.1007/s11227-008-0207-z

    • Yustina Sri Suharini, & Melani, Parallel Programming Implementation of Williamson Array to Calculate skew-Hadamard Matrices , Vol. 9 No. 1 (2014): Jurnal IPTEK, https://doi.org/10.31543/jii.v9i1.48