병렬 프로그래밍 프로세스

규규·2024년 1월 26일
0

병렬 프로그래밍

목록 보기
3/11

병렬화

  • 병렬 프로그래밍 : 순차적인 직렬 프로그래밍을 분할하고, 분할된 단위를 동시에 병렬로 수행함으로써 성능을 향상시키는 프로그래밍 기술
  • 병렬화 단계
    1. 병렬화 대상 찾기
    2. 의존성 분석
    3. 병렬화 패턴 결정 - 테스크,데이터
    4. 병렬 프로그래밍 구현 - 공유메모리, 메시지패싱, 가속기

병렬화 대상 찾기

  • 순차 코드에서 가장 많은 시간이 소요되는 병목 구간 찾기

  • 일반적으로 프로파일링 도구의 힘을 빌림
    인텔 VTUNE, AMD CodeAnlyst, 오픈소스 oprofile

  • 병렬화 성능 향상을 암달의 법칙으로 예측 가능

    의존성 분석

  • 병렬화 대상이 병렬화가 가능한지 확인. 프로그램 분할 시, 분할된 코드들이 서로 간 의존성 없이 동시 수행 가능한지 여부 확인

  • Flow dependency, Anti dependency, Output dependency

    병렬화 패턴 결정

  • 병렬화가 가능하면, 병렬화 대상 속성에 따라 어떤 방식으로 병렬화 할 지 패턴 결정

  • 데이터 병렬화 (벡터화)

    • 데이터 집합을 분해 한 뒤, 각 프로세서에 할당하에 동일한 연산 수행. 흔히 벡터화라고 부름. For 문 쪼개기.
    • 테스크 병렬화
      - 수행해야 할 작업들을 기능 별로 분해한 뒤, 각 프로세서에 할당하여 서로 다른 기능들을 동시에 수행. 예를 들어 Task 1은 I/O 작업, Task 2는 연산 작업. 기능적 단위로 수행하기 때문에 범용 CPU 를 활용한 병렬 컴퓨터 구조에서 주로 구현 가능.
      업로드중..

병렬 프로그래밍 구현

  • 공유 메모리 병렬 프로그래밍 모델
    • UNIX 계열 POSIX 표준 pthread API 활용 (Windows 도 pthread 지원)
    • pthread 는 신경 써야 할 게 많아서 OpenMP 가 나옴
  • MPI 모델 : 분산 메모리 시스템 구조에 적합
  • 가속기 병렬 프로그래밍 모델
    • 데이터 병렬화에 주로 사용
    • CUDA, CUDA 를 더 추상화한 OpenACC, OpenCL (GPU 뿐만 아니라 다양한 이기종 지원)

동기화

  • 데이터 레이스 : 2개 이상 스레드가 공유 자원에 동시 접근하는 상황
  • 동기화 : 공유 자원 접근 시, 1개의 스레드가 접근하면 lock 하고 다른 스레드는 wait
  • 소프트웨어적으로도 동기화 알고리즘 구현 가능하지만, 운영체제에서도 동기화를 위한 여러 장치 제공. 뮤텍스/세마포어/이벤트/베리어

출처 :
https://www.samsungsds.com/kr/insights/1233713_4627.html

profile
복습용 저장소

0개의 댓글