병렬 프로그래밍

병렬 프로그래밍에 대해 설명해주세요.

병렬 프로그래밍이란 무엇입니까?

이것은 프로그램이 하나의 프로세스가 아닌 N개의 다중 프로세스를 사용하여 개발되었음을 의미합니다.

동시에 여러 프로세스를 사용하여 성능을 향상시키려면

멀티 코어 시대에는 프로세서 간의 최상의 협력을 이루기 위한 소프트웨어 설계가 무엇보다 중요합니다.

병렬 프로그래밍은 병렬 컴퓨터 아키텍처를 활용하는 기술이며 성능 향상의 핵심 요소입니다.

다중 스레드 프로그래밍의 다양한 개념

다중 스레드: IO 관련 처리 성능을 크게 향상

병렬 처리: CPU 관련 처리 성능이 획기적으로 향상되었습니다.

병렬화

병렬 프로그램의 전체 프로세스


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

병렬화 대상 찾기 : 순차 코드에서 가장 많은 시간이 소요되는 병목 현상 찾기

종속성 분석 : 진정한 병렬화가 가능한지 확인합니다.

즉, 프로그램을 병렬화하기 위해서는 분할이 필요하지만, 공유된 코드가 서로 종속되지 않고 동시에 실행될 수 있는지 여부를 알아내야 합니다.

병렬화 패턴 결정 : 병렬화 대상의 속성에 따라 병렬화를 진행하는 패턴이 결정됨

데이터 병렬화: 주어진 데이터 세트를 세분화하여 각 프로세서에 할당하여 동일한 작업을 동시에 수행하는 기술

작업 병렬화: 수행할 작업을 기능별로 나눈 다음 각 프로세서에 할당하여 서로 다른 기능을 동시에 수행하는 기술

병렬 프로그래밍 구현

Shared-memory 병렬 프로그래밍 모델: 여러 개의 코어가 함께 작동하도록 하여 병렬화를 수행하는 모델(멀티 코어의 경우)

메시지 전달 병렬 프로그래밍 모델: 분산 메모리 시스템 아키텍처에 적합한 병렬 프로그래밍 모델. 노드는 네트워크를 통해 메시지를 보내고 받는 형태로 정보를 공유합니다.

가속기 병렬 프로그래밍 모델: 범용 CPU가 아닌 특정 동작에 특화된 가속기를 사용하여 병렬화하는 모델.

동기화

Shared Resource: 여러 작업이 병렬로 실행되고 동일한 리소스를 공유할 때 발생합니다.

여러 작업이 동시에 공유 리소스를 변경하려는 경우 공유 리소스는 예기치 않은 값이 될 수 있습니다.

한 작업이 공유 리소스를 수정하는 동안 다른 작업이 해당 리소스를 수정하지 않도록 원자성이 보장됩니다.