본문 바로가기

Parallel programming52

[OpenMP] Hello, OpenMP References An Introduction to Parallel Programming Contents OpenMP 기본 예제 에러 체크 OpenMP Pthreads와 같이 OpenMP는 공유 메모리 병렬 프로그래밍을 위한 API입니다. OpenMP에서 MP는 multi-processing을 의미합니다. OpenMP는 각 스레드나 프로세스가 제약없이 메모리를 액세스할 수 있도록 설계되어 있고, OpenMP로 프로그래밍할 때, 시스템을 CPU나 코어의 집합으로 바라볼 수 있도록 합니다. 이 시스템에 속한 모든 CPU나 코어는 다음 그림처럼 메인 메모리를 액세스할 수 있습니다. OpenMP와 Pthreads 모두 공유 메모리 프로그래밍을 위한 API이지만, Pthreads는 개발자가 명시적으로 각 스레드.. 2021. 11. 20.
[pthread] 배리어(Barrier)와 조건 변수(Condition Variable) References An Introduction to Parallel Programming Contents 배리어(Barrier) 조건 변수(Condition Variable) 2021.11.18 - [프로그래밍/병렬프로그래밍] - [pthread] Thread 동기화 이전 포스트에서 메세지 전송 프로그램을 작성하며 스레드 동기화에 대해서 알아봤습니다. 프로그램에서 스레드들이 동일한 포인트에 있는지 확인하여 동기화할 수 있었습니다. 어떠한 스레드도 모든 스레드가 이 포인트에 도달할 때까지 진행될 수 없으므로 동기화의 이런 포인트 지점을 배리어(Barrier)라고 합니다. 배리어는 여러 어플리케이션에서 다양하게 사용됩니다. 이전 MPI 프로그래밍에서 성능 측정을 위해 각 스레드의 수행 시간을 측정할 때, .. 2021. 11. 19.
[pthread] Thread 동기화 References An Introduction to Parallel Programming Contents Semaphore (세마포어) Producer-Consumer Synchronization 각 스레드는 다른 스레드로 '메세지 전송'을 수행하고 전송받은 메세지를 출력하는 프로그램을 작성한다고 가정해봅시다. 예를 들어, t개의 스레드가 있을 때, 스레드 0은 스레드 1로 메세지를 전송하고 스레드 1은 스레드 2로 메세지를 전송합니다. 즉, 스레드 t-2는 스레드 t-1에게 메세지 전송하고 스레드 t-1은 스레드 0에게 메세지를 전송합니다. 그리고 스레드는 메세지를 수신한 후에 수신받은 메세지를 출력하고 스레드를 종료합니다. 메세지 전송을 구현하기 위해서 char* 타입의 공유 배열을 할당하고, 각 .. 2021. 11. 18.
[pthread] 행렬 - 벡터 곱 연산 (+ 캐시 일관성, 거짓 공유) References An Introduction to Parallel Programming Contents 행렬-벡터 곱 연산 병렬화 Cache, Cache Coherence, False Sharing 이전에 MPI를 통해서 행렬-벡터 곱 연산을 병렬화하고 그 성능을 평가해보았습니다. 2021.11.12 - [프로그래밍/병렬프로그래밍] - [MPI] 행렬 - 벡터 곱 연산 + 성능 평가 [MPI] 행렬 - 벡터 곱 연산 + 성능 평가 References An Introduction of Parallel Programming Contents 행렬 - 벡터 곱 연산 MPI_Allgather MPI_Wtime, MPI_Barrier 이번에는 행렬-벡터 곱 연산을 MPI를 사용하여 병렬화해보도록 하겠습니다. \.. 2021. 11. 16.
[pthread] Hello, Pthreads References An Introduction to Parallel Programming Contents 공유 메모리 시스템 프로세스, 스레드 그리고 pthreads Hello, Pthreads 개발자 입장에서 공유 메모리 시스템은 모든 코어가 모든 메모리 위치에 접근할 수 있습니다. 그러므로 공유 메모리 시스템에서의 접근 방법은 특정 메모리 위치를 "공유"하도록 설정하는 것입니다. 이는 병렬 프로그래밍에서 당연한 방법입니다. 그러나 앞으로 pthread에 대해서 알아보면서 공유 메모리 시스템에서 프로그래밍할 때 문제가 있다는 것을 알아보도록 할 것입니다. 이러한 문제점들은 분산 메모리 프로그램에서 발생한 문제와는 조금 다릅니다. 프로세스, 스레드, Pthreads 스레드(thread)는 MPI 프로그.. 2021. 11. 15.
[MPI] Odd-even transposition sort (MPI Safety) References An Introduction to Parallel Programming Contents Odd-even transposition sort MPI Safety, MPI_Ssend MPI_Sendrecv 성능 측정 및 비교 분산 메모리 환경에서 병렬 정렬 알고리즘은 무엇을 의미할까요 ? 무엇이 '입력'이 되고, 무엇이 '출력'이 될까요? 이는 정렬하고자하는 키(key)에 달려 있습니다. 프로세스 간에 분산된 키를 가지고 시작하거나 하나의 프로세스에 할당된 키로 시작할 수도 있습니다. 이번 포스팅에서는 프로세스 간 분산된 키를 사용하는 정렬 알고리즘을 살펴보겠습니다. 만약 n개의 키가 있고, 프로세스 p = comm_sz개가 있다면, 각 프로세스에 \(\frac{n}{p}\)개의 키를 할당.. 2021. 11. 13.
[MPI] MPI Derived Datatypes (파생 데이터타입) References An Introduction to Parallel Programming Contents MPI Derived Datatypes MPI_Type_create_struct, MPI_Type_commit, MPI_Type_free 분산 메모리 시스템에서의 통신은 로컬 연산보다 훨씬 cost가 큽니다. 예를 들어, 한 노드에서 다른 노드로 double형을 전송하는 것은 노드의 로컬 메모리에 저장된 두 개의 double형을 덧셈하는 것보다 훨씬 더 시간이 많이 걸립니다. 게다가, 다중 메세지에서 고정된 양의 데이터를 전송하는 cost는 보통 하나의 메세지에서 동일한 양의 데이터를 전송하는 것보다 훨씬 큽니다. 따라서, 하나의 send/recieve 쌍보다 다음의 for 루프가 훨씬 느릴 것으로.. 2021. 11. 13.
[MPI] 행렬 - 벡터 곱 연산 + 성능 평가 References An Introduction to Parallel Programming Contents 행렬 - 벡터 곱 연산 MPI_Allgather MPI_Wtime, MPI_Barrier 이번에는 행렬-벡터 곱 연산을 MPI를 사용하여 병렬화해보도록 하겠습니다. \(\text{A}\)가 m x n 행렬이고, \(\textbf{x}\)가 n개의 컴포넌트를 갖고 있는 벡터라면, \(\textbf{y} = \text{A}\textbf{x}\)는 m개의 컴포넌트를 갖는 벡터가 됩니다. 그리고 y의 i번째 컴포넌트는 행렬 A의 i번째 행과 x의 dot product로 계산할 수 있습니다. 이 연산을 시리얼로 의사 코드를 작성하면, 다음과 같습니다. 위 코드는 일반적인 C코드입니다. 위에서 행렬을 표현하기.. 2021. 11. 12.
[MPI] 데이터 분산 (벡터합 병렬화) References An Introduction to Parallel Programming Contents 데이터 분산(distribution) MPI_Scatter, MPI_Gather 이번에는 MPI에서 벡터의 합을 어떻게 구하는지 살펴보도록 하겠습니다. 아래처럼 벡터의 합을 계산하는 함수를 작성한다고 가정해봅시다. \[\begin{align*}\textbf{x} + \textbf{y} &= (x_0, x_1, \cdots, x_{n-1}) + (y_0, y_1, \cdots, y_{n-1}) \\ &= (x_0 + y_0, x_1 + y_1, \cdots, x_{n-1} + y_{n-1}) \\ &= (z_0, z_1, \cdots, z_{n-1}) \\ &= \textbf{z} \end{align.. 2021. 11. 11.
[MPI] 사다리꼴 공식 (trapezoidal rule) 병렬화 - 2 References An Introduction to Parallel Programming Contents Collective Communication (집합 통신) MPI_Reduce, MPI_Allreduce, MPI_Bcast 이전 글에서 MPI로 사다리꼴 공식을 병렬화하여 코드를 작성해봤습니다. 2021.11.09 - [프로그래밍/병렬프로그래밍] - [MPI] 사다리꼴 공식 (trapezoidal rule) - 1 하지만 작성한 코드에서 각 프로세스들은 연산을 수행하고 그 연산 결과를 합하기 위하여 프로세스 0에게 결과를 전달하고, 프로세스 0에서 모든 결과를 더하는 작업을 수행합니다. 이전 글 마지막에 언급했듯이 이러한 작업이 최선이 아니고, 성능을 향상시킬 수 있는 여지가 남아있습니다. 트리 .. 2021. 11. 10.