이 글은 일반적인 병렬, 멀티쓰레딩 개념에 대해 설명하고 하드웨어와 소프트웨어 관점에서의 병렬 처리를 비교설명합니다. 그리고 병렬 처리가 가능한 하드웨어 아키텍쳐에 대해 간단히 설명하고 몇가지 유명한 병렬 프로그래밍 모델에 대해서도 설명합니다. 또한 병렬 처리 개념과 관련된 썬의 하드웨어 소프트웨어 제품들도 서로 연관시켜 봅니다.


병렬 처리와 프로그래밍 용어들

병렬 컴퓨팅과 병렬 처리, 그리고 병렬 프로그래밍은 약간 모호하게 쓰이거나 정확하게 정의 혹은 구분되지 않은채 사용되고 있습니다. 병렬 컴퓨팅(Parallel computing) 은 복수개의 작업을 복수개의 프로세서 상에서 동시에 실행시키는 모든 기술들을 아우르는 단어 입니다. 병렬 처리(Parallel processing), 혹은 병렬화(parallelism) 는 하나의 런타임 작업을 서로 독립적이고 작은 여러개의 작업으로 나누는 것을 의미 합니다. 만약 오직 하나의 프로세서가 사용 가능하다면 작업은 순차적으로 실행 됩니다. 현대의 고성능 단일 프로세서에서 작업이 동시에 여러개 실행되는 것처럼 보일 수 있지만 실제적으로 단일 프로세서상에서는 동시에 실행 될 수 없습니다.

병렬 프로그래밍(Parallel programming), 혹은 멀티쓰레드 프로그래밍(multithreaded programming) 은 병렬 처리를 구현하기 위해 사용되는 소프트웨어 방법론을 뜻합니다. 프로그램은 반드시 어플리케이션의 어느 부분이 동시에 실행되어야 할지 런타임 시스템에 알리는 지시자를 포함해야 합니다. 프로그램은 이때 병렬화 되었다고 합니다. 병렬 프로그래밍은 프로그램이 여러개의 작업을 동시에 수할 수 있도록 해서 어플리케이션의 런타임을 줄이는 시도를 통해 퍼포먼스 최적화를 꽤하는 기술을 의미 합니다.

병렬 프로그래밍은 여러개의 서로 다른 소프트웨어 인터페이스 혹은 병렬 프로그래밍 모델을 이용해 구현될 수 있습니다.

이 글은 일반적인 병렬, 멀티쓰레딩 개념과 하드웨어, 스프트웨어 관점에서의 병렬 처리를 비교 설명 합니다. 또한 병렬 처리를 가능하도록 하는 하드웨어 아키텍쳐에 대해 설명하고 몇가지 유명한 병렬 프로그래밍 모델에 대해서 설명합니다. 특정 주제에 관해 좀 더 깊이 알 수 있는 다른 곳들에 대한 포인터도 포함되어 있습니다.

병렬 처리

병렬 처리는 특정 작업을 동시에 실행될 수 있도록 복수개의 작업으로 나누는 과정을 뜻하는 일반적인 단어 입니다. 이러한 서브태스크들은 쓰레드(thread) 라고 불리며 명령어의 흐름을 독립적으로 실행할 수 있는 런타임 개체들을 의미 합니다. 병렬 처리는 하드웨어 레벨과 소프트웨어 레벨에서 이루어질 수 있습니다. 이러한 병렬 처리의 종류를 구분하는 것이 매우 중요 합니다. 소프트웨어 레벨에서 어플리케이션은 코드 내에서 병렬화의 이점을 얻기 위해 다시 쓰여질 것입니다. 올바른 하드웨어 지원과 함께 즉 멀티프로세싱 시스템에서 쓰레드는 비로서 런타임에서 동시에 실행될 수 있습니다. 만약 모든 쓰레드들이 동시에 실행 될 수 있도록 충분한 프로세서와 코어가 사용 가능하지 않다면 몇몇 작업들은 여전히 순차적으로 실행될 것입니다. 이러한 비-병렬화 된 실행을 보통 순차적으로 혹은 직렬적으로 실행된다고 표현합니다.

하드웨어에서의 병렬화

병렬 어플리케이션의 실행은 하드웨어 디자인에 의존적입니다. 그러나 시스템이 병렬실행이 가능해도 소프트웨어는 반드시 작업들을 쪼개고, 스케줄하고 관리해야 합니다.

  • 멀티프로세서 - 하나 이상의 프로레서가 동시에 활성화 될 수 있음. 프로세서들은 공유 메모리를 사용하여 통신하고 데이타를 공유 함. 프로세서들간의 작업 할당은 운영체제에 의해 처리됨 그러므로 시스템은 여러개의 작업을 동시에 실행할 수 있음. 동시 실행은 전체 처리량(throughput) 을 향상시키고 특정 워크로드는 싱글 프로세서 시스템과 비교해서 어플리케이션의 턴어라운드 시간이 훨씬 줄어 듬. 특정 케이스들에서 이러한 감소는 충분하지 않을 수도 있음. 왜냐하면 싱글 어플리케이션의 실행 시간히 여전히 길기 때문임. 여기에서 병렬 프로그램이 문제 해결을 위해 고려될 수 있음. 어플리케이션 개발자는 POSX 쓰레드 혹은 OpenMP 같은 병렬 프로그래밍 모델을 적절하게 선택해야할 필요가 있음. 대부분의 썬 하드웨어는 멀티프로세서 환경에서 사용이 가능하고 몇개의 엔트리 레벨 서버화 워크스테이션 만이 하나의 프로세서를 가지고 있음. 썬은 썬 서버 패밀리 비교썬 워크스테이션 비교 자료를 통해서 썬 머신에서의 프로세서 갯수를 제공하고 있음.

  • 멀티코어 프로세서 - 하나 이상의 코어 혹은 프로세승 유닛이 하나의 칩 안에서 동시에 활성화될 수 있습니다. 멀티코어 처리는 종종 chip-level multiprocessing (CMP) 이라고 불립니다. 왜냐하면 복수개의 프로세서가 하나의 칩에 들어가 있기 때문 입니다. 코어는 공유 메모리와 공유 시스템 버스를 사용하고 몇몇 경우에는 서로 공유 통신하고 데이타를 공유하기 위해 공유 캐쉬를 사용하기도 합니다. 코어는 일반적으로 고유의 프로세싱 유닛과 레지스터를 가지고 있습니다. 각 코어의 아키텍쳐는 서로 다른 프로세서 구현에 따라 다양하게 존재합니다. 운영체제는 각각의 코어를 프로세서로 보고 코어 간의 작업 할당을 담당합니다. 멀티코어 프로세서는 싱글 칩에서 된 멀티프로세서 시스템과 비슷합니다. 비록 이러한 다른점이 존재하더라도(특히 리소스를 공유하는 측면에서), 어플리케이션의 입장에서는 멀티 프로세서와 멀티 코어 프로세서는 동일합니다. 그러므로 멀티코어 프로세서에서 실행되는 싱글-쓰레드 어플리케이션들은 하나의 어플리케이션들이 각각 동시에 실행 될 수 있으므로 워크로드의 처리량이 증가하게 됩니다. 예를 들어 듀얼-코어 프로세서는 두개의 프로그램이 동시에 실행될 수 있습니다. 병렬 어플리케이션은 여러개의 프로세서 코어에 독립적인 작업들이 스케줄 될 수 있습니다. 위의 두가지 경우 모두 어쨌든 퍼포먼스는 진정한 멀티프로세서 디자인에 비해 성능이 좋지는 않을 것 입니다. 퍼포먼스는 멀티코어 구현과 얼마나 많은 공유 리소스들이 동시에 실행되는 어플리케이션에 의해 필요 한지에 따라 크게 달라지게 됩니다. 썬 서버는 싱글-코어 혹은 듀얼 -코어 AMD 옵테론 프로세서들이 탑재되어 있고, 듀얼-코어 혹은 쿼드-코어 인텔 Xeon 프로세서와 싱글-코어 울트라SPARC III 혹은 울트라SPARC IIIi 프로세서 혹은 듀얼-코어 울트라SPARC IV, 울트라SPARC IV+ 프로세서들이 탑재되어 있습니다.

썬 스튜디오:멑티 코어 환경에서의 병렬 프로그래밍지원 페이지는 멀티코어 프로세서 프로그래밍에 관한 많은 정보 소스들의 링크를 제공하고 있습니다.

  • 멀티쓰레드 프로세서 - 이러한 프로세서들은 여러개의 멀티쓰레드 코어를 포함하고 있고 그 위에서 여러개의 활성 쓰레드가 전환됩니다. 몇몇 프로세서 코어는 vertical multithreading (VMT) 를 구현함으로써 코어가 여러개의 쓰레드를 서로 분리된 환경으로 실행할 수 있도록 합니다. 만약 하나의 소프트웨어 쓰레드가 리소스를 대기하고 있다면(데이타를 메모리로, 혹은 입출력 등), 다른 쓰레드는 즉각 실행을 이어 받습니다. 두번째 쓰레드가 다시 대기 상태로 빠지면 첫번째 쓰레드 혹은 다른 쓰레드가 계속해서 실행 됩니다. VMT 는 프로세서 사이클이 좀 더 효율적으로 사용될 수 있도록 합니다. 초기의 VMT 디자인은 너무 많은 리소스 공유로 인해 괴루움이 있었고 대부분의 경우에는 리소스 공유를 비활성화 시킴으로써 퍼포먼스의 향상을 얻을 수 있었습니다. vertical 쓰레드를 사용하고 있는 요즘의 프로세서들에는 듀얼 코어 SPARC 64 VI 프로세서(두개의 vertical 쓰레드를 코어에 가지고 있음) 를 포함하고 Fujitsu 에서 개발 되었습니다. 썬 SPARC 엔터프라이즈 M-시리즈 서버 는 SPARC64 VI 프로세서를 사용합니다.

    하드웨어 멀티쓰레딩 기술을 좀 더 세분화 한 것을 simultaneous multithreading (SMT) 이라고 부릅니다. 진정한 멀티쓰레드 프로세서 특히 SMT 를 위해 디자인 된 것들은 어떠한 리소스 공유 문제도 가지고 있지 않습니다. 썬은 복수개의 코어를 가지고 각 코어가 멀티쓰레드 되는 프로세서 디지안을 위해 chip multithreading (CMT) 라는 용어를 만들었습니다. UltraSPARC T1 은 이 디자인을 구현한 첫번째 프로세서 입니다. 울트라SPARC-T1 프로세서는 T1000T2000 서버 모델에 배치되어 있습니다. 새로 출시될 프로세서들 은 이러한 개념을 뛰어 넘도록 계획 되어 있습니다.

    썬은 throughput computing 이라는 용어를 사용하여 처리량(throughput) 을 혁신적으로 증가시키거나 주어진 시간동안 컴퓨터가 더 많은 양의 일을 할 수 있는 프로세서 디자인 전략을 세웠습니다. 프로세서는 칩 멀티쓰레딩을 사용하고 솔라리스에서 완벽히 최적화 되어서 이러한 퍼포먼스 이득을 성취할 수 있도록 합니다. 이 단어는 네트워크 용어에서 따왔서 처리량은 컴퓨터 혹은 네트워크가 데이타를 전송하거나 수신하는 속도로 정의 합니다. throughput 컴퓨팅에 대한 더 자세한 정보는 Throughput Computing White Paper 를 참고하시기 바랍니다.

    CoolThreads 란 단어는 썬의 CMT 기반의 프로세서 라인을 뜻하고 이것의 첫번째 제품이 바로 울트라SPARC T1 입니다. CoolThread 란 이름은 프로세서의 칩 멀티 쓰레딩을 반영함과 동시에 낮은 전력 소모를 줄여서 좀 더 낮은 발열을 통해 좀 더 차가운 칩이 결과적으로 되는 것을 반영하고 있습니다. CoolThread 와 울트라SPARC T1 에 대한 더 자세한 정보는 기술문서 Overview of UltraSPARC T1 Processor with CoolThreads Technology 를 참고하시기 바랍니다.

    솔라리스10은 CoolThread 프로세서에서 돌아가도록 최적화 되었습니다. 다른 운영체제들도 OpenSPARC 커뮤니티 를 통해서 울트라SPARC T1 아키텍쳐로 포팅할 수 있습니다.

    칩 멀티쓰레딩에 대한 좀 더 자세한 정보는 다음의 썬 문서들을 참고하시기 바랍니다:

  • 클러스터 컴퓨팅 - 클러스터는 일반적으로 node 로 불리는 컴퓨터의 그룹이 마치 하나의 시스템 처럼 같이 동작하는 것을 의미 합니다. 종종 node 들은 동일한 종류의 컴퓨터로 구성되고 동일한 운영체제를 운영하며 동일한 관리 도메인에 속해 있습니다. 노드들에서 실행되고 있는 특수한 클러스터 소프트웨어와 고성능의 네트워크가 각 노드들이 서로간에 빠르게 통신할 수 있도록 합니다. 클러스터는 하드웨어와 소프트웨어가 항상 동작해야 할때 고가용성(High Availability) 로 설정될 수 있습니다. 한 노드의 하드웨어와 소프트웨어 오류가 클러스터에 영향을 주지 않습니다. 왜냐하면 HA 설정에 빌트인된 redundancy 가 실패한 노드의 작업을 이어 받아 클러스터가 계속해서 실행될 수 있도록 합니다. HA 가 필요한 환경의 예로 온라인 예약 혹은 주문시스템을 들 수 있습니다.

    시스템 클러스터는 또한 대용량의 병렬 컴퓨터(고 성능 컴퓨팅(HPC) 에 유용한) 로 사용될 수 있습니다. 예를 들어 HPC 를 위해 설정된 클러스터는 병렬화 된 과학분야 어플리케이션을 실행하는데 사용될 수 있습니다. 일반적으로 HPC 와 클러스터의 HA 는 통합되지 않습니다. HPC 환경에서 모든 클러스터의 가용 리소드들은 태스크 수행을 위해 사용 됩니다. 만약 오류가 발생하면 하드웨어 혹은 소프트웨어는 수정되고 재시작 됩니다.

    클러스터를 운용함으로써 멀티프로세싱의 잇점을 극대화 하려면 어플리케이션은 반드시 소프트웨어 병렬 프로그래밍 모델중에 하나를 사용해서 병렬화 되어야 합니다.

    • 그리드 컴퓨팅 - 이 단어는 네트워크로 연결된 이종의 컴퓨터들이 같이 작업하는 것을 의미하고 클러스터와 비슷하지만 잠재적으로 관리 도메인 과 조직을 넘나들면서 작업을 진행합니다. 그리드의 노드는 매우 같은 방에 위치해 있는 작은 그룹의 컴퓨터 부터 세계 각지에 설치되어 있는 네트워크로 연결된 컴퓨터의 그룹이 될 수 있습니다. 클러스터 그 자체 조차 그리드의 노드가 될 수 있습니다. 그리드의 각 노드는 특수한 소프트웨어를 실행 시켜서 그드상의 각 노드에 퍼져있는 CPU 싸이클 이나 스토리지를 효과적으로 사용할 수 있도록 해 줍니다. 이 기술은 시스템의 효율적인 사용을 가능하게 합니다. 본래 그리드는 과학 용도의 어플리케이션을 실행하기 위해 만들어 졌었습니다. 최근에 그리드의 사용은 전통적으로 사용되었던 클러스터 환경을 포함한 다른 환경으로의 확장이 이루어지고 있습니다. 결과적으로 클러스터와 그리드의 차이는 항상 명확하지 않습니다. 시스템 소프트웨어가 자주 구분자로 사용되곤 합니다.

    소프트웨어 프로그래밍 모델에 의한 병렬화

    솔라리스 OS 커널과 대부분의 솔라리스 서비스는 멀티쓰레드화 되어 있고 멀티프로세서 아키텍쳐의 장점을 이용하기 위해 다년간 최적화 되어 왔습니다. 썬은 계속해서 솔라리스 소프트웨어가 발전하고 있는 병렬 아키텍쳐를 완전히 지원하도록 솔라리스 소프트웨어를 병렬화 하고 최적화 하는데 계속해서 투자하고 있습니다. 싱글 어플리케이션이 클러스터와 그리드를 포함한 멀티프로세서 아키텍쳐에서 이득을 얻으려면 프로그램은 병렬 프로그래밍 모델중 하나를 이용해서 병렬화 되어야 합니다. 모든 경우에 어플리케이션의 병렬화 사용이 반드시 프로그래밍 모델에 딸려 오는 처리 오버헤드를 능가 할만큼의 퍼포먼스 향상이 있어야 합니다. 쓰레드의 생성 및 관리가 이러한 오버헤드의 대표적인 예라고 할 수 있습니다.

    어플리케이션에 사용되는 어떠한 프로그래밍 모델도 어플리케이션이 실행되길 기대되는 시스템의 하드웨어 아키텍쳐에 의존성을 갖습니다. 특히 개발자는 반드시 공뮤 메모리 시스템과 분산 메모리 시스템을 구분해야 합니다. 공유 메모리 아키텍쳐에서 어플리케이션은 투명하게 모든 메모리 공간에 접근할 수 있어야 합니다. 멀티 코어 프로세서가 공유 메모리 시스템의 예 입니다. 분산 메모리 환경에서 어플리케이션은 오직 어플리케이션이 실행되고 있는 노드의 메모리만 투명하게 접근 할 수 있어야 합니다. 클러스터와 그리드가 분산 메모리 시스템의 예입니다.

    병렬 컴퓨팅 소프트웨어 모델에 관한 더 자세한 정보는 기술문서 Developing Applications for Parallel Computing 를 참고하시기 바랍니다.



    공유 메모리 프로그래밍 모델

    공유 메모리 혹은 멀티쓰레드 프로그래밍은 종종 쓰레드 프로그래밍(threaded programming) 이라고 불립니다. 이 문맥에서 쓰레드는 경량 프로세스들로써 하나의 운영체제 프로세스내에 존재합니다. 쓰레드는 동일한 메모리 주소 공간과 프로세스 상태 정보를 공유 합니다. 이러한 프로세스들을 종종 부모(parent) 프로세스라고 불립니다. 공유 메모리 모델은 복수개의 프로세서를 가진 컴퓨터에서 지원되는데 각 코어 혹은 프로세서는 동일한 공유 메모리에 접근 합니다. 이러한 시스템을 단독 주소 공간(single address space) 시스템이라고 합니다. 쓰레드간의 통신과 데이타 교환은 공유 메모리를 통해 이루어 집니다.

    공유 메모리 시스템을 위한 병렬 프로그래밍은 아래의 모델을 통해서 구현될 수 있습니다.

    • 자동 병렬화(Automatic parallelization) - 프로그램이 컴파일 되면 컴파일러는 어플리케이션내의 병렬화를 인식하려고 시도 합니다. 루프(단일 루프든 중첩된 루프든) 에 촛점을 맞춥니다. 왜냐하면 이 영역이 일반적으로 실행 타임의 대부분이 소비되는 곳이기 때문입니다. 의존성 분석을 통해서 컴파일러는 루프를 병렬화 하는 것이 안전한지 결정합니다. 만약 안전하다면 컴파일러는 런타임시의 병렬 실행을 위한 올바른 병렬 구조를 생성 합니다. 개발자는 이 기능을 사용하기 위해서 오직 적절한 컴파일러의 옵션만 알면 됩니다. 썬 스튜디오 컴파일러에서 이 옵션은 -xautopar 입니다. 병렬화 메세지를 출력해 주는 -xloopinfo 옵션 또한 강력히 추천합니다.
    • POSIX 쓰레드와 솔라리스 쓰레드 - 솔라리스는 두개의 공유메모리 쓰레드 모델을 지원합니다. 표준 POSIX 쓰레드 API(보통 Pthreads 로 불리는) 가 C 프로그래밍시에 사용 가능합니다. 이전 버전의 솔라리스 쓰레드 API(Pthreads 표준 보다 더 이전의) 또한 지원 됩니다. POSIX 쓰레드 API 는 다양한 UNIX 기반 운영체제에서 지원되는 표준 입니다. 이 표준을 사용하면 이식성을 높일 수 있습니다. 두 라이브러리 모두 솔라리스의 표준 C 라이브러리libc 에 포함되어 있습니다. pthreads(5) 멘 페이지를 통해서 두 API 들을 비교해 보시기 바랍니다.

      Pthreads 프로그래밍에 관한 축약된 정보는http://www.llnl.gov/computing/tutorials/mpi/에서 POSIX Threads Programming Tutorial 에서 보실 수 있습니다. POSIX 쓰레드를 이용한 프로그래밍을 좀 더 쉽게 이해하시려면 책 Programming with POSIX ThreadsProgramming with Threads 를 읽어 보시기 바랍니다.

    • OpenMP - 이 API 스펙은 병렬 프로그래밍을 공유 메모리 시스템에서 구현하기 위한 것입니다. OpenMP 는 POSIX 쓰레드 보다 고수준의 모델을 제공하고 또한 추가적인 기능도 제공 합니다. 대다수의 경우 OpenMP 구현은 POSIX 쓰레드 같은 네이티브 쓰레드 모델을 바탕으로 만들어 집니다. OpenMP 는 컴파일러 지시자, 런타임 함수, 환경 변수들의 셋으로 구성되어 있습니다. Fortran, C, C++ 가 지원됩니다.

      컴파일러 지시자는 OpenMP 에서 중요한 역활을 담당합니다. 소스에 지시자를 삽입함으로써 개발자가 프로그램 내에 어떠한 부분이 병렬로 실행될지를 지정하게 됩니다. 컴파일러는 이렇게 지정된 프로그램의 부분을 적절한 구조로(예를 들어 멀티태스킹 라이브러리를 호출 하는 루틴으로 변경) 변환 합니다. OpenMP 의 다른 프로그래밍 모델과 비교한 4가지 장점은 다음과 같습니다:

      • 이식성 - 비록 OpenMP 가 공식 표준이 아니더라도 OpenMP 를 사용하는 프로그램은 다른 OpenMP 컴파일러 혹은 환경에 쉽게 포팅 될 수 있습니다.
      • 사용의 간편성 - 개발자가 POSIX 쓰레드 레벨에서 쓰레드를 생성하거나 관리하지 않습니다. 예를 들어, 쓰레드 관리는 컴파일러와 그 기반의 멀티태스킹 라이브러리에 의해 처리 됩니다.
      • 어플리케이션이 단계별로 병렬화가 가능함 - 개발자가 병렬로 실행될 섹션을 지정할 수 있음으로써 어플리케이션의 병렬화를 단계적으로 확장시켜나갈 수 있습니다.
      • 병렬이 적용되지 않은 버전의 프로그램이 유지 됨 - 만약 프로그램이 OpenMP 컴파일러 옵션과 함께 컴파일 되지 않았다면 코드내의 지시자는 무시 됩니다. 이러한 동작은 효과적으로 병렬 실행을 비활성화 함으로써 소스와 코드가 다시 병렬이 적용되지 않은 상태로 실행 되도록 해줍니다.

      OpenMP 스펙은 http://www.openmp.org/ 에서 보실 수 있습니다. OpenMP 에 관한 많은 자료들이 썬 개발자 네트워크 페이지의 Parallel Programming 페이지에서 확인 가능합니다. 다음과 같은 글들을 포함하고 있습니다:

      썬 스튜디오 문서에 OpenMP API User's Guide 가 포함되어 있는데 썬 스튜디오의 OpenMP API 구현에 관련된 이슈들이 설명되어 있습니다.

    분산 메모리 프로그래밍 모델

    개발자들은 아주 낮은 저수준의 통신 인터페이스, 즉 소켓 같은 것을 이용해서 네트워크에 연결된 컴퓨터간에 어플리케이션 병렬화를 구연할 수 있습니다. 그러나 이러한 방법을 사용하는 것은 어플리케이션을 어셈블리 언어로 짜는 것과 거의 동일한 방법입니다: 매우 강력하지만 적용하기 힘듭니다. 결과적으로 이러한 API 를 사용하는 병렬화된 어플리케이션은 유지하고 확장하기가 매우 어려울 것입니다.

    Message Passing Interface (MPI) 모델은 일반적으로 그리드 같은 컴퓨터 클러스터를 위한 어플리케이션을 병렬화 하는데 광범위하게 사용 됩니다. OpenMP 와 마찬가지로 이 인터페이스는 기본 OS 기능을 기반으로 하는 추가적인 소프트웨어 레이어 입니다. MPI 는 소프트웨어 네트워킹 인터페이스(소켓 같은) 위에 TCP/IP 같은 프로토콜과 함께 빌드 됩니다. MPI 는 광범위한 통신 루틴을 제공하며 널리 사용되고 있습니다.

    MPI 프로그램은 순차적인 C, C++ 혹은 포트란 프로그램으로 프로세서들의 일부분에서 실행되거나 혹은 클러스터 내의 코어들에서 실행 됩니다. 프로그래머는 작업의 분배와 작업간의 통신 그리고 다양한 쓰레드들에 어떻게 할당될지를 구현합니다. 마지막으로 프로그램은 MPI 라이브러리 함수를 호출하도록 확장되어야 합니다. 예를 들어 다른 쓰레드들에서 정보를 보내거나 받는 것을 뜻합니다.

    MPI 는 매우 명시적인 프로그래밍 모델 입니다. 비록 몇몇 편리한 기능(글로벌 브로드캐스트 작업)들이 제공되더라도 개발자는 여전히 이러한 프로그래밍 모델을 위해 병렬 어플리케이션을 디자인 해야 합니다. 또한 많은 저수준의 상세사항들이 명시적으로 다루어져야 합니다.

    MPI 의 장점은 MPI 프로그래밍 모델을 지원하는 소프트웨어를 가진 어떠한 정류의 클러스터 상에서도 어플리케이션이 실행될 수 있다는 것입니다. 비록 과거에는 MPI 프로그램들이 싱글 프로세서 워크스테이션 혹은 PC 에서 실행되었더라도 MPI 프로그램이 하나 혹은 여러개의 공유메모리를 가진 컴퓨터에서 실행되는 것이 이제는 일반적인 일입니다. 최적화된 MPI 구현은 동일 한 시스템에서 실행되는 이러한 쓰레드들의 공유 메모리를 이용해 좀 더 빠른 통신을 함으로써 장점을 취할 수 있습니다.

    다음의 자료들은 MPI 에 대한 좀 더 자세한 정보를 제공합니다:

    • MPI 스펙은 Argonne National Laboratory http://www-unix.mcs.anl.gov/mpi/ 에서 확인 가능합니다.
    • Open MPI 는 여러개의 MPI 프로젝트에서 나온 기술과 자원들을 혼합해서 연구소, 학교 및 업계 파트너들이 MPI 라이브러리를 오픈 소스 로 만든 것입니다. Open MPI 는 썬 HPC ClusterTools 7 소프트웨어 기반입니다. 이 소프트웨어는 썬 HPC ClusterTools 7 페이지에서 무료로 얻으실 수 있습니다.
    • MPI 에 관한 자세한 정보는 http://www.llnl.gov/computing/tutorials/mpi/ 에서 Message Passing Interface (MPI) 교육자료에서 얻으시기 바랍니다.
    • 추가적인 MPI 온라인 교육 자료는 http://www.unix.mcs.anl.gov/mpi/tutorial/ 에서 확인 가능합니다.

    혼합 프로그래밍 모델

    멀티코어 시스템의 발전으로 두개의 레이어를 갖는 클러스터와 그리드의 숫자가 증가하고 있습니다. 싱글 노드에서는 공유메모리를 통해 빠른 통신의 장점을 얻을 수 있고 네트워크 프로토콜을 이용하여 노드간의 통신을 할 수 있습니다. 프로그램은 공유 메모리와 분산 메모리 두개의 장점을 모두 취할 수 있습니다.

    MPI 모델은 병렬 어플리케이션을 멀티코어 시스템의 클러스터에서 실행시키는데 사용될 수 있습니다. MPI 어플리케이션은 노드에 걸쳐서 혹은 각 노드 내에서 실행될 수 있고 두개의 병렬 레이어(공유와 분산) 가 MPI 를 이용해서 사용될 수 있습니다. 그러나 몇몇 상황에서는 공유 메모리 프로그래밍 모델 즉 Pthreads 혹은 OpenMP 같은 공유 메모리 프로그래밍 모델이 제공하는 잘 정의된 병렬화가 좀 더 효율 적일 수도 있습니다. 일반적으로 노드간의 병렬 실행은 MPI 를 통해 이루어 집니다. 하나의 노드 내에서는 Pthreads 혹은 OpenMP 가 사용됩니다. 두개의 프로그래밍 모델이 하나의 어플리케이션에서 사용될때 어플리케이션은 복합 혹은 혼합모드 프로그래밍 모델을 이용해 병렬화 되었다고 합니다.

    또다른 복합 프로그래밍 모델은 Pthreads 와 OpenMP 를 혼합하는 것입니다. 이러한 종류의 어플리케이션은 오직 하나의 공유-메모리를 가진 시스템에서만 실행 됩니다. 각 Pthread 프로세스는 이후에 OpenMP 를 이용해 병렬화 해서 이러한 종류의 프로세스에 제공되는 추가적인 병렬 메카니점의 장점을 얻을 수 있습니다.

    썬 병렬 어플리케이션 개발 소프트웨어

    썬은 이 글에서 다루었던 기술들을 지원하는 소프트웨어 제품을 제공하고 있습니다.

    공유 메모리 시스템을 위한 소프트웨어

    공유 메모리 시스템을 위한 썬의 소프트웨어는:

    Threads - POSIX 쓰레드와 솔라리스 쓰레드 라이브러리가 모두 솔라리스 libc 라이브러리에 포함되어 있습니다.

    OpenMP - C, C++, Fortran 용 OpenMP 구현체가 썬 스튜디오 소프트웨어에 포함되어 있고 무려로 다운로드 가능합니다. -xopenmp 컴파일과 링크-타임 옵션은 썬 스튜디오 컴파일러가 프로그램 내의 OpenMP 지시자와 런타임 함수를 인식하도록 합니다. OpenMP 런타임 지원 라이브러리 libmtsk 는 쓰레드 관리, 동기화 그리고 스케줄링을 지원 합니다. 라이브러리는 POSIX 쓰레드 라이브러리를 기초로 만들어 졌습니다.

    분산 메모리 시스템

    MPI 의 구현은 썬 HPC ClusterTools 에 포함되어 있습니다. 이 제품은 또한 드라이버 컴파일 스크립트와 실시간에 작업을 검색 및 관리할 수 있는 도구들을 포함하고 있습니다. 썬 HPC ClusterTools 는 다양한 버전이 존재합니다. ClusterTools 5 와 ClusterTools 6 는 썬이 구현한 MPI (썬 MPI 라고 불리는)를 포함하고 있습니다. ClusterTools 7 은 MPI 의 새로운 오픈 소스 구현(Open MPI 로 불림) 을 포함하고 있습니다. 썬 MPI 와 Open MPI 간 마이그레이션 가이드는 ClusterTools documentation 에서 보실 수 있습니다.

    클러스터와 그리드를 위한 하드웨어와 소프트웨어

    클러스터를 구현하고 관리하는 썬 제품들은 다음과 같은 것들을 포함하고 있습니다:

    썬 그리드 컴퓨팅 제품은:

  • 이 아티클의 영문 원본은 http://blogs.sun.com/morganic/resource/ ··· cle.html 에서 볼수 있습니다.

    2007/09/17 13:03 2007/09/17 13:03

    TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/438

    1. 병렬 프로그래밍 단어 총정리

      Tracked from ★ dingpong의 조그만 휴식 공간 ★  삭제

      솔라리스 개발자 그룹에 있는 강좌이다. 솔라리스를 몰라도 윈도우 프로그래머라도 병렬 프로그래밍.. 그러니까 스레드라는던가 그런게 매우매우 중요한데, 이 글을 보고 그러한 용어들을 정리하고 공부하는 것은 매우 도움이 될 것이라고 생각한다. 병렬 프로그래밍에 대해서 궁금한 사람이라면 한번씩 꼭 들어가서 볼 만 하다-

      2007/09/19 20:30
    2. 병렬 프로그래밍 단어 총정리

      Tracked from 나를 위해.. 그리고..  삭제

      어느 영역에서는 기본적인 용어 정리는 무척이나 중요하다. 병렬프로그래밍 단어 총정리를 통해 기본을 충실히.. http://www.sdnkorea.com/blog/438

      2007/09/19 21:28
    3. 병렬 프로그래밍 단어 총정리

      Tracked from jieumland  삭제

      병렬 프로그래밍 단어 총정리솔라리스/개발자코너 2007/09/17 13:03 펌: http://www.sdnkorea.com/blog/438 이 아티클의 영문 원본은 http://blogs.sun.com/morganic/resource/paralleltermsarticle.html에서 볼수 있습니다.이 글은 일반적인 병렬, 멀티쓰레딩 개념에 대해 설명하고 하드웨어와 소프트웨어 관점에서의 병렬 처리를 비교설명합니다. 그리고 병렬 처리가 가능한 하드웨어..

      2007/10/01 15:37

    댓글을 달아 주세요

    1. 류우주  수정/삭제  댓글쓰기

      용어 설명이 잘 되어 있네요...
      프로세스와 쓰레드 개념의 차이를 잘 설명해놓았네요.

      2007/09/18 23:29
    2. 박기형  수정/삭제  댓글쓰기

      역시 알찬 정보 감사합니다.

      2007/09/19 03:09
    3. 박정숙  수정/삭제  댓글쓰기

      좋은 정보 감사해요~

      2007/09/19 03:18
    4.  수정/삭제  댓글쓰기

      쉽게 잘 설명되어있네요. 감사합니다

      2007/09/19 04:16
    5. 이윤상  수정/삭제  댓글쓰기

      유용한 정보 감사합니다. ^^

      2007/09/19 05:44
    6. 김덕경  수정/삭제  댓글쓰기

      좋은자료 많이 많이 올려주세요..감사

      2007/09/19 06:39
    7. 한용민  수정/삭제  댓글쓰기

      SDN KOREA 화이팅

      2007/09/19 06:48
    8. 김순자  수정/삭제  댓글쓰기

      항상 좋은정보에 감사

      2007/09/19 06:51
    9. 이상훈  수정/삭제  댓글쓰기

      언제나 좋은 정보에 감사드립니다

      2007/09/19 07:28
    10. 김광현  수정/삭제  댓글쓰기

      좋은 정보네요.
      감사합니다.

      2007/09/19 19:03
    11. 박지민  수정/삭제  댓글쓰기

      이해하기 쉽게 자세한 설명 해놓으셔서 많은 도움이 되었습니다.
      감사합니다~

      2007/09/19 19:10
    12. 이창복  수정/삭제  댓글쓰기

      앞으로도 좋은 정보 많이 부탁드립니다.

      2007/09/19 19:17
    13. 최한나  수정/삭제  댓글쓰기

      프로그래밍 용어들 잘봤습니다...유용한정보 감사합니다

      2007/09/19 20:58
    14. 이종민  수정/삭제  댓글쓰기

      직접적인 개발자가 아니라서 정확한 세부사항까지 이해하기는 어려웠지만 나름 좋은 지식공유가 된것 같아서 기쁘네요... 앞으로도 좋은 지식발견이 되었으면 좋겠습니다. 감사합니다...!

      2007/09/19 21:02
    15. 최인균  수정/삭제  댓글쓰기

      트랙백 해갔습니다. 병렬처리 프로그래밍이면 저같은 윈도우나 다른 os 개발자에게도 유용한 정보가 아닐 수 없습니다. 진짜로 도움이 많이 됬고요^-^ 솔라리스를 더 많이 알았다면 좋았을 것 같습니다.

      2007/09/19 21:03
    16. 김종선  수정/삭제  댓글쓰기

      상당히 도움이 돼는 글이군요.핵심만 쏙쏙 뽑아서 아주 유용하게 봤습니다..감사합니다..

      2007/09/19 21:22
    17. 권미자  수정/삭제  댓글쓰기

      좋은정보감사드려요~

      2007/09/19 21:39
    18. 박선호  수정/삭제  댓글쓰기

      병렬 프로그래밍 단어 총정리 스크랩해두어야겠어요.

      2007/09/19 21:42
    19. 안병옥  수정/삭제  댓글쓰기

      병렬프로그래밍 단어 총정리-초보자도 이해하기 쉽게 잘 요약해주셨네요.

      2007/09/19 22:30
    20. 김복선  수정/삭제  댓글쓰기

      좋은 정보 많이 배우고 갑니다. 감사해요~

      2007/09/19 22:58
    21. 신효진  수정/삭제  댓글쓰기

      그림 속에서만 보던 풍경을
      제가 직접 찾아가서 그 풍경을 눈으로 확인하고 온 것 같네요~^^
      말로만 맴돌던 용어들이 생생하게 구체화되었습니다 ~
      감사합니다~*^^*

      2007/09/19 23:58
    22. 박성민  수정/삭제  댓글쓰기

      병렬 프로그래밍 단어, 정말 개인적으로 난해하고 어렵게 다가왔던 것인데, 이렇게 잘 정리해 주시다니......정말 감사합니다.
      이 역시도 한국 썬 개발자 네트워크 블로그로 인해서 하루하루 다양한 정보가 정말 유익하게 다가오는것 같네요. 너무나 유용하고 유익한 정보래서 제 블로그에 여러사람이 볼 수 있도록 담아갑니다. 아래 블로그 주소 남길께요.
      http://blog.naver.com/wuzuinn/30022319733

      2007/09/20 00:03
    [로그인][오픈아이디란?]

    ◀ Prev 1  ... 209 210 211 212 213 214 215 216 217  ... 626  Next ▶