태스크 병렬 처리
Task parallelism![]() |
태스크 병렬화(함수 병렬화 및 제어 병렬화라고도 함)는 병렬 컴퓨팅 환경에서 여러 프로세서에 걸친 컴퓨터 코드 병렬화의 한 형태입니다.태스크 병렬화는 프로세스 또는 스레드에 의해 동시에 수행되는 태스크를 서로 다른 프로세서 간에 분산하는 데 초점을 맞춥니다.데이터의 다른 컴포넌트에서 동일한 작업을 실행하는 데이터 병렬 처리와 달리 작업 병렬화는 동일한 [1]데이터에 대해 여러 작업을 동시에 실행함으로써 구별됩니다.작업 병렬화의 일반적인 유형은 파이프라인입니다. 파이프라인은 각 작업이 다른 작업과는 독립적으로 실행될 수 있는 일련의 개별 작업을 통해 단일 데이터 세트를 이동하는 것으로 구성됩니다.
묘사
멀티프로세서 시스템에서는 각 프로세서가 동일하거나 다른 데이터에 대해 다른 스레드(또는 프로세스)를 실행할 때 태스크 병렬화가 실현된다.스레드는 동일하거나 다른 코드를 실행할 수 있습니다.일반적으로 서로 다른 실행 스레드가 작동하면서 서로 통신하지만 이는 필수가 아닙니다.통신은 보통 [2]워크플로의 일부로 스레드 간에 데이터를 전달함으로써 이루어집니다.
단순한 예로서 병렬 환경에서 시스템이 2-프로세서 시스템(CPU "a" 및 "b") 상에서 코드를 실행하고 있고 태스크 "A"와 태스크 "B"를 동시에 수행하도록 CPU "a"에 지시할 수 있으므로 실행 시간을 단축할 수 있다.작업은 다음과 같이 조건문을 사용하여 할당할 수 있습니다.
작업 병렬화는 데이터(데이터 병렬화)가 아닌 프로세싱(즉 스레드)의 분산(병렬화) 특성을 강조합니다.대부분의 실제 프로그램은 태스크 병렬화와 데이터 [3]병렬화 사이의 연속체 위에 있습니다.
스레드 레벨 병렬 처리(TLP)는 여러 스레드를 동시에 실행하는 응용 프로그램에 고유한 병렬 처리입니다.이러한 병렬화 유형은 데이터베이스와 같은 상용 서버용으로 작성된 응용프로그램에서 주로 볼 수 있습니다.여러 스레드를 동시에 실행함으로써 이들 애플리케이션은 워크로드가 발생할 수 있는 대량의 I/O 및 메모리 시스템 레이텐시를 견딜 수 있습니다.한 스레드가 메모리 또는 디스크 액세스를 기다리는 동안 다른 스레드는 유용한 작업을 수행할 수 있습니다.
멀티코어 마이크로프로세서의 등장으로 스레드 수준의 병렬화가 데스크톱 시장에 침투하기 시작했습니다.이는 여러 가지 이유로 인해 단일 코어의 클럭 속도 또는 클럭당 명령을 증가시키는 것이 점점 더 비현실적이 되었기 때문입니다.이러한 추세가 지속되면 잠재적인 컴퓨팅 능력의 향상을 위해 여러 스레드를 활용할 수 있도록 새로운 애플리케이션을 설계해야 합니다.이는 기존 코드를 새로운/빠른 컴퓨터에서 실행함으로써 자동으로 속도를 높였던 이전의 마이크로프로세서 혁신과는 대조적입니다.
예
다음 의사 코드는 태스크의 병렬화를 나타내고 있습니다.
프로그램: ... CPU = "a"이면 작업 "A"를 수행하고 CPU = "b"이면 작업 "B"를 수행합니다.종료 프로그램
이 프로그램의 목표는 순합계 태스크("A+B")를 수행하는 것입니다.위와 같이 코드를 작성하여 2프로세서 시스템에서 실행하면 런타임 환경에서 다음과 같이 실행됩니다.
- SPMD(단일 프로그램, 복수 데이터) 시스템에서는 양쪽 CPU가 코드를 실행합니다.
- 병렬 환경에서는 양쪽에서 동일한 데이터에 액세스할 수 있습니다.
- if 절은 CPU를 구분합니다.CPU "a"는 "if"에서 true로 읽히고 CPU "b"는 "else if"에서 true로 읽히므로 자체 작업이 있습니다.
- 이제 두 CPU는 동시에 별도의 코드 블록을 실행하여 다른 작업을 동시에 수행합니다.
CPU "a"에 의해 실행된 코드:
프로그램: 태스크 "A"를 수행합니다.프로그램 종료합니다.
CPU "b"에 의해 실행된 코드:
프로그램: 태스크 "B" 실행... 프로그램 종료
이 개념은 이제 임의의 수의 프로세서로 일반화할 수 있습니다.
언어 지원
태스크 병렬화는 빌트인 설비 또는 라이브러리를 통해 범용 언어로 지원됩니다.주목할 만한 예는 다음과 같습니다.
- Ada: 태스크(내장)
- C++ (인텔) :스레드화 구성 요소
- C++ (인텔) :칠크 플러스
- C++(오픈소스/Apache 2.0): RaftLib
- C, C++, Objective-C, Swift(애플):그랜드 센트럴 디스패치
- D: 태스크 및 파이버
- 델파이(시스템)스레드화TParallel)
- Go: 고루틴
- Java: Java 동시성
- .NET: 태스크 병렬 라이브러리
세부적인 작업 병렬 언어의 예는 Verilog 및 VHDL과 같은 하드웨어 기술 언어 영역에서 찾을 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Reinders, James (10 September 2007). "Understanding task and data parallelism ZDNet". ZDNet. Retrieved 8 May 2017.
- ^ Quinn, Michael J. (2007). Parallel programming in C with MPI and openMP (Tata McGraw-Hill ed.). New Delhi: Tata McGraw-Hill Pub. ISBN 978-0070582019.
- ^ Hicks, Michael. "Concurrency Basics" (PDF). University of Maryland: Department of Computer Science. Retrieved 8 May 2017.