명령 수준의 병렬 처리

Instruction-level parallelism
Atanasoff 병렬 처리[1] 기능을 갖춘 최초의 컴퓨터인 베리 컴퓨터

ILP(Instruction-Level Parallelism)는 컴퓨터 프로그램에서 일련의 명령병렬 또는 동시에 실행하는 것입니다.보다 구체적으로 ILP는 이 병렬 [2]: 5 실행의 단계별로 실행되는 평균 명령 수입니다.

논의

ILP는 동시성과 혼동해서는 안 됩니다.ILP에는 프로세스의 실행을 위한 단일 특정 스레드가 있습니다.한편, 동시성에는 CPU 코어에 여러 스레드를 할당하는 작업이 포함되어 있습니다.또한 CPU 코어가 충분히 있는 경우에는 CPU 코어에 여러 스레드를 할당하는 것이 이상적으로는 실행 가능한 스레드마다 1개의 코어가 할당되어 있는 것이 이상적입니다.

명령 수준의 병렬 처리에는 하드웨어소프트웨어라는 두 가지 방법이 있습니다.

하드웨어 레벨은 동적 병렬로 동작하지만 소프트웨어 레벨은 정적 병렬로 동작합니다.동적 병렬이란 프로세서가 실행 시 병렬로 실행할 명령을 결정하는 것을 의미하며 정적 병렬이란 컴파일러[3][clarification needed]병렬로 실행할 명령을 결정하는 것을 의미합니다.Pentium 프로세서는 동적 병렬 실행 시퀀스로 동작하지만 Itanium 프로세서는 정적 수준의 병렬 처리로 동작합니다.

다음 프로그램을 고려하십시오.

e = a + bf = c + dm = e * f

연산 3은 연산 1과 연산 2의 결과에 따라 달라지므로 둘 다 완료될 때까지 계산할 수 없습니다.그러나 연산 1과 연산 2는 다른 연산에 의존하지 않으므로 동시에 계산할 수 있습니다.각 작업을 1단위 시간 내에 완료할 수 있다고 가정하면 이들 3가지 명령은 총 2단위 시간 내에 완료되어 ILP는 3/2가 됩니다.

컴파일러 및 프로세서 설계자의 목표는 가능한 한 많은 ILP를 식별하고 활용하는 것입니다.통상적인 프로그램은 보통 순차 실행 모델 하에서 작성되며, 명령어는 프로그래머에 의해 지정된 순서로 차례로 실행됩니다.ILP를 사용하면 컴파일러와 프로세서가 여러 명령 실행을 겹치거나 명령 실행 순서를 변경할 수 있습니다.

프로그램에 존재하는 ILP의 양은 응용 프로그램에 따라 매우 다릅니다.그래픽스나 과학 컴퓨팅 등 특정 분야에서는 그 양이 매우 많을 수 있습니다.그러나 암호화와 같은 워크로드에서는 병렬화가 훨씬 덜 나타날 수 있습니다.

ILP를 이용하기 위해 사용되는 마이크로 아키텍처 기술은 다음과 같습니다.

  • 여러 명령의 실행이 부분적으로 중복될 수 있는 명령 파이프라인.
  • 슈퍼스칼라 실행, VLIW 및 여러 명령을 병렬로 실행하기 위해 여러 실행 유닛이 사용되는 밀접하게 관련된 명령 컴퓨팅 개념.
  • 명령이 데이터 종속성을 위반하지 않는 순서로 실행되는 순서가 잘못되었습니다.이 기술은 파이프라인 및 슈퍼스케일라 실행과는 무관합니다.순서가 어긋난 실행의 현재 구현은 동적으로(즉, 프로그램이 실행 중일 때 컴파일러의 도움 없이) 일반 프로그램에서 ILP를 추출합니다.다른 방법으로는 컴파일 시에 이 병렬 처리를 추출하여 하드웨어에 이 정보를 전달하는 방법이 있습니다.순서가 맞지 않는 실행 기술을 확장해야 하는 복잡성으로 인해 업계는 명령당 여러 개의 독립적 연산을 명시적으로 인코딩하는 명령 집합을 다시 검토했습니다.
  • 레지스터 이름 변경 - 이러한 작업에 의해 레지스터가 재사용됨으로써 발생하는 프로그램 작업의 불필요한 직렬화를 피하기 위해 사용되는 기술로, 순서가 어긋나는 실행을 가능하게 하기 위해 사용됩니다.
  • 실행 여부를 확인하기 전에 전체 명령 또는 일부 명령을 실행할 수 있는 추측 실행입니다.일반적으로 사용되는 추측 실행의 형태는 제어 흐름 명령(예를 들어 분기)을 통과하는 명령이 제어 흐름 명령의 목표가 결정되기 전에 실행되는 제어 흐름 추측이다.예측, 메모리 의존성 예측 및 캐시 레이텐시 예측에 의해 구동되는 투기 실행 등 몇 가지 다른 형태의 투기 실행이 제안되어 사용되고 있습니다.
  • 제어 종속성을 해결하기 위해 지연을 방지하기 위해 사용되는 분기 예측입니다.분기 예측은 추측 실행과 함께 사용됩니다.

ILP는 컴파일러와 하드웨어 지원 모두에 의해 이용되는 것으로 알려져 있지만 컴파일러는 컴파일 시간 최적화를 통해 프로그램에 내재된 암묵적인 ILP를 하드웨어에 제공합니다.프로그램에서 사용 가능한 ILP를 추출하는 최적화 기술에는 스케줄링, 레지스터 할당/이름 변경 및 메모리 액세스 최적화가 포함됩니다.

데이터 플로우 아키텍처는 ILP가 명시적으로 지정되어 있는 아키텍처의 다른 클래스입니다.최근의 에서는, TRIPs 아키텍처를 참조해 주세요.

최근 몇 년 동안 프로세서 작동 주파수와 메모리 액세스 시간 간의 차이가 증가하고 있음에도 불구하고 ILP 기술을 사용하여 성능을 개선했습니다(IBM System/360 Model 91과 같은 초기 ILP 설계에서는 ILP 기술을 사용하여 비교적 작은 레지스터 파일로 인한 한계를 극복했습니다).현재 메인 메모리의 캐시 미스 패널티에는 수백 개의 CPU 사이클이 소요됩니다.원칙적으로 ILP를 사용하여 이러한 메모리 지연도 허용할 수 있지만 관련 자원 및 전력 소산 비용은 불균형합니다.또한 기본 하드웨어 구조의 복잡성과 종종 지연으로 인해 작동 빈도가 감소하여 이점이 더욱 감소합니다.따라서 위의 기술은 CPU가 오프칩 데이터를 위해 정지하는 것을 막기에는 불충분한 것으로 판명되었습니다.대신 업계는 멀티프로세싱멀티스레딩[4]같은 기술을 통해 활용할 수 있는 더 높은 수준의 병렬화를 활용하는 방향으로 나아가고 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "The History of Computing". mason.gmu.edu. Retrieved 2019-03-24.
  2. ^ Goossens, Bernard; Langlois, Philippe; Parello, David; Petit, Eric (2012). "PerPI: A Tool to Measure Instruction Level Parallelism". Applied Parallel and Scientific Computing. 7133: 270–281. doi:10.1007/978-3-642-28151-8_27.
  3. ^ Hennessy, John L.; Patterson, David A. Computer Architecture: A Quantitative Approach.
  4. ^ 메모리 벽의 반사

추가 정보

  • Aiken, Alex; Banerjee, Utpal; Kejariwal, Arun; Nicolau, Alexandru (2016-11-30). Instruction Level Parallelism. Professional Computing (1 ed.). Springer. ISBN 978-1-4899-7795-3. ISBN 1-4899-7795-3. (276페이지)

외부 링크