UMD CMSC416/CMSC818X 2021 · MPI 4.1 · OpenMP 5.2

병렬 컴퓨팅: 분할·통신·성능을 연결하는 학습 순서

UMD 2021 강의에서 MPI·OpenMP·CUDA를 잇고, 계산보다 통신과 대기가 커지는 지점을 찾습니다.

첨부 순서와 학습 순서를 구분합니다

UMD 2021년 공식 강의 목록은 성능·프로그램 설계에서 MPI, OpenMP, CUDA, 네트워크·응용으로 이어집니다. Garal Das가 공유한 604쪽 첨부는 그 자료를 선별·재배열한 합본으로, 고급 MPI가 기초 MPI보다 먼저 있습니다. 처음 읽는다면 기초를 먼저 읽는 편이 자연스럽습니다. 주된 강의 저자는 Abhinav Bhatele이며 CUDA 표지의 저자는 Daniel Nichols입니다.

자체 학습 경로: 첨부 파일의 배열과 다릅니다
  1. 성능 기준과 데이터 분할

  2. MPI 기초 → 비차단 통신

  3. 공유 메모리·OpenMP → CUDA

  4. 부하·네트워크·I/O → 응용

문제 크기를 고정했는지부터 봅니다

강한 확장(strong scaling)은 전체 문제 크기를 고정하고 프로세스 수를 늘립니다. 약한 확장(weak scaling)은 프로세스당 문제 크기를 유지하면서 전체 문제를 키웁니다. 서로 다른 실험을 같은 가속비로 비교하지 않습니다. 한 프로세스 시간 T1, p개 시간 Tp라면 가속비는 T1/Tp, 효율은 T1/(p·Tp)입니다.

병렬화 가능한 비율 f = 0.9, 프로세스 p = 16
단순 Amdahl 상한 = 1 / ((1 - f) + f / p) = 6.4

이 6.4는 직접 계산한 교육용 값이며 강의의 실측치가 아닙니다. 직렬 시간이 그대로이고 병렬 부분만 이상적으로 나뉜다는 모델입니다. 통신·동기화와 추가 작업이 생기면 이 모델의 기대에도 못 미칠 수 있습니다. 실제 비교에는 입력·알고리즘·정확도·실행 환경을 함께 남깁니다.

MPI 요청의 시작과 완료는 다릅니다

MPI 4.1의 완료 의미에 따르면 비차단 송신을 시작했다는 사실만으로 버퍼를 고쳐도 되는 것은 아닙니다. 해당 요청의 완료를 확인한 뒤 송신 버퍼를 재사용합니다. 수신 버퍼는 수신 완료 뒤 읽습니다. 송신 완료가 상대편의 수신 완료를 뜻하지는 않습니다. 비차단 API는 중첩할 여지를 주지만 실제 통신·계산 중첩이나 속도 향상을 보장하지 않습니다.

OpenMP에서는 어떤 변수가 공유되고 어떤 변수가 작업별 사본인지 먼저 나눕니다. 부분합에는 reduction의 사본 초기화·결합 규칙을 검토합니다. 합본 225쪽의 축약 예제는 다음 226쪽에서 reduction을 더하므로 첫 화면만 완성 코드로 복제하지 않습니다. CUDA에서는 block/grid뿐 아니라 host↔device 이동과 커널 시간을 구별합니다. GPU의 연산량·이동량 비교는 Roofline의 수치 예제로 이어집니다.

가장 늦은 작업과 공유 자원을 찾습니다

계산량을 똑같이 나눠도 각 작업의 대기와 통신이 같지는 않습니다. 프로세스별 작업량·종료 시점·메시지·I/O를 함께 보고 정적 분배, 실행 중 재분배와 work stealing 중 무엇을 검토할지 정합니다. 작업을 옮기는 비용까지 포함해야 합니다.

서로 다른 프로그램도 같은 링크·스위치를 사용할 수 있으므로 토폴로지 이름만으로 성능을 확정하지 않습니다. 프로세스 배치는 응용의 통신 그래프와 기계의 연결 구조를 함께 봅니다. 강의의 burst buffer는 계산 노드와 병렬 파일시스템 사이의 빠른 중간 저장 계층이며, 노드 로컬형과 원격 공유형을 구분합니다. 한 형태가 언제나 더 빠르다는 비교 결과는 아닙니다.

마지막 두 학습 갈래도 구분합니다. 병렬 딥러닝은 학습 데이터나 모델의 계산을 여러 작업자에게 나눕니다. 반대로 HPC에 머신러닝을 적용하는 쪽은 실행 시간·시스템 상태 예측이나 자동 튜닝을 다룹니다. 둘을 같은 문제로 읽지 않습니다.

보존된 604쪽 합본의 주제 위치

아래는 PDF 파일의 1부터 시작하는 실제 쪽수입니다. 슬라이드에 인쇄된 번호와 다를 수 있습니다. 공식 개별 PDF와 전 쪽·바이트가 동일하다는 표가 아닙니다.

PDF 쪽주제
1–13병렬 컴퓨팅 개요
14–38용어·가속비·확장성
39–67병렬 프로그램 설계
68–92고급 MPI
93–121MPI 기초
122–197성능 모델·분석 도구
198–236공유 메모리·OpenMP
237–259병렬 알고리즘
260–350CUDA GPU 프로그래밍
351–377성능 문제
378–399작업 기반 모델·Charm++
400–420부하 균형
421–480네트워크·병렬 파일시스템
481–528과학·공학 응용
529–544병렬 딥러닝
545–604HPC에 머신러닝 적용

자료를 읽는 범위

이 글은 목차 경계와 위 설명에 필요한 선택 쪽을 직접 대조한 학습 길잡이입니다. 604쪽의 모든 그림·수식·코드를 독립 검증한 강의 해설은 아니며 MPI·OpenMP·CUDA 예제를 실행하지 않았습니다. 과거 장비의 성능표를 현재 제품의 수치로 쓰지 않습니다. PDF와 슬라이드 이미지는 재게시하지 않고 공식 자료로 연결합니다.

pthread 생명주기 · C 원자 연산과 futex · 경과 시간과 CPU 시간을 함께 읽으면 공유 메모리 실행과 계측을 더 구체적으로 볼 수 있습니다.

English summary. Fix the workload definition before comparing scaling. Learn basic MPI before nonblocking operations, then connect OpenMP and CUDA to communication, load imbalance and I/O. The 604-page attachment is a rearranged collection, not a claim of complete independent verification. No slide images or executable course examples are republished.