파비의 매일매일 공부기록

파이썬 병렬 프로그래밍 - #2 병렬 알고리즘 설계 본문

Study/Python

파이썬 병렬 프로그래밍 - #2 병렬 알고리즘 설계

fabichoi 2021. 7. 20. 23:30

이번장은 병렬 알고리즘 설계에 대한 내용이다.

태스크에 따른 성공을 얻기 위해 처음부터 병렬로 하도록 문제와 방법의 뼈대를 잡는 것이 필수다.

 

1. 분할 정복 기법

- 복잡한 문제를 접했을 때는 독립적으로 해결 가능한 부분을 확인해서 분해하는 것을 우선으로 수행한다. 그러고 나서 다시 합쳐서 해결하는 방법인데 알고리즘에서 많이 소개되는 방법 중 하나다.

 

2. 데이터 분해 사용

- 데이터를 분해해서 연산을 수행하고 다시 합치는 방법.

- tasker 수와 분해 가능한 데이터 품질 간의 관계가 대칭적이지 않으며, 이런 면 때문에 성능에 직접적으로 영향을 미칠 수 있음.

- tasker는 상관관계를 확립하기 위해 tasker 간 교신이 필요.

 

3. 파이프라인으로 태스크 분해

- 큰 태스크를 병렬 방식으로 실행하는 더 작은 독립적인 태스크로 분할

- 자동차 공장에서의 조립라인과 유사하다고 보면 된다.

 

4. 프로세스 매핑

- 분해 기법에 의해 성능에 영향을 줄 수 있기에 아무거나(임의로) 분해 기법을 적용하는 것은 좋지 않음

- 독립 태스크 식별 / 데이터 교환이 필요한 태스크 식별의 중요한 두 단계가 존재

- 독립 태스크 식별 : 독립 태스크는 다른 태스크와 지속적인 통신 필요 없음.

- 데이터 교환이 필요한 태스크 식별 : 실제 데이터 통신에 부하가 크면 태스크 내부에서 데이터 교환 시의 과부하를 줄이는데 도움이 될 수 있음

- 부하 분산 : 다른 tasker에게 분산을 많이 하면 통신 크기가 늘어나며, 태스크를 단일 tasker에 그룹화하면 통신 과부하는 줄일 수 있지만 유후(idling)가 증가할 수 있는 단점이 있다.

 

병렬 알고리즘 설계에 대한 개요를 살펴봤는데

사실 이게 무슨 말인지 잘 이해가 안 간다.

 

핵심은 분할해서 정복하는 거 같고

분할하면 같은 시간에 다른 작업들을 할 수 있지만

그만큼 태스크 간 통신 비용이 증가하고

그렇다고 분할을 줄이면 다른 프로세스들이 놀고 있는(idle) 상태가 늘어나니

아마 그 중간 어디쯔음에 설계 목표를 설정해야 할 듯싶다.

반응형
Comments