1 분 소요

병렬화는 컴퓨터 공학에서 매우 중요한 기법으로 여러 작업을 동시에 처리하여 계산 속도를 높이는 기법입니다. 프로젝트를 진행하며 병렬화에 대해 공부해 나갔고 이를 기록하는 김에 글을 작성하게 됐습니다. (본인 공부 및 기록용)😁

병렬화(parallelism)란?

병렬화(parallelism)란 여러 작업을 동시에 처리하여 계산 속도를 높이는 기법입니다. 컴퓨터 과학에서 병렬화는 크게 2가지 방식으로 구현될 수 있습니다.

parallelism Example Figure 1: parallelism example

위 그림을 보면 왼쪽은 하나씩 문제를 해결해 나가는 것을 볼 수 있고 오른 쪽은 여러 문제를 동시에 해결해 나가는 것을 볼 수 있습니다.

1. 데이터 병렬화 (Data parallelism)

데이터 병렬화는 하나의 코어로 수행할 수 있지만 시간이 매우 오래 걸려, 동일한 작업을 여러 데이터 조각에 대해 동시에 수행하며 시간을 줄이는 방식입니다.(결과값은 동일) 예를 들어, 대규모 행렬 연산에서 행렬을 여러 부분으로 나누고, 각 부분을 동시에 처리하여 계산을 가속화할 수 있습니다. AI 모델을 다루는 분들은 GPU(그래픽 처리 장치)를 통해 주로 이 방식을 활용하며 이미지 처리, 딥러닝 모델의 병렬 처리를 수행합니다.

2. 작업 병렬화 (Task Parallelism)

작업 병렬화는 서로 다른 작업을 동시에 수행하는 방식입니다. 예를 들어, 웹 서버가 여러 클라이언트의 요청을 동시에 처리하는 경우 각 요청이 독립적으로 처리되므로 작업 병렬화를 활용할 수 있습니다. 작업 병렬화는 주로 멀티스레딩(Multithreading)이나 멀티프로세싱(Multiprocessing)을 통해 구현됩니다.

대표적인 차이점이 데이터 병렬화는 같은 종류의 문제를 동시에 처리한다는거고 작업 병렬화는 1번 2번 3번이 다른 일을 하지만 각자 독립적이라서 동시에 진행한다는 것입니다. 이 외에도 파이프라인 병렬화 같은 병렬화 또한 존재합니다. 무엇보다, 병렬화에서 가장 중요한 것은 처리되는 것들이 연산되는 중에는 서로 독립적이어야 한다는 것입니다.

장점 및 단점

이렇게 좋아보이기만 하는 병렬화는 장점($+$)도 존재하지만 단점($-$) 또한 존재합니다.

$+$ 처리 속도를 크게 향상시킬 수 있으며, 대규모 데이터나 복잡한 연산을 효율적으로 처리할 수 있습니다.

$-$ 작업 간의 의존성이 있을 경우 동기화 문제, 데드락(교착 상태) 발생 위험이 존재하며, 오버헤드(추가적인 계산 부하)로 인해 병렬화가 비효율적일 수 있습니다.

$-$ 하나의 코어를 사용하는 컴퓨터에 비해 고성능을 요구합니다.

결론

병렬화는 고성능 컴퓨팅을 요구하지만 복잡한 작업을 수행하는데에 있어 효율성을 높이며 계산 시간을 줄이는 중요한 기술입니다. 하지만 작업 간의 의존성 문제나 동기화 오류를 피하기 위해 신중하게 설계되어야 합니다. 병렬화는 복잡한 시스템들이 등장하는 현대 컴퓨팅에서 더 중요해지고 있으며, 대규모 데이터 처리에 필수적인 도구입니다. 다음으로는 병렬화에서 문제가 되는 것들(레이스 컨디션, 데드락, 오버헤드 등)을 방지하기 위한 방법과 실제 예시로 몇가지 보여드릴 예정입니다.

이것저것 공부하면서 관련 내용에 대해 계속 추가할 예정입니다. 궁금한 것들이나 추가 및 수정했으면 좋겠는 거 말해주시면 좋을 거 같아요. 좋은 하루 보내시길 바래요 :)

댓글남기기