본문 바로가기

Parallel programming52

Divergent Wraps (예제 : Sum Reduction) References Programming Massively Parallel Processors https://developer.download.nvidia.com/assets/cuda/files/reduction.pdf Contents Warp Partioning Divergence Branch (Divergent Warps) Sum Reduction ( + 최적화 버전) 지난 포스팅에서 리소스 측면에서 CUDA의 성능을 제한하는 것을 살펴봤습니다. 이번에는 스레드 실행 측면에서 성능을 제한하는 것에 대해서 살펴보도록 하겠습니다. CUDA 커널을 실행하면 2-level 계층으로 구성된 스레드들의 그리드가 생성됩니다. Top-level에서 그리드는 1,2, or 3차원 배열의 블록으로 구성됩니다. Bott.. 2021. 12. 9.
Global Memory 대역폭(bandwidth) 활용 References Programming Massively Parallel Processors Contents Global Memory Bandwidth Memory Coalescing Technique (메모리 병합 기법) 지난 포스팅들에서 전역 메모리가 아닌 공유 메모리를 사용하는 Tiling 기법을 사용하여 행렬 곱 연산의 성능을 향상시켜봤습니다. 이렇듯 CUDA에서 제공할 수 있는 메모리들을 잘 사용하면, 더 좋은 성능은 갖는 프로그램을 만들 수 있습니다. TILING 최적화 for 메모리 Access (tiled matrix multiplication) TILING 최적화 for 메모리 Access (tiled matrix multiplication) References Programming M.. 2021. 12. 8.
TILING 최적화 for 메모리 Access (tiled matrix multiplication) References Programming Massively Parallel Processors Contents Tiling 기법 Tiled Matrix Multiplication 병렬화의 제한 요소인 메모리 크기 지난 포스팅에서 CUDA의 메모리에 관해서 알아봤습니다. CUDA의 메모리 Access와 Type (예제 : matrix multiplication) 그리고 행렬 곱 커널을 구현하여 CUDA를 사용한 행렬 곱 프로그램을 작성해봤습니다. 하지만, 작성된 커널은 GPU 하드웨어의 성능을 온전히 사용하지 못한다고 했습니다. 이번 포스팅에서 이 성능을 어떻게 더 끌어올릴 수 있는지 살펴보도록 하겠습니다. Tiling for reduced memory traffic CUDA에서 디바이스 메모리를 사용할 .. 2021. 12. 6.
CUDA의 메모리 Access와 Type (예제 : matrix multiplication) References Programming Massively Parallel Processors Contents 메모리 액세스 효율 (compute-to-global-memory-access) Matrix Multiplication 예제 CUDA Device 메모리 타입(Memory Types) 지난 포스팅들을 통해서 CUDA 커널 함수를 작성하는 방법과 어떻게 많은 수의 스레드들의 작업 수행을 구성하고 조정하는지에 대해 알아봤습니다. CUDA 프로그래밍 기초 (예제 : vector addition) CUDA Thread 구조와 Data Mapping (예제 : 이미지 흑백, Blur 처리) CUDA Programming Model CUDA Thread 동기화 및 스케쥴링 / 리소스 할당 이번 포스팅에서는.. 2021. 12. 5.
[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.