파비의 매일매일 공부기록

파이썬 동시성 프로그래밍 - #2 병렬화 본문

Study/Python

파이썬 동시성 프로그래밍 - #2 병렬화

fabichoi 2021. 8. 9. 23:30

동시성과 병렬화 개념은 서로 혼돌 될 수 있다. 실제로는 구분되니 병렬 대신 동시성을 가진 디자인을 하려면 실제 특성에 주의를 기울여야 한다.

 

동시성 : 한 사람이 여러 작업을 하고 있고 그 작업을 빠르게 자주 바꾸며 진행하는 걸 비유로 들 수 있다. CPU를 많이 사용하는 문제에 동시성을 적용하면 프로그램 성능이 감소될 수 있다. 동시성이 필요한 작업에 병렬화를 적용할 때도 성능 감소될 가능성이 있다.

 

동시성 시스템의 특징

- 다양한 구성 : 동시에 작동되는 다수의 스레드가 있는 프로세스를 여러 개 갖고 있다.

- 자원 공유 : 메모리, 디스크 등의 자원 구성이 프로그램 실행에 활용돼야 한다.

- 규칙 : 모든 동시성 시스템이 락을 획득하고 메모리에 접근하고 상태를 변경하는 등 룰에 따라야 한다. 이를 어길 경우 프로그램에 매우 치명적일 수 있다.

 

I/O 문제 : 입/출력에 처리하는데 많은 시간이 소요되는 장애를 뜻함. 요청되는 데이터양이 처리되는 데이터 양보다 느리면 발생. 좋은 예는 웹 크롤러. 

 

병렬화 이해하기 : 여러 작업을 동시에 처리하는 동시성과는 달리, 여러 작업을 동시에 실행하고 계산한다는 뜻. 예를 들어 하나의 자판기에 2줄의 사람이 차례대로 대기한다면 동시성 문제. 두 개의 자판기에 2개의 줄이 각각 배치되어 있는 상태라면 병렬화 문제다.

 

CPU 제약 문제 : I/O문제와 완전 반대. CPU 속도에 종속되는 문제로 고속의 CPU에서는 저속의 CPU에서보다 빠르게 실행되는 걸 확인할 수 있다.

 

단일 코어 CPU에서의 동작

- 주어진 시간에 활용할 수 있는 스레드가 1개. 여러 스레드를 스위칭해야 하는데, 이를 콘텍스트 스위치라고 한다. 일정하게 스레드에 저장하고 불러오는 메커니즘을 통해 주어진 시간에 여러 스레드에서 처리가 가능하며 한 번에 많은 작업이 가능.(실제로는 주어진 시간에 한 작업만 가능하나 사람이 봤을 때는 여러 개를 하는 것처럼 보임)

- 파이썬 기반 멀티스레드 앱은 컨텍스트 스위치가 복잡한 계산 형태. 

- 장점 : 여러 코어들 간의 복잡한 통신 프로토콜이 필요 없음. 단일 코어이므로. 비교적 전력 소모가 적음

- 단점 : 처리 속도의 한계 존재. CPU의 작동 속도 제약에 따른 방열 문제 발생 가능

- 클럭속도와 마르텔리 범용성 모델, 시분할(작업 스케줄러)에 대한 설명

 

멀티 코어 프로세서

- 여러 개의 독립적 유닛인 '코어'가 존재.

- 각 코어에는 저장된 인스트럭션(명령어)을 처리하기 위한 요소가 존재. 아래의 사이클을 따름

- 인출단계(fetch) : 프로그램 메모리에서 인스트럭션을 인출하는 단계. 프로그램 카운터로부터 명령받아 다음 실행 위치를 알아봄

- 해독단계(decode) : 인출된 인스트럭션을 CPU의 여러 곳에서 작동하는 신호 형태로 변환.

- 실행단계(execute) : 실행 단계를 수행. 인출되고 해독된 인스트럭션을 실행하고, 실행 결과는 CPU 레지스터에 저장

- 장점 : 단일 코어가 지닌 성능의 한계가 없음. 빠른 속도로 실행 가능

- 단점 : 일반적으로 단일 코어에 비해 많은 전력 소모. 크로스 코어 통신 등이 필요

 

시스템 아키텍처 스타일

- SISD : 단일 익스트럭션 스트림. 단일 데이터 스트림. 모든 작업이 단일 프로세싱 유닛에서 처리.

- SIMD : 단일 익스트럭션 스트림. 복수 데이터 스트림. 하나의 명령을 통해 동일한 연산을 다수의 엘리먼트에서 수행 가능.

- MISD : 복수 익스트럭션 스트림. 단일 데이터 스트림. 관련 내용 거의 없음.

- MIMD : 복수 익스트럭션 스트림. 복수 데이터 스트림. 보통의 멀티 코어 프로세서. 각 코어는 독립적 및 병렬적으로 작동 가능.

 

컴퓨터 메모리 아키텍처 스타일

- UMA : Uniform Memory Access(균일 메모리 접근) 코어 수와 상관없이 동일한 방식으로 공유 메모리 공간을 사용. 메모리의 거리와 상관없이 동일한 시간에 직접 메모리에 접근 가능. SMP라고도 함. 모든 RAM 접근은 정확한 시간에 일어남. 캐시가 일정. 하드웨어 디자인이 간단하나 스케일링 문제가 일어남.

- NUMA : Non-Uniform Memory Access(불균일 메모리 접근) 요청되는 프로세스에 따라 메모리 접근이 더 빠를 수 있는 아키텍처 스타일. 메모리를 기준으로 한 프로세서의 위치 때문. 각 프로세서는 캐시, 메인 메모리, 독립적인 입출력을 갖고 있으며 모두 상호 연결망으로 연결됨. 스케일링이 용이하지만 로컬 메모리의 경우 접근이 매우 빠르고 외부 메모리의 경우 시간이 오래 걸림. 주변 프로세서의 개수에 따라 다른 프로세스에서 생긴 변화를 파악하는데 시간이 증가할 수 있음.

 

NUMA는 어디서 많이 들어봤던거 같은데, 이번 기회에 어떤 건지 어느 정도는 감을 잡았다.

반응형
Comments