본문 바로가기

OpenMP8

행렬 곱 연산 비교 (Pthreads, OpenMP, OpenCV, CUDA) Contents Pthread, OpenMP에서의 행렬 곱 연산 + 전치 행렬(transpose matrix) 사용 OpenCV library mat을 사용한 행렬 곱 연산 CUDA libarary로 구현한 행렬 곱 연산 Matrix Multiplication 이번 포스팅에서는 행렬 곱 연산을 여러 방법으로 구현하고, 그 성능을 비교해볼 예정입니다. WSL2 - ubuntu 20.04 환경에서 실행했으며, 사용한 라이브러리는 4 종류(Pthreads, OpenMP, OpenCV, CUDA)를 사용하여 행렬 곱 연산을 구현해보았습니다. 행렬 곱셈을 위해서 캐논 알고리즘과 같은 특별한 알고리즘은 사용하지 않습니다. pthread와 OpenMP에서의 행렬 곱은 3중 for문으로 구현되어 있는데, 캐시 미스에 .. 2021. 11. 26.
[OpenMP] 행렬-벡터 곱 연산 References An Introduction to Parallel Programming Contents Matrix-vector multiplication [MPI] 행렬 - 벡터 곱 연산 + 성능 평가 [pthread] 행렬 - 벡터 곱 연산 (+ 캐시 일관성, 거짓 공유) MPI와 Pthreads에서 구현해본 행렬-벡터 곱 연산과 마찬가지로 OpenMP에서도 행렬-벡터 곱 연산 코드를 작성해봤습니다. void Omp_mat_vec_mul(double A[], double x[], double y[], int m, int n, int thread_count) { double start, finish, temp; start = omp_get_wtime(); #pragma omp parallel for.. 2021. 11. 25.
[OpenMP] Critical Section References An Introduction to Parallel Programming Contents Producer / Consumer 구조 프로그램 (메세지 패싱) critical directive explicit barrier atomic directive omp lock 이번 포스팅에서는 parallel for이나 for 디렉티브로는 병렬화하기 어려운 문제에 대해서 살펴보겠습니다. 메세지를 보내고 받는 프로그램을 작성해보려고 하는데, 이 프로그램에서 각 스레드는 공유하는 메세지 큐를 가지고 있으며, 하나의 스레드가 다른 스레드에 메세지를 전송하려고 하면, 그 메세지는 목적지가 되는 스레드의 큐에 enqueue됩니다. 그리고 목적지 스레드에서는 메세지 큐를 dequeue하여 가장 먼저 들어온 .. 2021. 11. 25.
[OpenMP] schedule clause References An Introduction to Parallel Programming Contents schedule clause static type dynamic type / guided type runtime type auto type parallel for 디렉티브를 사용할 때, 루프 반복을 정확히 각 스레드에 할당하는 것은 시스템마다 다릅니다. 그러나 대부분의 OpenMP 구현에서는 block partitioning(블록 파티셔닝)을 사용합니다. 만약 시리얼 루프에 n개의 반복이 있다면 병렬 루프에서는 처음 n/thread_count가 스레드 0에 할당되고 다음 n/thread_count가 스레드 1에 할당됩니다. 하지만, 이렇게 스레드에 할당하는 것이 최적화된 것은 아닙니다. 예를 들어,.. 2021. 11. 24.
[OpenMP] for 디렉티브 References An Introduction to Parallel Programming Contents for 디렉티브 parallel for 디렉티브와 for 디렉티브 비교 이전 MPI 프로그래밍에 관한 포스팅에서 버블 정렬과 odd-even 정렬에 대해서 살펴봤는데, 이번에는 OpenMP에서의 버블 정렬과 odd-even 정렬에 대해서 알아보겠습니다. 2021.11.13 - [프로그래밍/병렬프로그래밍] - [MPI] Odd-even transposition sort (MPI Safety) [MPI] Odd-even transposition sort (MPI Safety) References An Introduction to Parallel Programming Contents Odd-even tr.. 2021. 11. 23.
[OpenMP] for 루프 병렬화 (+ default, private, shared clause) References An Introduction to Parallel Programming Contents 데이터 의존성 private clause default, share clause 2021.11.21 - [프로그래밍/병렬프로그래밍] - [OpenMP] 사다리꼴 공식 (trapezoidal rule) [OpenMP] 사다리꼴 공식 (trapezoidal rule) Refenences An Introduction to Parallel Programming Contents 사다리꼴 공식 (trapezoidal rule) ciritical 디렉티브 변수의 범위(scope) reduction 디렉티브 parallel for 디렉티브 2021.11.09 - [프로그래밍/.. junstar92.tistory... 2021. 11. 22.
[OpenMP] 사다리꼴 공식 (trapezoidal rule) Refenences An Introduction to Parallel Programming Contents 사다리꼴 공식 (trapezoidal rule) ciritical 디렉티브 변수의 범위(scope) reduction 디렉티브 parallel for 디렉티브 2021.11.09 - [프로그래밍/병렬프로그래밍] - [MPI] 사다리꼴 공식 (trapezoidal rule) 병렬화 - 1 이번 포스팅에서는 MPI에서 살펴봤던 사다리꼴 공식을 OpenMP로 어떻게 구현할 수 있는지 다양한 버전으로 알아보겠습니다. 사다리꼴 공식은 x축과 x=a와 b의 f(x) 그래프 사이의 면적을 구하는 공식으로, x축을 n개의 서브 인터벌로 나누고 사다리꼴 넓이 공식을 통해 각 서브 인터벌의 면적을 추정하는 것입니다... 2021. 11. 21.
[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.