일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 괜찮음
- 10분
- realclass
- 읽기
- 3줄정리
- 화상영어
- leetcode
- Writing
- Problem Solving
- 영어공부
- 스탭퍼
- 만화도
- 운동
- Daily Challenge
- 파비최
- 잡생각
- 쓰릴오브파이트
- English
- 프로젝트
- 미드시청
- 링피트
- FIT XR
- 영어원서읽기
- 매일
- 30분
- 뭐든
- 개발자
- 월간
- 리얼 클래스
- 사이드
- Today
- Total
파비의 매일매일 공부기록
파이썬 병렬 프로그래밍 - #2 병렬 알고리즘 설계 본문
이번장은 병렬 알고리즘 설계에 대한 내용이다.
태스크에 따른 성공을 얻기 위해 처음부터 병렬로 하도록 문제와 방법의 뼈대를 잡는 것이 필수다.
1. 분할 정복 기법
- 복잡한 문제를 접했을 때는 독립적으로 해결 가능한 부분을 확인해서 분해하는 것을 우선으로 수행한다. 그러고 나서 다시 합쳐서 해결하는 방법인데 알고리즘에서 많이 소개되는 방법 중 하나다.
2. 데이터 분해 사용
- 데이터를 분해해서 연산을 수행하고 다시 합치는 방법.
- tasker 수와 분해 가능한 데이터 품질 간의 관계가 대칭적이지 않으며, 이런 면 때문에 성능에 직접적으로 영향을 미칠 수 있음.
- tasker는 상관관계를 확립하기 위해 tasker 간 교신이 필요.
3. 파이프라인으로 태스크 분해
- 큰 태스크를 병렬 방식으로 실행하는 더 작은 독립적인 태스크로 분할
- 자동차 공장에서의 조립라인과 유사하다고 보면 된다.
4. 프로세스 매핑
- 분해 기법에 의해 성능에 영향을 줄 수 있기에 아무거나(임의로) 분해 기법을 적용하는 것은 좋지 않음
- 독립 태스크 식별 / 데이터 교환이 필요한 태스크 식별의 중요한 두 단계가 존재
- 독립 태스크 식별 : 독립 태스크는 다른 태스크와 지속적인 통신 필요 없음.
- 데이터 교환이 필요한 태스크 식별 : 실제 데이터 통신에 부하가 크면 태스크 내부에서 데이터 교환 시의 과부하를 줄이는데 도움이 될 수 있음
- 부하 분산 : 다른 tasker에게 분산을 많이 하면 통신 크기가 늘어나며, 태스크를 단일 tasker에 그룹화하면 통신 과부하는 줄일 수 있지만 유후(idling)가 증가할 수 있는 단점이 있다.
병렬 알고리즘 설계에 대한 개요를 살펴봤는데
사실 이게 무슨 말인지 잘 이해가 안 간다.
핵심은 분할해서 정복하는 거 같고
분할하면 같은 시간에 다른 작업들을 할 수 있지만
그만큼 태스크 간 통신 비용이 증가하고
그렇다고 분할을 줄이면 다른 프로세스들이 놀고 있는(idle) 상태가 늘어나니
아마 그 중간 어디쯔음에 설계 목표를 설정해야 할 듯싶다.
'Study > Python' 카테고리의 다른 글
파이썬 병렬 프로그래밍 - #4 threading과 concurrent.futures 모듈 사용 (0) | 2021.07.22 |
---|---|
파이썬 병렬 프로그래밍 - #3 병렬화 문제 확인 (0) | 2021.07.21 |
파이썬 병렬 프로그래밍 - #1 병렬, 동시성, 분산 프로그래밍 문맥 설명 (0) | 2021.07.19 |
파이썬 병렬 프로그래밍 - #0 들어가며 (0) | 2021.07.18 |
Two Scoops of Django - #34장 (2) | 2021.07.05 |