[운영체제] Chapter 4.5 Implicit Threading

강현주·2025년 2월 21일

4.5.3 OpenMP

OpenMP는 컴파일러 지시문(지침) 세트이자 C, C++ 또는 FORTRAN으로 작성된 프로그램을 위한 API로, 공유 메모리 환경에서 병렬 프로그래밍을 지원한다. OpenMP는 병렬 영역을 병렬로 실행될 수 있는 코드 블록으로 식별한다. 애플리케이션 개발자는 병렬 영역에 코드에 컴파일러 지시문을 삽입하고, 이러한 지시문은 OpenMP 런타임 라이브러리에 해당 영역을 병렬로 실행하도록 지시한다.

병렬화에 대한 지시문을 제공하는 것 외에도 OpenMP는 개발자가 여러 수준의 병렬화 중에서 선택할 수 있도록 한다. 예를 들어, 스레드 수를 수동으로 설정할 수 있다. 또한, 개발자는 데이터가 스레드 간에 공유되는지 또는 비공개인지 식별할 수 있다. OpenMP는 Linux, Windows 및 macOS 시스템용 여러 오픈 소스 및 상용 컴파일러에서 사용할 수 있다.

4.5.4 Grand Central Dispatch

Grand Central Dispatch (GCD)는 Apple이 macOS 및 iOS 운영 체제를 위해 개발한 기술이다. 런타임 라이브러리, API 및 언어 확장의 조합으로, 개발자가 병렬로 실행할 코드 섹션(tasks)을 식별할 수 있다. OpenMP와 마찬가지로 스레딩의 대부분 세부 사항을 관리한다.

GCD는 디스패치 큐에 task를 배치하여 런타임 실행을 위한 작업을 예약한다. 큐에서 task를 제거하면 해당 작업을 관리하는 스레드 풀에서 사용가능한 스레드에 할당한다. GCD는 serial 및 concurrent는 두 가지 유형의 디스패치 큐를 식별한다.

  • Serial queue
    • serial queue에 배치된 task는 FIFO 순서로 제거됨
    • task가 큐에서 제거되면 다른 task가 제거되기 전에 실행을 완료해야 함.
    • 각 프로세스에는 자체 serial queue(main queue라고 함)가 있으며 개발자는 특정 프로세스에 로컬인 추가 serial queue를 만들 수 있음.
  • Concurrent queue
    • concurrent queue에 배치된 task도 FIFO 순서로 제거되지만, 여러 task를 한 번에 제거할 수 있으므로 여러 작업을 병렬로 실행할 수 있음.
    • 시스템 전체 concurrent queue에는 여러 가지가 있으며, 이는 네 가지 주요 서비스 품질 클래스로 구분됨.
      • QOS_CLASS_USER_INTERACTIVE
      • QOS_CLASS_USER_INITIATED
      • QOS_CLASS_UTILITY
      • QOS_CLASS_BACKGROUND

4.5.5 Intel Thread Building Blocks

Intel threading building blocks (TBB)은 C++에서 병렬 애플리케이션을 설계하는 것을 지원하는 템플릿 라이브러리이다. 이것은 라이브러리이므로 컴파일러나 언어 지원이 필요하지 않다. 개발자는 병렬에서 실행할 수 있는 task를 지정하고, TBB task 스케줄러는 이러한 task를 기본 스레드에 매핑한다. 또한, task 스케줄러는 부하 분산을 제공하고 캐시를 인식하므로 캐시 메모리에 데이터가 저장되어 더 빠르게 실행될 가능성이 있는 task에 우선권을 부여한다. TBB는 병렬 루프 구조, 원자 연산 및 상호 배제 잠금을 위한 템플릿을 포함한 풍부한 기능 세트를 제공한다. 또한 해시 맵, 큐 및 벡터를 포함한 동시 데이터 구조를 제공하며, 이는 C++ 표준 템플릿 라이브러리 데이터 구조의 동등한 스레드 안전 버전으로 사용할 수 있다.

0개의 댓글