Parallel Software

강병우·2023년 9월 25일
0

병렬프로그래밍

목록 보기
9/24

하드웨어, 컴파일러들은 우리가 필요한만큼의 속도를 따라오고 있다. 현재는 Shared memory programsDistributed memory programs로 이루어져있다.

SPMD

SPMD(Single Program Multiple Data) Programming은 조건문을 통해 다수의 다양한 프로그램인 것처럼 행동하는 단일 실행파일로 구성되어있다. 각 스레드에게 다른 일들을 시켜서 마치 다양한 프로그램이 돌아가는 것처럼 보인다고 생각하면 된다.

Writing Parallel Programs

  1. 프로세스/스레드에게 작업 나누기
    같은 양의 작업을 각 프로세스/스레드에게 나눠줘야한다(=>Load balancing). 그리고 통신을 최소화한다.
  2. 동기화를 위해 프로세스/스레드들을 정리한다.
  3. 프로세스/스레드 사이 통신을 위해 정리한다.

Shared Memory

  • Dynamic Threads
    마스터 스레드가 작업을 대기하고 새로운 스레드들을 Fork하고, 스레드가 끝났을 때 그들을 terminate한다.
    리소스를 효율적으로 사용할 수 있지만, 매순간마다 스레드을 생성하고 제거하기 때문에, 이에 대한 오버헤드가 발생할 수 있음.

  • Static Threads
    스레드 풀을 만들어두고 작업을 할당한다. 퍼포먼스는 좋지만, 시스템 리소스를 낭비할 가능성이 있다(예를 들어, 100개의 스레드가 있는데 10개만 사용할 경우..)

Nondeterminism

실행 순서가 결정이 안되있다. 위 내용처럼 병렬적으로 printf를 처리했을 때, Thread 1과 Thread 0의 출력순서가 다르게 나올 수도 있다.

  • Race Condition
    이렇게 순서가 정해지지 않아서, 스레드나 프로세스들이 동시에 하나의 자원을 접근할 수도 있다. 이러한 접근은 에러로 이어진다.

  • Critical section
    그 순간에만 하나의 스레드만 실행될 수 있는 하나의 코드 공간

  • 상호배타적

  • mutex나 simply lock 사용 -> 자원 제한

Busy waiting

실행결과가 항상 일치하도록 동기화를 해주기 때문에 처리속도가 느리다.

Message Passing

송수신 메세지를 통해 병렬처리를 하는 방식이다.

Partitioned Global Address Space(PGAS) Languages

프로세서가 커져서 하나의 프로세서의 여러 개의 코어가 들어가는데, 이 상황에서 shared memoryDistributed memory 시스템을 융합하여 사용한다. 코어끼리는 Shared memory, 프로세서끼리는 Distributed Memory의 성격을 지니고 있다. 이건 그냥 이런게 있다고만 알아두면 된다.

병렬처리의 입출력

  1. Stdout의 출력에 대한 순서가 정해져있지 않다. 디버깅 아풋풋보단 stdout을 통해 디버깅하는데 사용된다.
  2. 디버그 출력은 반드시 출력을 하는 프로세스/스레드의 아이디나 랭크를 포함해야 한다.
  3. 하나의 프로세스/스레드가 각 stdin, stdout, stderr를 처리하고 있다. 처리하고 마스터 스레드에 전달한다. 마스터 스레드가 이러한 정보를 받는 순서에 따라 결과가 달라질 수도 있다.

0개의 댓글