Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

Byeol Lo

4.2 Multicore Programming 본문

OS/OS Design

4.2 Multicore Programming

알 수 없는 사용자 2024. 4. 13. 17:56

 컴퓨터 설계의 초기에는 더 많은 컴퓨팅 성능이 필요하다는 요구에 따라 단일 CPU 시스템이 다중 CPU 시스템으로 진화했다. 이후에도 이러한 트렌드가 시스템 설계에서 발생했고, 여러 컴퓨팅 코어를 단일 처리 칩에 배치하여 각 코어가 운영 체제에서 별도의 CPU로 나타나게 하는 것이다. 이러한 시스템을 다중 코어(multicore) 시스템이라고 한다.

 그리고 multi-threaded programming은 이러한 다중 컴퓨팅 코어를 더 효율적으로 활용하고, 개선된 concurrency를 제공하는 메커니즘을 제공한다. 다중 코어 시스템에서는 concurrency의 보장으로 시스템이 각 코어에 별도의 스레드를 할당할 수 있기 때문에 스레드가 병렬로 실행될 수 있다. 위 아래의 그림 차이를 통해 멀티 스레드가 얼마나 효율적인지 볼 수 있다.

 이 토론에서 concurrency와 parallelism 사이의 구별에 관심을 가져야 한다. 동시성을 가진 시스템은 모든 작업이 진행될 수 있도록 하여 둘 이상의 작업을 지원합니다. 반면에 병렬성 시스템은 여러 작업을 동시에 수행할 수 있다. 따라서 병렬 없이 동시성을 가질 수도 있는 것이다. 다중 프로세서 및 멀티코어 아키텍처가 등장하기 전에 대부분의 컴퓨터 시스템은 단일 프로세서만을 가지고 있었으며, CPU 스케줄러는 프로세스 간의 빠른 전환을 통해 각 프로세스가 진행될 수 있도록 했다. 이러한 프로세스는 (겉보기에) 동시에 실행되지만 실제로 병렬로는 실행되지 않았다.

 

4.2.1 Programming Challenges

다중 코어 시스템은 계속해서 시스템 디자이너와 응용 프로그램 개발자에게 여러 컴퓨팅 코어를 더 잘 활용하기 위한 압력을 가한다. 운영 체제의 설계는 병렬 실행을 허용하기 위해 다중 처리 코어를 사용하는 스케줄링 알고리즘을 작성해야 한다. 응용 프로그램 개발자에게는 기존 프로그램을 수정하고 멀티스레드로 설계할 수 있는 새로운 프로그램을 디자인하는 것이 현재 challenge 임.

  1. Identifying tasks - 응용 프로그램을 조사하여 별도의 동시 작업으로 분할할 수 있는 영역을 찾는 작업을 의미한다. 작업 간에 서로 독립적이어야 하므로 각 코어에서 병렬로 실행될 수 있어야 한다.
  2. Balance - 작업을 병렬로 실행할 수 있는 경우, 그 작업들이 동등한 가치의 동등한 작업을 수행하도록 확인해야 한다. 때로는 특정 작업이 다른 작업보다 전체 과정에 더 큰 기여를 하지 않을 수 있다. 그런 작업을 실행하는 데 별도의 처리 코어를 사용하는 것은 비효율적일 수 있다.
  3. Data Splitting - 응용 프로그램이 별도의 작업으로 분할되듯이 작업에서 액세스하고 조작하는 데이터도 별도의 코어에서 실행될 수 있도록 분할되어야 한다.
  4. Data Dependency - 작업에서 액세스하는 데이터는 두 개 이상의 작업 간에 의존성을 조사해야 한다. 하나의 작업이 다른 작업의 데이터에 의존하는 경우, 프로그래머는 작업의 실행이 데이터 의존성을 수용하도록 동기화되도록 보장해야 한다.
  5. Testing and Debugging - 프로그램이 복수 코어에서 병렬로 실행될 때 많은 다양한 경우가 발생 가능하다. 병행 프로그램의 테스트 및 디버깅은 단일 스레드 응용 프로그램을 테스트하고 디버깅하는 것보다 본질적으로 더 어렵다.

 이러한 도전들로 인해 많은 소프트웨어 개발자들은 멀티코어 시스템의 등장이 향후 소프트웨어 시스템을 디자인하는 새로운 접근 방식을 요구할 것이라고 주장한다.

 

4.2.2 Types of Parallelism

 일반적으로 병렬처리에는 Data Parallelism 과 Task Parallelism 두 가지 유형이 있다.

 Data Parallelism은 동일한 데이터를 조각 내어 부분을 여러 컴퓨팅 코어에 분산시키고, 각 코어에서 동일한 작업을 수행하는 것에 중점을 둔다. 여러 쓰레드는 별도의 컴퓨팅 코어에서 병렬로 실행되게 되며, 이 방식은 Devide & Conquer과 유사하다. Task Parallelism 데이터가 아니라 작업(스레드)을 여러 컴퓨팅 코어에 분산하는 것을 포함한다. 각 스레드는 고유한 작업을 수행한다. 다른 스레드는 동일한 데이터에서 작업할 수도 있고 다른 데이터에서 작업할 수도 있다.

 따라서 기본적으로 데이터 병렬화는 데이터를 여러 코어에 분산하는 것이고, 작업 병렬화는 작업을 여러 코어에 분산하는 것이다. 그러나 데이터 병렬화와 작업 병렬화는 상호 배타적이지 않으며 실제로 응용 프로그램은 이 두 전략의 혼합하여 사용할 수 있다.

'OS > OS Design' 카테고리의 다른 글

4.4 Thread Libraries  (0) 2024.04.13
4.3 Multithreading Models  (0) 2024.04.13
4.1 Thread & Concurrency Overview  (0) 2024.04.13
3.7 Examples of IPC Systems  (1) 2024.04.13
3.6 IPC in Message-Passing Systems  (0) 2024.04.13
Comments