KR20230121073A - 산술 논리 유닛들을 위한 소프트웨어 기반 명령어 스코어보드 - Google Patents

산술 논리 유닛들을 위한 소프트웨어 기반 명령어 스코어보드 Download PDF

Info

Publication number
KR20230121073A
KR20230121073A KR1020237021735A KR20237021735A KR20230121073A KR 20230121073 A KR20230121073 A KR 20230121073A KR 1020237021735 A KR1020237021735 A KR 1020237021735A KR 20237021735 A KR20237021735 A KR 20237021735A KR 20230121073 A KR20230121073 A KR 20230121073A
Authority
KR
South Korea
Prior art keywords
instruction
instructions
alu
control word
pipeline
Prior art date
Application number
KR1020237021735A
Other languages
English (en)
Inventor
브라이언 엠버링
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20230121073A publication Critical patent/KR20230121073A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)

Abstract

소프트웨어 기반 명령어 스코어보드(126)는 산술 논리 유닛(ALU) 파이프라인(218)에 발행된 근접 발행된(closely-issued) 명령어들(302, 304, 306) 사이의 종속성들을 표시한다. 소프트웨어 기반 명령어 스코어보드는 종속 명령어들 사이의 커맨드 스트림(300)에 하나 이상의 제어 워드들(308)을 삽입하고, 그런 다음 이는 ALU 파이프라인에 의해 실행된다. 제어 워드들은 종속 명령어들(dependent instructions)이 종속되는 명령어(들)(페어런트 명령어들(parent instructions))를 식별하여 프로세서 하드웨어(104)는 종속 명령어가 페어런트 명령어로부터의 결과들을 기다리는 동안 ALU 파이프라인이 정지(stall)하지 않는 것을 보장할 수 있다.

Description

산술 논리 유닛들을 위한 소프트웨어 기반 명령어 스코어보드
본 발명은 산술 논리 유닛을 포함하는 컴퓨팅 디바이스에 관한 발명이다.
종래의 프로세싱 시스템들은 일부 경우들에서 범용 컴퓨팅뿐만 아니라, 오디오, 비디오, 및 멀티미디어 애플리케이션들을 구현하는 중앙 프로세싱 유닛(CPU) 및 그래픽 프로세싱 유닛(GPU)과 같은 프로세싱 유닛들을 포함한다. GPU의 물리적 리소스들은 사용자 정의 재구성가능한 가상 파이프라인들을 구현하는데 사용되는 셰이더 엔진들 및 고정 기능(fixed function) 하드웨어 유닛들을 포함한다. 예를 들어, 3차원(3D) 그래픽을 프로세싱하기 위한 종래의 그래픽 파이프라인은 프로그램 가능한 셰이더들에 의해 지원되는 일련의 고정 기능 하드웨어 블록 배열로 형성된다. GPU에서의 프로세싱은 전형적으로 CPU에 의해 프로세싱되는 애플리케이션 프로그래밍 인터페이스(API) 콜(call)들(예를 들어, 드로우 콜들)에 의해 개시된다. 드로우 콜(draw call)은 CPU에 의해 생성되고 GPU에 송신되어 GPU가 프레임에서 객체(또는 객체의 일부)를 렌더링하도록 지시하는 커맨드이다.
GPU의 그래픽 하드웨어는 전형적으로 스칼라 ALU 또는 벡터 ALU와 같은 산술 논리 유닛들(ALU들)을 포함하며, 산술 논리 유닛들은 대응하는 파이프라인들로서 구현되고 덧셈, 뺄셈, 곱셈, 나눗셈, 및 이동과 같은 산술 연산들을 수행할 뿐만 아니라 다양한 초월 함수들(transcendental functions)을 수행하는데 사용된다. 일부 경우에, 하나의 파이프라인이 산술 기능(arithmetic function)의 대부분을 구현하는데 사용되고, 별도의 파이프라인이 보다 복잡한 초월 함수를 구현하는데 사용된다. ALU에 대한 명령어들은 아비터(arbiter)가 파이프라인들 중 하나에서 실행하기 위한 명령어들을 선택할 때까지 명령어 버퍼에 보관(hold)된다. 명령어 버퍼 내의 일부 명령어들은 다른 명령어들에 종속적(dependent)이다, 예를 들어, 제1(종속) 명령어에 대한 소스 레지스터들은 제2 명령어의 목적지(destination) 레지스터들로부터 입력을 수신한다. 따라서 제2 명령어는 제1 명령어가 실행되기 전에 완료되어야 한다.
본 개시는 첨부된 도면을 참조함으로써 당업자에게 더 잘 이해될 수 있고, 많은 특징 및 장점이 명백해질 수 있다. 다른 도면에서 동일한 참조 기호를 사용하는 것은 유사하거나 동일한 항목을 나타낸다.
도 1은 일부 실시예들에 따른 소프트웨어 기반 명령어 스코어보드를 채용하는 프로세싱 시스템의 블록도이다.
도 2는 일부 실시예들에 따른 명령어의 종속성을 표시하는 제어 워드를 커맨드 스트림에 삽입하는 소프트웨어 기반 명령어 스코어보드의 블록도이다.
도 3은 일부 실시예들에 따른 커맨드 스트림에 삽입된 명령어의 종속성을 표시하는 제어 워드의 블록도이다.
도 4는 일부 실시예들에 따른 명령어의 종속성을 표시하는 제어 워드를 커맨드 스트림에 삽입하고 제어 워드에 기초하여 종속 명령어의 발행(issuance)을 지연시키기 위한 방법을 예시하는 흐름도이다.
ALU 파이프라인은 4 사이클 길이 파이프라인과 같이 미리 결정된 사이클 수에 대응하는 길이를 갖는다. 따라서 종속 명령어(dependent instruction)가 종속되는 명령어가 완료되기 전에 파이프라인으로 발송되면 종속 명령어는 정지(stall)될 수 있다. 예를 들어, 덧셈 명령어(add instruction)가 이동 명령어에 종속되고 ALU 파이프라인이 4 사이클 길이인 경우, 덧셈 명령어는 이동 명령어 한 사이클 후에 파이프라인에 발송되면 3 사이클 동안 정지된다. 종래의 GPU는 종속 명령어들이 종속되는 명령어들의 완료까지 종속 명령어들의 ALU 파이프라인으로의 송신을 지연시키는데 사용되는 정보를 (예를 들어, 하나 이상의 플롭(flop)들에) 저장하기 위한 하드웨어 명령어 스코어보드를 포함한다. 예를 들어, 일부 경우에, 명령어 스코어보드는 파이프라인에 이전에 발행된 6개의 명령어들의 프로세싱 상태를 표시하는 정보를 저장하기 위한 6개의 레지스터들(엔트리들)을 포함한다. 모든 명령어는 그 소스 레지스터들을 명령어 스코어보드의 명령어들의 목적지 레지스터들과 비교하여 임의의 종속성을 식별한다. 명령어가 명령어 스코어보드의 명령어들 중 하나 이상에 종속적이면, 명령어 스코어보드 내의 대응하는 엔트리는 종속 명령어를 파이프라인에 발송할 때를 결정하기 위해 모니터링된다. 이 프로세스는 명령어 디코딩 및 레지스터들의 다수의 비교들을 수행하기 위한 회로부를 포함한다. 결과적으로, 하드웨어 명령어 스코어보드는 전력 소비 및 칩 상의 영역 모두에서 높은 비용을 초래한다.
도 1 내지 도 4는 GPU에서 하드웨어에 의해 소비되는 전력 소비 및 영역을 감소시키기 위해 소프트웨어로 구현되는 ALU 파이프라인에 대한 명령어 스코어보드를 예시한다. 소프트웨어 기반 명령어 스코어보드는, 파이프라인 지속기간보다 작은 명령어들 사이의 분리(separation)로 ALU 파이프라인에 발행된 명령어들 사이의 종속성을 표시한다("근접 간격(closely-spaced)" 명령어들로 지칭됨). 소프트웨어 기반 명령어 스코어보드는 프로그램 코드에서의 종속 명령어들 사이의 커맨드 스트림에 "제어 워드들"로 지칭되는 하나 이상의 지연 명령어들을 선택적으로 삽입하며, 그런 다음 이는 GPU에 의해 실행된다. 제어 워드는 GPU 하드웨어가 종속 명령어를 ALU 파이프라인에 발행하지 않고 페어런트 명령어가 아직 완료되지 않았기 때문에 ALU 파이프라인이 정지하도록 종속 명령어들이 종속되는 명령어(들)(본 명세서에서 "페어런트 명령어들(parent instructions)"로 지칭됨)을 식별한다.
일부 실시예들에서, 소프트웨어 기반 명령어 스코어보드는 종속 명령어 직전에 제어 워드를 커맨드 스트림에 삽입하고, 제어 워드는 종속 명령어가 종속되는 이전 명령어를 표시한다. 예를 들어, 제어 워드는 커맨드 스트림 내의 다음 명령어가 N번째 이전 벡터 ALU(VALU) 명령어에 종속됨을 표시한다. 일부 실시예들에서, 소프트웨어 기반 명령어 스코어보드는 명령어 스트림 오버헤드를 감소시키기 위해 단일 제어 워드에서 다가오는 명령어들의 둘 이상의 종속성들을 식별하는 둘 이상의 지연 값들을 포함하도록 제어 워드 압축 기술을 구현한다. 예를 들어, 단일 제어 워드는 커맨드 스트림 내의 다음 명령어에 대한 페어런트 명령어를 식별하고, 다음 명령어에 후속하여 발행하는 명령어를 커맨드 스트림 내의 다른 명령어에 종속되는 것으로서 식별하는 "스킵(skip)" 표시자를 더 포함한다. 이 제어 워드 압축 기술은 제어 워드 당 임의의 수의 종속성 지정자(dependency specifier)에 적용될 수 있다.일부 실시예들에서, 제어 워드는 하나보다 많은 ALU 파이프라인에서 실행되는 둘 이상의 페어런트 명령어들에 대한 하나의 명령어의 종속성을 표시한다. 예를 들어, 일부 실시예들에서, 제어 워드는 스칼라 ALU 파이프라인 및 벡터 ALU 파이프라인 둘 다에서, 또는 특수 함수 유닛(예를 들어, 사인/코사인) ALU 파이프라인 및 스칼라 ALU 파이프라인 및 벡터 ALU 파이프라인 중 하나 둘 다에서 실행되는 명령어들에 대한 종속성을 표시한다.
소프트웨어 기반 명령어 스코어보드는 컴파일러에 의해 유지되는 종속성 그래프에 기초하여 제어 워드들을 생성한다. 종속성 그래프는 프로그램 내의 모든 종속성을 식별한다. 그러나, 모든 종속 명령어가 제어 워드에 의해 야기되는 지연을 요구하는 것은 아니다. ALU 파이프라인의 깊이 및 페어런트 명령어와 종속 명령어 사이에서 발행하는 독립 명령어들의 수에 따라, 페어런트 명령어와 종속 명령어 사이에 여분의 아이들(idle) 사이클을 삽입할 필요가 없을 수 있다. 일부 실시예들에서, 소프트웨어 기반 명령어 스코어보드는 종속 명령어들 사이의 독립 명령어들의 수 및 ALU 파이프라인의 스테이지들의 수에 기초하여, 필요에 따라 제어 워드들만을 삽입한다. 예를 들어, 종속 명령어가 그 페어런트 명령어 후에 ALU 파이프라인의 길이에 기초하여 사이클의 임계 수 이상을 발행하는 경우, 페어런트 명령어는 종속 명령어가 발행하기 전에 완료될 것이고, 종속 명령어의 정지를 회피하기 위해 추가적인 아이들 사이클들이 필요하지 않을 것이다. 따라서, 소프트웨어 기반 명령어 스코어보드는 종속 명령어가 자신의 페어런트 명령어 후 사이클의 임계 수 내에 발행하는 경우에만 커맨드 스트림에 제어 워드를 삽입한다. 일부 실시예들에서, 사이클의 임계 수는 ALU 파이프라인의 스테이지들의 수에 기초한다. 본 명세서에 설명된 기술들은, 상이한 실시예들에서, 다양한 병렬 프로세서들(예를 들어, 벡터 프로세서들, 그래픽 프로세싱 유닛들(GPU들), 범용 GPU들(GPGPU들), 논-스칼라 프로세서들, 고병렬 프로세서들, 인공 지능(AI) 프로세서들, 추론 엔진들, 기계 학습 프로세서들, 다른 멀티스레드 프로세싱 유닛들 등) 중 임의의 것에서 이용된다.
도 1은 일부 실시예에 따른 소프트웨어 기반 명령어 스코어보드를 채용하는 프로세싱 시스템(100)을 예시한다. 프로세싱 시스템(100)은 중앙 프로세싱 유닛(CPU)(102) 및 병렬 프로세서의 일 예인 가속 프로세싱 디바이스(APD)(104)를 포함한다. 다양한 실시예에서, CPU(102)는 하나 이상의 단일 또는 다중 코어 CPU를 포함한다. 다양한 실시예들에서, APD(104)는 종래의 CPU들, 종래의 그래픽 프로세싱 유닛(GPU)들, 및 이들의 조합들과 같은 리소스들에 대해 가속화된 방식으로 가속 그래픽 프로세싱 태스크들, 데이터 병렬 태스크들, 네스트된(nested) 데이터 병렬 태스크들과 연관된 기능들 및 계산들을 수행하는 하드웨어 및/또는 소프트웨어의 임의의 협력하는 컬렉션을 포함한다. 도 1의 실시예에서, 프로세싱 시스템(100)은 통합된 프로그래밍 및 실행 환경을 제공하기 위해 CPU(102)와 APD(104)를 조합하는 단일 실리콘 다이 또는 패키지 상에 형성된다. 이러한 환경은 APD(104)가 일부 프로그래밍 태스크들을 위해 CPU(102)처럼 유동적으로 사용될 수 있게 한다. 다른 실시예들에서, CPU(102) 및 APD(104)는 개별적으로 형성되고 동일하거나 상이한 기판들 상에 장착된다. 프로세싱 시스템(100)은 도 1에 예시된 것보다 더 많거나 더 적은 컴포넌트들을 포함할 수도 있다는 것이 이해되어야 한다. 예를 들어, 프로세싱 시스템(100)은 하나 이상의 입력 인터페이스들, 비휘발성 저장소, 하나 이상의 출력 인터페이스들, 네트워크 인터페이스들, 및 하나 이상의 디스플레이들 또는 디스플레이 인터페이스들을 추가로 포함할 수 있다.
도 1에 예시된 바와 같이, 프로세싱 시스템(100)은 또한 시스템 메모리(106), 운영 체제(108), 통신 인프라스트럭처(110), 및 하나 이상의 애플리케이션들(112)을 포함한다. 시스템 메모리(106)에 대한 액세스는 메모리(106)에 결합되는 메모리 제어기(미도시)에 의해 관리된다. 예를 들어, 시스템 메모리(106)로부터 판독하기 위한 또는 그에 기록하기 위한 CPU(102) 또는 다른 디바이스들로부터의 요청들은 메모리 제어기에 의해 관리된다. 일부 실시예들에서, 하나 이상의 애플리케이션들(112)은 CPU(102)에서 또한 실행되는 계산들을 수행하기 위한 다양한 프로그램들 또는 커맨드들을 포함한다. CPU(102)는 APD(104)에서의 프로세싱을 위해 선택된 커맨드들을 발송한다. 운영 체제(108) 및 통신 인프라스트럭처(110)는 아래에서 더 상세히 논의된다. 프로세싱 시스템(100)은 디바이스 드라이버(114) 및 입력/출력 메모리 관리 유닛(IOMMU)(116)과 같은 메모리 관리 유닛을 더 포함한다. 프로세싱 시스템(100)의 컴포넌트들은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로서 구현될 수 있다. 일부 실시예들에서, 프로세싱 시스템(100)은 도 1에 도시된 것들에 추가하여 또는 상이한 하나 이상의 소프트웨어, 하드웨어, 및 펌웨어 컴포넌트들을 포함한다.
프로세싱 시스템(100) 내에서, 시스템 메모리(106)는 DRAM(미도시)과 같은 비영구 메모리를 포함한다. 다양한 실시예들에서, 시스템 메모리(106)는 애플리케이션들의 부분들 또는 다른 프로세싱 로직의 실행 동안의 변수 값들, 프로세싱 로직 명령어들, 상수 값들, 또는 다른 원하는 정보를 저장한다. 예를 들어, CPU(102) 상에서 하나 이상의 동작들을 수행하기 위한 제어 로직의 부분들은 CPU(102)에 의한 동작의 각각의 부분들의 실행 동안 시스템 메모리(106) 내에 상주할 수 있다. 실행 동안, 애플리케이션들(112)과 같은 각각의 애플리케이션들, 운영 체제(108)와 같은 운영 체제 기능들, 프로세싱 로직 커맨드들, 및 시스템 소프트웨어는 시스템 메모리(106)에 상주한다. 운영 체제(108)에 기본적인 제어 로직 커맨드들은 일반적으로 실행 동안 시스템 메모리(106)에 상주한다. 일부 실시예들에서, 다른 소프트웨어 커맨드들(예를 들어, 디바이스 드라이버(114))은 또한 프로세싱 시스템(100)의 실행 동안 시스템 메모리(106)에 상주한다.
IOMMU(116)는 멀티컨텍스트(multi-context) 메모리 관리 유닛이다. 본 명세서에서 사용되는 바와 같이, 컨텍스트는 커널들이 실행되는 환경 및 동기화 및 메모리 관리가 정의되는 도메인으로 간주된다. 컨텍스트는 디바이스들의 세트, 이들 디바이스들에 액세스가능한 메모리, 대응하는 메모리 속성들, 및 메모리 객체들에 대한 동작들 또는 커널(들)의 실행을 스케줄링하는데 사용되는 하나 이상의 커맨드 큐들을 포함한다. IOMMU(116)는 APD(104)와 같은 디바이스들에 대한 메모리 페이지 액세스를 위해 가상-물리적 어드레스 변환을 수행하는 로직을 포함한다. 일부 실시예들에서, IOMMU(116)는 또한 변환 색인 버퍼(translation lookaside buffer;TLB)(도시되지 않음)를 포함하거나 이에 대한 액세스를 갖는다. TLB는 시스템 메모리(106)에서의 데이터에 대해 APD(104)에 의해 행해진 요청들에 대한 논리적(즉, 가상) 메모리 어드레스들의 물리적 메모리 어드레스들로의 변환을 가속화하기 위해 콘텐츠 어드레스가능 메모리(CAM)에서 구현된다.
다양한 실시예들에서, 통신 인프라스트럭처(110)는 프로세싱 시스템(100)의 컴포넌트들을 상호접속시킨다. 통신 인프라스트럭처(110)는 주변 컴포넌트 상호접속(PCI) 버스, 확장 PCI(PCI-E) 버스, 고급 마이크로제어기 버스 아키텍처(AMBA) 버스, 고급 그래픽 포트(AGP), 또는 다른 그러한 통신 인프라스트럭처 및 상호접속들 중 하나 이상(도시되지 않음)을 포함한다. 일부 실시예들에서, 통신 인프라스트럭처(110)는 또한 이더넷 네트워크 또한 애플리케이션의 데이터 전송 레이트 요건들을 만족시키는 임의의 다른 적합한 물리적 통신 인프라스트럭처를 포함한다. 통신 인프라스트럭처(110)는 또한 프로세싱 시스템(100)의 컴포넌트들을 포함하는 컴포넌트들을 상호접속하는 기능을 포함한다.
디바이스 드라이버(114)와 같은 드라이버는 상호접속 또는 통신 인프라스트럭처(110)를 통해 디바이스(예를 들어, APD(104))와 통신한다. 콜(calling) 프로그램이 디바이스 드라이버(114)에서 루틴을 호출(invoke)할 때, 디바이스 드라이버(114)는 디바이스에 커맨드를 발행한다. 일단 디바이스가 데이터를 다시 디바이스 드라이버(114)로 발송하면, 디바이스 드라이버(114)는 원래의 콜 프로그램에서 루틴을 호출한다. 일반적으로, 디바이스 드라이버들은 임의의 필요한 비동기식 시간 종속 하드웨어 인터페이스에 필요한 인터럽트 핸들링을 제공하기 위해 하드웨어 종속적 및 운영 체제 특정적이다. 일부 실시예들에서, 컴파일러(120)는 디바이스 드라이버(114) 내에 임베딩된다. 컴파일러(120)는 프로세싱 시스템(100)에 의한 실행을 위해 필요에 따라 소스 코드를 프로그램 명령어들로 컴파일한다. 이러한 컴파일 동안, 컴파일러(120)는 컴파일의 다양한 단계들에서 프로그램 명령어들에 변환들을 적용할 수 있다. 다른 실시예들에서, 컴파일러(120)는 독립형 애플리케이션이다.
CPU(102)는 제어 프로세서, 필드 프로그램가능 게이트 어레이(FPGA), 애플리케이션 특정 집적 회로(ASIC), 또는 디지털 신호 프로세서(DSP) 중 하나 이상을 포함하지만, 이들 엔티티들은 명확성을 위해 도 1에 도시되지 않는다. CPU(102)는 프로세싱 시스템(100)의 동작을 제어하는 제어 로직의 적어도 일부를 실행한다. 예를 들어, 다양한 실시예들에서, CPU(102)는 운영 체제(108), 하나 이상의 애플리케이션들(112), 및 디바이스 드라이버(114)를 실행한다. 일부 실시예들에서, CPU(102)는 CPU(102) 및 APD(104)와 같은 다른 프로세싱 리소스에 걸쳐 하나 이상의 애플리케이션(112)과 연관된 프로세싱을 분배함으로써 하나 이상의 애플리케이션(112)의 실행을 개시 및 제어한다.
APD(104)는 그래픽 동작들 및 병렬 프로세싱에 특히 적합할 수 있는 다른 동작들과 같은 선택된 기능들에 대한 커맨드들 및 프로그램들을 실행한다. 일반적으로, APD(104)는 픽셀 동작들, 기하학적 계산들, 및 디스플레이에 이미지를 렌더링하는 것과 같은 그래픽 파이프라인 동작들을 실행하기 위해 자주 사용된다. 일부 실시예들에서, APD(104)는 또한 CPU(102)로부터 수신된 커맨드들 또는 명령어들에 기초하여, 컴퓨트 프로세싱 동작들(예를 들어, 비디오 동작들, 물리 시뮬레이션들, 전산 유체 역학 등과 같은 그래픽과 관련되지 않은 동작들)을 실행한다. 예를 들어, 커맨드들은 APD(104)의 명령어 세트 아키텍처(ISA)에서 전형적으로 정의되지 않는 특수 명령어들로 간주될 수 있다. 커맨드는 디스패치 프로세서, 커맨드 프로세서 또는 네트워크 제어기와 같은 특수 프로세서에 의해 실행될 수 있다.
다양한 실시예들에서, APD(104)는, 예를 들어, 단일 명령어, 다중 데이터(SIMD) 실행 모델에 따라 웨이브프론트 내의 다른 스레드들의 실행과 동시에 스레드를 실행하는 하나 이상의 SIMD 유닛들(124)을 포함하는 하나 이상의 프로세싱 코어들(122)과 같은 하나 이상의 컴퓨트 유닛들을 포함한다. SIMD 실행 모델은 산술 논리 유닛들(arithmetic logic units, ALU들)과 같은 다수의 프로세싱 엘리먼트들이 단일 프로그램 제어 흐름 유닛과 프로그램 카운터를 공유하여 동일한 프로그램을 실행하지만 상이한 데이터로 그 프로그램을 실행할 수 있는 모델이다. APD(104)의 일부 실시예들은 GPU를 구현하는데 사용되며, 이 경우 프로세싱 코어들(122)은 셰이더 코어들 또는 스트리밍 멀티프로세서들(SMX들)로 지칭된다. APD(104)에서 구현되는 프로세싱 코어들(122)의 수는 설계 선택의 문제이다.
하나 이상의 프로세싱 코어들(122) 각각은 들어오는 데이터를 프로세싱하기 위해 특정 작업 항목의 각각의 인스턴스화(instantiation)를 실행하며, 여기서 하나 이상의 프로세싱 코어들(122)에서의 실행의 기본 단위는 작업 항목(예를 들어, 스레드)이다. 각각의 작업 항목은 예를 들어 병렬로 실행될 커맨드에 의해 디바이스에서 호출되는(invoked) 커널의 병렬 실행 컬렉션의 단일 인스턴스화를 나타낸다. 작업 항목은 프로세싱 코어(122)에서 실행되는 작업 그룹의 일부로서 하나 이상의 프로세싱 엘리먼트들에 의해 실행될 수 있다.
APD(104)는 단일 SIMD 유닛(124) 상에서 "웨이브프론트"로서 동시에 실행되는 스레드들의 그룹들을 포함하는 작업 항목들을 발행하고 실행하는 GPU들을 포함한다. 다수의 웨이브프론트들은 동일한 프로그램을 실행하도록 지정된 작업 항목들의 컬렉션을 포함하는 "작업 그룹"에 포함된다. 작업 그룹을 구성하는 각각의 웨이브프론트를 실행함으로써 작업 그룹이 실행된다. 일부 실시예들에서, 웨이브프론트는 단일 SIMD 유닛(124) 상에서 순차적으로 실행되거나 또는 상이한 SIMD 유닛들 상에서 부분적으로 또는 완전히 병렬로 실행된다. 다른 실시예들에서, 작업그룹으로부터의 모든 웨이브프론트들은 동일한 프로세싱 코어(122)에서 프로세싱된다. 웨이브프론트들은 또한 워프들(warps), 벡터들, 또는 스레드들로 상호 교환적으로 지칭될 수 있다. 일부 실시예들에서, 웨이브프론트들은 셰이더 프로그램의 병렬 실행의 인스턴스들을 포함하며, 여기서 각각의 웨이브프론트는 SIMD 패러다임에 따라 직렬로 단일 SIMD 유닛(124) 상에서 동시에 실행되는 다수의 작업 항목들(예를 들어, 다수의 데이터를 갖는 명령어들의 동일한 스트림을 실행하는 하나의 명령어 제어 유닛)을 포함한다. 스케줄러(128)는 상이한 프로세싱 코어들(122) 및 SIMD 유닛들(124) 상에서 다양한 웨이브프론트들을 스케줄링하는 것 뿐만 아니라, APD(104) 상에서 다양한 태스크들을 오케스트레이션(orchestrating)하기 위한 다른 동작들을 수행하는 것과 관련된 동작들을 수행한다.
하나 이상의 프로세싱 코어들(122)에 의해 제공되는 병렬성(parallelism)은 픽셀 값 계산들, 정점 변환들, 테셀레이션(tessellation), 기하학적 구조 쉐이딩 동작들, 및 다른 그래픽 동작들과 같은 그래픽 관련 동작들에 적합하다. 그래픽 프로세싱 파이프라인(130)은 CPU(102)로부터 그래픽 프로세싱 커맨드들을 수용하고, 따라서 병렬로 실행하기 위한 계산 태스크들을 하나 이상의 프로세싱 코어들(122)에 제공한다. 픽셀 프로세싱 및 다른 병렬 계산 동작과 같은 일부 그래픽 파이프라인 동작은 입력 데이터 엘리먼트의 스트림 또는 컬렉션에 대해 동일한 커맨드 스트림 또는 컴퓨트 커널이 수행될 것을 요구한다. 동일한 컴퓨트 커널의 각각의 인스턴스화는 이러한 데이터 엘리먼트를 병렬적으로 프로세싱하기 위해 하나 이상의 프로세싱 코어(122) 내의 다수의 SIMD(124) 유닛 상에서 동시에 실행된다. 본 명세서에서 언급되는 바와 같이, 예를 들어, 컴퓨트 커널은 프로그램에서 선언되고 APD 프로세싱 코어(122) 상에서 실행되는 명령어들을 포함하는 기능이다. 이 기능은 커널, 셰이더, 셰이더 프로그램, 또는 프로그램으로도 지칭된다.
웨이브프론트의 폭은 APD(104)의 SIMD 유닛들(124)의 하드웨어의 특징이다. 다양한 실시예들에서, APD(104)는 GPU 하드웨어의 마이크로아키텍처에 종속되는 일정하고 고정된 크기의 웨이브프론트들을 발행하는 GPU 아키텍처를 포함한다. 각각의 프로세싱 코어(122)는 스칼라 및/또는 벡터 부동 소수점 유닛들, 산술 논리 유닛들(ALU들) 등과 같은 하나 이상의 프로세싱 엘리먼트들을 포함한다. 다양한 실시예들에서, 프로세싱 코어들(122)은 또한 역-제곱근(inverse-square root) 유닛들 및 사인/코사인 유닛들과 같은 특수 목적 프로세싱 유닛들(도시되지 않음)을 포함한다.
웨이브프론트에서 작업 항목(예를 들어, 스레드)은 그 실행 동안 SIMD 하드웨어 레인 (이하, "SIMD 레인"으로 지칭됨) 상에서 실행된다. 일 실시예에서, 각각의 SIMD 유닛(124)의 프로세싱 엘리먼트들은 각각이 16개의 ALU들(레인들로 지칭됨)을 포함하는 어레이들로 배열되며, 여기서 각각의 레인은 SIMD 유닛(124)의 다른 레인들과 동시에 동일한 명령어를 실행하지만, 실행 동안 상이한 데이터 및 레인에 매핑된 각각의 작업 항목으로 그 명령어를 실행할 수 있다. 일부 실시예들에서, 웨이브프론트는 웨이브(wave)64로 지칭되는 64개의 스레드들의 그룹이며(따라서 웨이브프론트의 각각의 스레드는 0 내지 63의 범위의 레인에 할당됨), 이는 4개의 사이클들에 걸쳐 16개의 레인 폭 SIMD 유닛을 통해 16개의 스레드들의 그룹들로 발행된다. 그러나, 당업자는 본 개시의 범위를 벗어나지 않고 웨이브프론트들 및 SIMD 유닛들(124)의 폭이 스레드들의 임의의 구성 또는 수(예를 들어, 8, 16, 32, 64 등)를 포함할 수 있다는 것을 인식할 것이다.
하드웨어 명령어 스코어보드의 영역 및 전력 소비의 비용을 초래하지 않고 종속성의 식별을 용이하게 하기 위해, 컴파일러(120)는 다른 명령어에 대한 명령어의 종속성을 표시하기 위해 제어 워드(118)와 같은 제어 워드들을 커맨드 스트림에 삽입하는 소프트웨어 기반 명령어 스코어보드(126)를 포함한다. 제어 워드(118)에 기초하여, SIMD 유닛들(124)은 종속 명령어들이 종속되는 명령어들(페어런트 명령어들)이 완료될 때까지 종속 명령어들의 실행을 지연시킨다.
도 2는 일부 실시예들에 따라 SIMD 유닛들(124)에서 실행하기 위한 명령어들의 커맨드 스트림(204)에 명령어의 종속성을 표시하는 제어 워드(206)를 삽입하는 컴파일러(120)를 예시하는 프로세싱 시스템(100)의 부분(200)의 블록도이다. 각각의 SIMD 유닛(124)은 명령어 버퍼(210), 발행 스테이지(212), 및 복수의 산술 논리 유닛들(ALU들)(214)(이들 중 하나만이 예시됨)을 포함한다. 일부 실시예들에서, 명령어 버퍼(210) 및 발행 스테이지(212) 중 하나 이상은 다수의 SIMD 유닛들(124) 사이에서 공유되는 반면, 다른 실시예들에서, 각각의 SIMD 유닛(124)은 그 자신의 명령어 버퍼 및 발행 스테이지를 포함한다. 동작들을 실행하는 과정에서, 컴파일러(120)는 ALU(214)에서 실행될 명령어들의 세트를 생성한다. ALU 명령어들의 예들은 덧셈 명령어들, 곱셈 명령어들, 행렬 조작 명령어들 등을 포함한다. SIMD 유닛(124)은 실행을 위해 명령어 버퍼(210)에 ALU 명령어들을 저장한다. 발행 스테이지(212)는 명령어 버퍼(210)의 엔트리들을 가리키는 하나 이상의 포인터들을 제어한다. 발행 스테이지(212)는 명령어 버퍼로부터 명령어들을 판독하고 판독된 명령어들을 ALU(214)에 제공하기 위해 포인터들을 조작한다. 명령어 버퍼(210)로부터의 명령어의 판독 및 ALU(214)로의 명령어의 제공은 명령어를 ALU(214)로 "발행(issuing)"하는 것으로 지칭된다.
ALU(214)는 명령어들에 의해 정의된 수학적 연산들을 수행하기 위해 발행된 명령어들을 실행한다. 명령어들의 실행을 용이하게 하기 위해, ALU(214)는 ALU 제어 모듈(216) 및 ALU 파이프라인(218)을 포함한다. ALU 파이프라인(218)은 복수의 파이프라인 스테이지들(예를 들어, 스테이지들(220))을 포함하고, 각각의 스테이지는 실행되는 명령어에 기초하여 그리고 특히 ALU 파이프라인(218)의 이전 스테이지에 의해 제공되는 데이터에 기초하여 하나 이상의 동작들을 수행한다. 따라서, 발행된 명령어는 ALU 파이프라인(218)의 초기 스테이지에서 실행을 시작하고, 초기 스테이지는 실행의 결과들을, 수신된 데이터에 기초하여 동작들을 실행하고 결과들을 제3 스테이지에 제공하는 제2 스테이지에 제공하고, 명령어가 ALU 파이프라인(218)의 최종 스테이지에 도달할 때까지, 레지스터 파일(도시되지 않음) 또는 SIMD 유닛(124)의 다른 저장 위치에 동작의 최종 결과를 저장한다. 또한, ALU 파이프라인(218)은 파이프라인 방식으로 명령어들을 실행하며, 따라서 ALU 파이프라인(218)의 각각의 스테이지는 상이한 명령어를 동시에 실행한다. 즉, ALU 파이프라인(218)의 주어진 사이클에 대해, 초기 스테이지는 하나의 명령어, 제2 스테이지는 다른 명령어, 제3 스테이지는 또 다른 명령어 등을 실행한다.
ALU 제어 모듈(216)은 ALU 파이프라인(218)에서의 조건들을 모니터링하고, 모니터링된 조건들에 기초하여, 어느 스테이지들이 주어진 사이클에 대한 명령어들을 실행하는지를 제어한다. 즉, 일부 실시예들에서, ALU 제어 모듈(216)은 주어진 사이클에 대해, ALU 파이프라인(218)의 어느 스테이지들이 명령어들을 실행하는지를 결정하기 위해 클록 신호들 및 다른 제어 신호들의 게이팅을 제어한다. 예를 들어, 일부 조건들 하에서, ALU 파이프라인(218)의 스테이지는 정지 조건(stall condition)에 진입할 것이며, 여기서 스테이지는, 데이터가 저장될 캐시 라인의 준비를 대기하거나 캐시로부터 데이터를 대기하는 것과 같이, 스테이지가 진행할 수 있기 전에 다른 실행 유닛에서 동작들을 대기하고 있다. ALU 제어 모듈(216)은 스테이지에서 정지 조건을 검출하고, 정지 조건이 지속되는 동안 ALU 파이프라인(218)의 다른 스테이지들에서의 실행을 중단(suspend)함으로써, 명령어들이 정지 스테이지로 진행하여 실행 오류들을 야기하는 것을 방지한다.
컴파일러(120)는 SIMD 유닛들(124) 각각에서 실행될 소프트웨어 프로그램 내의 모든 종속성들을 식별하는 종속성 그래프(202)를 생성하고, SIMD 유닛들(124)에서의 실행을 위한 명령어들의 커맨드 스트림(204)을 생성한다. 종속성 그래프(202)에 기초하여, 소프트웨어 기반 명령어 스코어보드(126)는 임의의 개입 명령어들(intervening instructions) 없이 발행하도록 스케줄링되거나 서로의 사이클의 임계 수 내에서 발행하도록 스케줄링되는 페어런트 명령어들 및 종속 명령어들을 식별한다. 소프트웨어 기반 명령어 스코어보드(126)는 종속 명령어 및 종속 명령어가 종속되는 페어런트 명령어를 식별하기 위해 제어 워드(206)를 커맨드 스트림(204)에 삽입한다.
일부 실시예들에서, 소프트웨어 기반 명령어 스코어보드(126)는 페어런트 명령어와 종속 명령어 사이에 어떠한 개입 명령어들도 발행하도록 스케줄링되지 않는다고 (또는 불충분한 수의 개입 명령어들이 발행하도록 스케줄링된다고) 결정하는 것에 응답하여 제어 워드(206)를 커맨드 스트림에 삽입하기만 한다. 일부 실시예들에서, 소프트웨어 기반 명령어 스코어보드(126)는 ALU 파이프라인(218)에서의 스테이지들의 수에 기초하여 개입 명령어들의 수의 충분성을 결정한다. 예를 들어, ALU 파이프라인(218)이 4개의 스테이지를 갖고 페어런트 명령어와 종속 명령어 사이에 발행하는 4개 미만의 개입 명령어가 있는 경우, 소프트웨어 기반 명령어 스코어보드(126)는 페어런트 명령어와 종속 명령어가 근접 간격되어 있다고 결정하고, 페어런트 명령어에 대한 종속 명령어의 종속성을 표시하는 제어 워드(206)를 커맨드 스트림(204)에 삽입한다. 그러나, 페어런트 명령어와 종속 명령어 사이에 발행하는 4개 이상의 개입 명령어들이 있는 경우, 소프트웨어 기반 명령어 스코어보드(126)는 제어 워드(206)를 커맨드 스트림에 삽입하는 것을 바이패스하는데, 그 이유는 페어런트 명령어가 추가 지연을 필요로 하지 않고 종속 명령어가 발행하기 전에 완료될 것이기 때문이다.
제어 워드(206)를 수신하는 것에 응답하여, ALU 제어 모듈(216)은 페어런트 명령어가 실행을 완료한 후까지 종속 명령어의 실행을 중단한다. 페어런트 명령어가 완료하는데 걸리는 사이클의 수는 ALU(214)가 후속 명령어에 의해 소비될 수 있는 결과를 생성할 때까지 발행 사이클들이 경과한 후 사이클의 수이다. 일부 실시예들에서, 페어런트 명령어가 실행을 완료하는데 걸리는 사이클의 수는 페어런트 및 종속 명령어 웨이브프론트들의 폭에 종속된다. 예를 들어, 웨이브32 웨이브프론트에 대해, 실행을 완료하기 위한 페어런트 명령어에 대한 사이클의 수는 페어런트 명령어를 발행하는데 걸리는 사이클의 수와 ALU 파이프라인(218)의 길이(즉, ALU 파이프라인(218) 내의 ALU 스테이지(220)의 수)를 더한 것이다. 웨이브64 웨이브프론트의 경우, 페어런트 명령어가 실행을 완료하는 사이클의 수는 페어런트 명령어가 한 번 또는 두 번 발행되는지 여부에 종속된다. 일부 실시예들에서, 웨이브64 웨이브프론트가 2개의 패스로 발행되고, ALU 제어 모듈(216)은 페어런트 명령어의 제1 패스가 완료된 후이지만 페어런트 명령어의 제2 패스가 완료되기 전에 종속 명령어를 발행하여 종속 명령어가 페어런트 명령어의 제2 패스와 중첩하게 한다.
도 3은 일부 실시예들에 따른, 커맨드 스트림(300)에 삽입된 명령어의 종속성을 표시하는 제어 워드(308)의 블록도이다. 커맨드 스트림(300)은 명령어들, 명령어-1(302), 명령어-2(304), 명령어-3(306), 명령어-4(310), 명령어-5(312) 및 명령어-6(314)을 포함한다. 예시된 예에서, 명령어-4(310)는 명령어-1(302)에 종속되고 명령어-6(314)은 명령어-5(312)에 종속된다.
종속성을 표시하고 ALU 제어 모듈(216)에게 종속 명령어들, 명령어-4(310) 및 명령어-6(314))를 지연시키도록 지시하기 위해, 그들 각각의 페어런트 명령어들, 명령어-1(302) 및 명령어-5(312))가 완료될 때까지, 소프트웨어 기반 명령어 스코어보드(126)는 명령어-4(310) 전에 제어 워드(308)를 커맨드 스트림(300)에 삽입한다. 제어 워드(308)는 페어런트 명령어(들)가 실행되고 있는 ALU(214)의 식별자 및 페어런트 명령어와 종속 명령어 사이에서 발행하는 개입 명령어들의 수의 표시를 포함한다. 예시된 실시예에서, 제어 워드(308)는 명령어-4(310) 전에 3 사이클을 발행한 명령어에 종속되는 것으로서 명령어-4(310)를 식별하고, 명령어-6(314) 전에 1 사이클을 발행한 명령어에 종속되는 것으로서 명령어-6(314)을 식별한다. 제어 워드(308)는 제2 종속 명령어(명령어-6(314)) 및 명령어-5(312)에 대한 그 종속성을 식별하기 위한 "스킵" 코드를 포함한다. 예시된 예의 실시예에서, 제어 워드(308)는,
DataDependency instID0=3, Skip=2, instID1=1
여기서 instID0=3은 제어 워드(308)(명령어-4(310))를 바로 뒤따르는 명령어 워드가 명령어-4(310)(명령어-1(302)) 이전에 3 사이클을 발행한 명령어에 종속됨을 선언하고, Skip=2는 다음 지연이 다음 명령어에 대한 것이 아니라 다음 명령어(명령어-6(314)) 이후의 명령어에 대한 것임을 의미하며, instID1=1은 명령어-6(314)이 명령어-6(314)(명령어-5(312)) 이전에 1 사이클을 발행한 명령어에 종속됨을 선언한다. 제어 워드(308)를 수신하는 것에 응답하여, ALU 제어 모듈(216)은 명령어-4(310) 및 명령어-6(314) 각각을 발행하기 전에 지연(delay)을 더(add)한다.
도 4는 일부 실시예들에 따른, 명령어의 종속성을 표시하는 제어 워드를 커맨드 스트림에 삽입하기 위한 방법(400)을 예시하는 흐름도이다. 방법(400)은 도 1의 프로세싱 시스템(100)에서의 예시적인 구현예와 관련하여 설명된다. 블록(402)에서, 컴파일러(120)는 명령어들의 종속성을 식별한다. 예를 들어, 일부 실시예들에서, 컴파일러(120)는 소프트웨어 프로그램 내의 각각의 종속성을 식별하는 종속성 그래프(202)를 생성한다. 블록(404)에서, 컴파일러(120)는 커맨드 스트림(300)에서 명령어들을 발행한다. 블록(406)에서, 소프트웨어 기반 명령어 스코어보드(126)는 종속 명령어가 종속되는 명령어(페어런트 명령어)가 종속 명령어 전에 사이클의 임계 수보다 많이 발행되었는지 여부를 결정한다. 일부 실시예들에서, 임계 수는 ALU 파이프라인(218) 내의 ALU 스테이지들(220)의 수에 기초한다. 블록(406)에서, 소프트웨어 기반 명령어 스코어보드(126)가 페어런트 명령어가 종속 명령어 전에 사이클의 임계 수보다 많이 발행되었다고 결정하면, 방법 흐름은 블록(404)으로 다시 계속된다.
블록(406)에서, 소프트웨어 기반 명령어 스코어보드(126)가 페어런트 명령어가 종속 명령어 전에 사이클의 임계 수보다 많이 발행하지 않았다고 결정하면, 방법 흐름은 블록(408)으로 계속된다. 블록(408)에서, 소프트웨어 기반 명령어 스코어보드(126)는 제어 워드(308)를 커맨드 스트림(300)에 삽입한다. 제어 워드(308)는 페어런트 명령어가 발행된 ALU(214) 및 종속 명령어와 페어런트 명령어의 발행 사이의 개입 명령어의 수를 식별한다. 일부 실시예들에서, 제어 워드(308)는, 예를 들어, 스킵 표시자를 포함함으로써 하나 이상의 명령어의 종속성을 표시한다. 블록(410)에서, ALU 제어 모듈(216)은 페어런트 명령어가 완료될 때까지 종속 명령어의 실행을 지연시킨다.
일부 실시예들에서, 위에서 설명된 장치들 및 기술들은 도 1 내지 도4를 참조하여 위에서 설명된 프로세싱 시스템과 같은 하나 이상의 집적 회로(IC) 디바이스들(집적 회로 패키지들 또는 마이크로칩들로도 지칭됨)을 포함하는 시스템에서 구현된다. 전자 설계 자동화(EDA) 및 컴퓨터 지원 설계(CAD) 소프트웨어 도구들이 이들 IC 디바이스들의 설계 및 제조에 사용될 수 있다. 이러한 설계 도구들은 전형적으로 하나 이상의 소프트웨어 프로그램들로서 표현된다. 하나 이상의 소프트웨어 프로그램들은, 회로부를 제조하기 위해 제조 시스템을 설계 또는 적응시키기 위한 프로세스의 적어도 일부를 수행하도록 하나 이상의 IC 디바이스들의 회로부를 나타내는 코드 상에서 동작하도록 컴퓨터 시스템을 조작하기 위해 컴퓨터 시스템에 의해 실행가능한 코드를 포함한다. 이 코드는 명령어, 데이터, 또는 명령어와 데이터의 조합을 포함할 수 있다. 설계 도구 또는 제조 도구를 나타내는 소프트웨어 명령어들은 전형적으로 컴퓨팅 시스템에 액세스가능한 컴퓨터 판독가능 저장 매체에 저장된다. 마찬가지로, IC 디바이스의 설계 또는 제조의 하나 이상의 단계들을 나타내는 코드는 동일한 컴퓨터 판독가능 저장 매체 또는 상이한 컴퓨터 판독가능 저장 매체에 저장되고 이로부터 액세스될 수 있다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령어 및/또는 데이터를 제공하기 위해 사용하는 동안 컴퓨터 시스템에 의해 액세스 가능한 임의의 비일시적 저장 매체 또는 비일시적 저장 매체의 조합을 포함할 수 있다. 그러한 저장 매체는 광학 매체(예를 들어, 콤팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 읽기 전용 메모리(ROM) 또는 플래시 메모리), 또는 MEMS(마이크로 전자기계 시스템) 기반 저장 매체를 포함할 수 있고 그러나 여기에 제한은 되지 않는다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템(예를 들어, 시스템 RAM 또는 ROM)에 내장될 수 있고, 컴퓨팅 시스템(예를 들어, 자기 하드 드라이브)에 고정적으로 부착되거나 컴퓨팅 시스템(예를 들어, 광학 디스크 또는 유니버설 직렬 버스(USB) 기반 플래시 메모리), 또는 유선 또는 무선 네트워크(예: 네트워크 액세스 가능 저장(NAS))을 통해 컴퓨터 시스템에 연결된다.
일부 실시예들에서, 위에서 설명된 기술들의 특정 양태들은 소프트웨어를 실행하는 프로세싱 시스템의 하나 이상의 프로세서들에 의해 구현될 수 있다.소프트웨어는 비일시적 컴퓨터 판독가능 저장 매체 상에 저장되거나 그렇지 않으면 유형적으로 실시된 하나 이상의 실행가능한 명령어들의 세트들을 포함한다.소프트웨어는 하나 이상의 프로세서들에 의해 실행될 때, 위에서 설명된 기술들의 하나 이상의 양태들을 수행하기 위해 하나 이상의 프로세서들을 조작하는 명령어들 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체는 자기 또는 광학 디스크 저장 디바이스, 플래시 메모리(Flash memory), 캐시(cache), 램(RAM) 등과 같은 솔리드 스테이트 저장 디바이스 또는 다른 비휘발성 메모리 디바이스 등을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체 상에 저장된 실행가능한 명령어들은 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 하나 이상의 프로세서들에 의해 해석되거나 다른 방식으로 실행가능한 다른 명령어 포맷일 수 있다.
일반적인 설명에서 상술한 모든 활동 또는 엘리먼트가 요구되지 않으며, 특정 활동 또는 디바이스의 일부가 요구되지 않을 수 있으며, 상술한 것들에 더하여 하나 이상의 추가적인 활동이 수행될 수 있거나, 또는 포함된 엘리먼트들이 요구된다는 점에 유의한다. 또한 활동들이 나열되는 순서는 반드시 활동들이 수행되는 순서는 아니다. 또한, 구체적인 실시예들을 참조하여 개념들을 설명하였다. 그러나 통상의 지식을 가진 자라면 아래의 청구범위들에 기재된 바와 같이 본 개시의 범위를 벗어나지 않는 범위에서 다양한 수정들 및 변경들이 가능하다는 것을 알 수 있다. 따라서, 본 명세서 및 도면은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 하며, 이러한 모든 수정들은 본 개시의 범위 내에 포함되도록 의도된다.
이점들, 다른 장점들, 및 문제점들에 대한 해결책들이 특정 실시예들과 관련하여 위에서 설명되었다. 그러나, 이점, 장점, 문제에 대한 해결책, 및 어떤 이점, 장점, 또는 해결책이 발생하거나 더 두드러지게 될 수 있는 어떤 특징은 청구범위들 중 어느 하나 또는 모든 청구범위들의 중요한, 요구되는, 또는 필수적인 특징으로 해석되지 않는다. 더욱이, 위에서 개시된 특정 실시예들은 단지 예시적이며, 개시된 주제가 본 명세서의 교시들의 이점을 갖는 당업자들에게 명백하지만 상이한 그러나 동등한 방식들로 수정되고 실시될 수 있다. 이하의 청구범위에 기재된 것 이외의, 본 명세서에 기재된 구성 또는 설계의 상세사항에 대한 제한은 의도되지 않는다. 따라서, 위에서 개시된 특정 실시예들은 변경 또는 수정될 수 있고, 이러한 모든 변형들은 개시된 주제의 범위 내에서 고려된다는 것이 명백하다. 따라서, 본 명세서에서 추구하는 보호범위는 아래의 청구범위에 명시된 바와 같다.

Claims (17)

  1. 방법으로서,
    산술 논리 유닛(ALU) 파이프라인에서의 실행을 위한 제1 명령어를 포함하는 커맨드 스트림에 제어 워드를 삽입하는 단계 - 상기 제어 워드는 상기 ALU 파이프라인에서의 실행을 위한 제2 명령어에 대한 상기 제1 명령어의 제1 종속성을 표시하고, 상기 ALU 파이프라인은 복수의 스테이지들을 포함함 -를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 ALU 파이프라인에서, 상기 제어 워드에 기초하여 상기 제1 명령어의 실행을 지연시키는 단계를 더 포함하는, 방법.
  3. 제1항 또는 제2항에 있어서, 상기 제어 워드를 삽입하는 단계는,
    임의의 개입 명령어들(intervening instructions) 없이 발행하는 상기 제1 명령어 및 상기 제2 명령어에 응답하여 상기 제어 워드를 삽입하는 단계; 또는
    상기 제2 명령어의 발행 후에 명령어들의 임계 수보다 적게 발행하는 상기 제1 명령어에 응답하여 상기 제어 워드를 삽입하는 단계를 포함하는, 방법.
  4. 제3항에 있어서, 상기 임계 수는 상기 ALU 파이프라인의 스테이지들의 수에 기초하는, 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 제어 워드는,
    상기 제2 명령어가 실행되고 있는 상기 ALU의 식별자; 및
    상기 제2 명령어의 발행과 상기 제1 명령어의 발행 사이에서 발행하는 명령어들의 수의 표시를 포함하는, 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 제어 워드에서, 상기 ALU 파이프라인에서의 실행을 위한 적어도 하나의 제4 명령어에 대한 적어도 하나의 제3 명령어의 적어도 하나의 제2 종속성을 표시하는 단계를 더 포함하는, 방법.
  7. 방법으로서,
    복수의 스테이지들을 포함하는 산술 논리 유닛(ALU) 파이프라인에서, 제1 명령어가 제2 명령어에 종속됨을 표시하는 제어 워드에 기초하여 상기 제1 명령어의 실행을 지연시키는 단계를 포함하는, 방법.
  8. 제7항에 있어서,
    임의의 개입 명령어들 없이 발행하는 상기 제1 명령어 및 상기 제2 명령어에 응답하여 그리고 상기 제2 명령어의 발행 후 명령어들의 임계 수보다 적게 발행하는 상기 제1 명령어에 응답하여 명령어 스트림에서 상기 제어 워드를 수신하는 단계를 더 포함하는, 방법.
  9. 제8항에 있어서, 상기 임계 수는 상기 ALU 파이프라인의 스테이지들의 수에 기초하는, 방법.
  10. 제7항 내지 제9항 중 어느 한 항에 있어서, 상기 제어 워드는,
    상기 제2 명령어가 실행되고 있는 상기 ALU의 식별자; 및
    상기 제2 명령어의 발행과 상기 제1 명령어의 발행 사이에서 발행하는 명령어들의 수의 표시를 포함하는, 방법.
  11. 제7항 내지 제10항 중 어느 한 항에 있어서,
    상기 제어 워드에서, 상기 ALU 파이프라인에서의 실행을 위한 제4 명령어에 대한 제3 명령어의 제2 종속성을 표시하는 단계를 더 포함하는, 방법.
  12. 디바이스로서,
    복수의 스테이지들을 포함하는 산술 논리 유닛(ALU) 파이프라인; 및
    프로세서를 포함하고, 상기 프로세서는,
    상기 ALU 파이프라인에서의 실행을 위한 제2 명령어에 대한 제1 명령어의 제1 종속성을 표시하는 제어 워드를 상기 ALU 파이프라인에서의 실행을 위한 상기 제1 명령어에 삽입하도록 구성되는, 디바이스.
  13. 제12항에 있어서, 상기 ALU 파이프라인은,
    상기 제어 워드에 기초하여 상기 제1 명령어의 실행을 지연시키도록 구성되는, 디바이스.
  14. 제12항 또는 제13항에 있어서, 상기 프로세서는,
    임의의 개입 명령어들 없이 발행하는 상기 제1 명령어 및 상기 제2 명령어에 응답하여 상기 제어 워드를 삽입하고; 또는
    상기 제2 명령어의 발행 후에 명령어들의 임계 수보다 적게 발행하는 상기 제1 명령어에 응답하여 상기 제어 워드를 삽입하도록 더 구성되는, 디바이스.
  15. 제14항에 있어서, 상기 임계 수는 상기 ALU 파이프라인의 스테이지들의 수에 기초하는, 디바이스.
  16. 제12항 내지 제15항 중 어느 한 항에 있어서, 상기 제어 워드는,
    상기 제2 명령어가 실행되고 있는 상기 ALU의 식별자; 및
    상기 제2 명령어의 발행과 상기 제1 명령어의 발행 사이에서 발행하는 명령어들의 수의 표시를 포함하는, 디바이스.
  17. 제12항 내지 제16항 중 어느 한 항에 있어서, 상기 프로세서는,
    상기 제어 워드에서, 상기 ALU 파이프라인에서의 실행을 위한 제4 명령어에 대한 제3 명령어의 제2 종속성을 표시하도록 더 구성되는, 디바이스.
KR1020237021735A 2020-12-15 2021-12-13 산술 논리 유닛들을 위한 소프트웨어 기반 명령어 스코어보드 KR20230121073A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/122,089 2020-12-15
US17/122,089 US11847462B2 (en) 2020-12-15 2020-12-15 Software-based instruction scoreboard for arithmetic logic units
PCT/US2021/063019 WO2022132614A1 (en) 2020-12-15 2021-12-13 Software-based instruction scoreboard for arithmetic logic units

Publications (1)

Publication Number Publication Date
KR20230121073A true KR20230121073A (ko) 2023-08-17

Family

ID=81942535

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237021735A KR20230121073A (ko) 2020-12-15 2021-12-13 산술 논리 유닛들을 위한 소프트웨어 기반 명령어 스코어보드

Country Status (6)

Country Link
US (1) US11847462B2 (ko)
EP (1) EP4264413A1 (ko)
JP (1) JP2023552789A (ko)
KR (1) KR20230121073A (ko)
CN (1) CN116830145A (ko)
WO (1) WO2022132614A1 (ko)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2925842B2 (ja) 1991-07-04 1999-07-28 松下電器産業株式会社 パイプライン処理装置
US6950926B1 (en) * 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US7206927B2 (en) * 2002-11-19 2007-04-17 Analog Devices, Inc. Pipelined processor method and circuit with interleaving of iterative operations
US7434035B2 (en) 2003-05-12 2008-10-07 International Business Machines Corporation Method and system for processing instructions in grouped and non-grouped modes
US9448805B2 (en) 2013-06-14 2016-09-20 Comsats Institute Of Information Technology Software controlled data prefetch buffering
JP6467743B2 (ja) 2013-08-19 2019-02-13 シャンハイ シンハオ マイクロエレクトロニクス カンパニー リミテッド 汎用ユニットにもとづいた高性能プロセッサ・システムとその方法
US11249765B2 (en) * 2018-08-22 2022-02-15 Advanced Micro Devices, Inc. Performance for GPU exceptions
US20220075627A1 (en) * 2020-09-09 2022-03-10 Ascenium, Inc. Highly parallel processing architecture with shallow pipeline

Also Published As

Publication number Publication date
CN116830145A (zh) 2023-09-29
WO2022132614A1 (en) 2022-06-23
US11847462B2 (en) 2023-12-19
EP4264413A1 (en) 2023-10-25
US20220188120A1 (en) 2022-06-16
JP2023552789A (ja) 2023-12-19

Similar Documents

Publication Publication Date Title
JP5711853B2 (ja) 異種コアの自動カーネル移行
US9424038B2 (en) Compiler-controlled region scheduling for SIMD execution of threads
US9317296B2 (en) High level software execution mask override
US11347486B2 (en) Compiler-initiated tile replacement to enable hardware acceleration resources
WO2023173642A1 (zh) 指令调度的方法、处理电路和电子设备
US9996494B2 (en) Asynchronous mapping of hot-plugged device associated with virtual machine
TW202109286A (zh) 純函數語言神經網路加速器系統及結構
TW201516864A (zh) 多執行緒圖形處理單元管線
US11409840B2 (en) Dynamically adaptable arrays for vector and matrix operations
CN105446733B (zh) 数据处理系统、用于数据处理系统的方法及可读存储介质
US11481250B2 (en) Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values
KR20240025019A (ko) 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공
WO2023077875A1 (zh) 用于并行执行核心程序的方法和装置
US11847462B2 (en) Software-based instruction scoreboard for arithmetic logic units
US10664285B1 (en) Flexibly deriving intended thread data exchange patterns
US20240168719A1 (en) Dual vector arithmetic logic unit
Wang et al. Central Processing Unit
US11630667B2 (en) Dedicated vector sub-processor system
US20230097115A1 (en) Garbage collecting wavefront
US20210064366A1 (en) Accumulators for behavioral characteristics of waves