KR101079001B1 - 스레드 및 스레드 종속성 관리 방법 및 장치 - Google Patents

스레드 및 스레드 종속성 관리 방법 및 장치 Download PDF

Info

Publication number
KR101079001B1
KR101079001B1 KR1020090058786A KR20090058786A KR101079001B1 KR 101079001 B1 KR101079001 B1 KR 101079001B1 KR 1020090058786 A KR1020090058786 A KR 1020090058786A KR 20090058786 A KR20090058786 A KR 20090058786A KR 101079001 B1 KR101079001 B1 KR 101079001B1
Authority
KR
South Korea
Prior art keywords
thread
threads
scoreboard
execution
dependencies
Prior art date
Application number
KR1020090058786A
Other languages
English (en)
Other versions
KR20100003238A (ko
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 KR20100003238A publication Critical patent/KR20100003238A/ko
Application granted granted Critical
Publication of KR101079001B1 publication Critical patent/KR101079001B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Abstract

비디오 프로세서를 위한 스코어보드는 아직 실행 완료되지 않은 디스패치된 스레드들만을 추적할 수 있다. 제 1 스레드는 자체적으로 제 1 스레드의 실행 전에 실행되어야만 하는 제 2 스레드의 실행을 위해 스누핑할 수 있다. 스레드 실행은, 실행이 제 1 스레드의 실행에 종속하는 제 2 스레드가 상기 제 1 스레드 이후에만 실행될 수 있다는 규칙에만 적용된다면 자유롭게 재순서화될 수 있다.

Description

스레드 및 스레드 종속성 관리 방법 및 장치{MANAGING ACTIVE THREAD DEPENDENCIES IN GRAPHICS PROCESSING}
본 발명은 전반적으로 그래픽 프로세싱에 관한 것이며, 구체적으로 그래픽 프로세싱의 과정에서의 정보 디코딩에 관한 것이다.
프로세서-기반 시스템으로 전송되는 데이터의 대역폭을 감소시키기 위해, 정보는 정보를 압축하는 방식으로 인코딩될 수 있다. 이 정보가 수신 프로세서-기반 시스템에 도달하면 디코딩되거나 압축 해제되어야 한다.
통상적으로, 많은 실행 유닛을 갖는 시스템에서, 한 스레드의 실행이 다른 스레드의 실행에 종속하는 경우 스레드 종속성을 추적하기 위해 소프트웨어가 사용될 수 있다. 다수의 스레드가 존재하고 일부 스레드는 다른 것들 이전에 실행되어야 하는 경우에 이들 종속성이 고려되어야 하므로, 스레드 종속성은 매우 중요하다. 그러나, 스레드의 수가 많고 종속성의 수가 많으면, 모든 스레드 및 모든 종속성의 상태를 유지하는 것이 번거롭다.
비디오 프로세서를 위한 스코어보드는 아직 실행 완료되지 않은 디스패치된 스레드들만을 추적할 수 있다. 제 1 스레드는 자체적으로 제 1 스레드의 실행 전에 실행되어야만 하는 제 2 스레드의 실행을 위해 스누핑할 수 있다. 스레드 실행은, 실행이 제 1 스레드의 실행에 종속하는 제 2 스레드가 상기 제 1 스레드 이후에만 실행될 수 있다는 규칙에만 적용된다면 자유롭게 재순서화될 수 있다.
컴퓨터 시스템(130)은, 도 1에 도시된 바와 같이, 하드 드라이브(134) 및 제거 가능한 매체(136)를 포함할 수 있는데, 이들은 버스(104)에 의해 칩셋 코어 로직(110)으로 연결된다. 코어 로직은 일 실시예에서 (버스(105)를 통해) 그래픽 프 로세서(112) 및 메인 또는 호스트 프로세서(100)로 연결될 수 있다. 그래픽 프로세서(112) 또한 버스(106)에 의해 프레임 버퍼(114)로 연결될 수 있다. 프레임 버터(114)는 버스(107)에 의해 디스플레이 스크린(118)에 연결되어, 버스(108)에 의해 키보드 또는 마우스(120)와 같은 종래 구성요소에 연결될 수 있다.
소프트웨어 구현의 경우에, 관련 코드가 메인 메모리(132)를 포함하는 임의의 적합한 반도체, 자기 또는 광 메모리에 저장될 수 있다. 따라서, 일 실시예에서, 코드(139)는 메인 메모리(132)와 같은 머신 판독 가능한 매체에 저장되어, 프로세서(100) 또는 그래픽 프로세서(112)와 같은 프로세서에 의해 실행된다.
도 2를 참조하면, 그래픽 코드 로직(110)은 그래픽 파이프라인을 포함할 수 있다. 그래픽 파이프라인은 코맨드 스트리머(10), 비디오 전단부(front-end)(12) 및 스레드 디스패처(a thread dispatcher; 18)에 연결되는 스레드 스포너(14)와 다른 구성요소를 포함할 수 있다.
그래픽 코어 논리(110)는 그래픽 프로세서(112) 또는 메인 프로세서(100)에 의해 실행되는 구동기 또는 다른 소프트웨어로부터 코맨드 스트리머(10)를 통해 입력을 수신할 수 있다. 통상적으로, 구동기는 그래픽 프로세서(112)의 다수의 실행 유닛(16)에 의해 실행되어야 하는 작업을 제공한다. 실행되어야 하는 작업은 스레드 디스패처(18)에 의해 디스패치된다. 스레드 스포너(14)는 작업을 생성한 후 스레드가 실행 유닛(16)에 의해 실행된다.
일 실시예에서, 코맨드 스포너(10)는 호스트 또는 메인 프로세서(100)로부터 발신되는 스레드의 생성을 제어하는 코맨드를 페치(fetching)하는 직접 메모리 액 세스 엔진일 수 있다. 비디오 전단부(12)는 비디오 프로세싱 기능을 포함한다. 스레드 스포너(thread spawner; 14)는 실행 유닛(16)을 포함할 수 있는 호스트 및 그래픽 프로세서(112)로부터 발신되는 스레드를 생성하고 중재한다. 스레드 디스패처(16)는 스레드 생성 요청을 중재한다.
도 3을 참조하면, 스레드 스포너(14)는 비디오 전단부(12)로부터 루트 스레드 요청을 수신하는 루트 스레드 요청 큐(20)를 포함한다. 루트 스레드는 후속 자식 스레드를 생성할 수 있는 스레드이다. 스레드 요청은 루트 스레드 요청 큐(20)에 저장된다. 실행 유닛(16)에서 실행되는 다른 스레드에 의해 생성되는 임의의 스레드를 자식 스레드라 부른다. 자식 스레드는 추가 스레드를 생성할 수 있으며, 모두가 비디오 전단부(12) 경로를 통해 요청된 루트의 트리 하에 있다.
스레드 스포너(14)는 디스패치를 위해 준비된 루트 스레드를 얻기 위해 필요한 정보를 저장하고 디스패칭된 스레드를 폐기될 때까지 추적한다. 스레드 스포너(14)는 루트와 자식 스레드 사이를 중재한다. 스레드 요청 큐(20)는 인터스레드 종속성 및 루트 스레드의 디스패치를 관리하는 스코어보드(22)를 제공한다. 스포닝된 스레드 요청 큐(32)는 루트 스레드로부터 스포닝된 스레드를 요청한다.
스코어보드(22)로부터의 출력은 버퍼(24)로 진행하고 스포닝된 스레드 요청 큐(32)로부터의 출력은 버퍼(34)로 진행한다. 2개의 버퍼(24 및 34)는 버퍼(24와 34) 사이의 화살표 A로 표시된 바와 같이 동기화된다. 버퍼(24)의 출력은 루트 스레드이고 버퍼(34)의 출력은 자식 스레드이다. 이들 스레드는 스레드 디스패처(18)로의 전송을 위해 동기화 멀티플렉서(26)에 의해 동기화된다.
스코어보드(22)는 스레드 사이의 공간 종속성을 설명한다. 도 4는 2 개의 상이한 프레임(Z 및 Z+A)의 내부 및 사이의 공간 종속성의 예를 도시하는 데 사용될 수 있다. 프레임(Z)에서, 흥미있는 매크로블록은 프레임 내의 다른 매크로블록 전부에 관하여 좌표(X,Y)를 가질 수 있는데, 여기서 X과 Y는 행 및 열 좌표를 부여한다. 이미지의 원점(0,0)이 왼쪽 상부 코너에 있다고 가정하면, 매크로블록(X,Y)의 바로 위의 매크로블록은 (X,Y-1)이고, 매크로블록(X,Y)의 좌측에 바로 인접하는 매크로블록은 (X-1,Y)이며, 기타의 경우도 있다. 주어진 매크로블록을 디코딩하기 위해, 이웃(X-1,Y), (X-1,Y-1) 및 (X+1,Y-1)과 같은 이웃으로부터의 정보를 디코딩하는 것이 필요할 수 있다.
이들 종속성은 스코어보드(22)에 의해 추적될 수 있다. 스코어보드(22)는 근본적으로 실행 유닛으로 스레드 스포너(spawner)에 의해 디스패칭되는 프로세스에서 흥미있는 매크로블록 -이 경우에 매크로블록(X,Y)- 에 관하여 이들 종속성을 설명한다. 따라서, 만일 매크로블록(X,Y)이 매크로블록(X,Y+1)에 종속하면, 매크로블록(X,Y)과 Y 방향으로 +1의 매크로블록 종속성 사이에 델타가 존재한다. 이는 X가 제 1 좌표이고, Y가 제 2 좌표이며, Z가 제 3 좌표인 3 좌표 시스템에 의해 지정될 수 있다. 따라서, 이러한 종속성은 매크로블록(X,Y)에 대해 (0,1,0)의 델타에 의해 지정될 수 있다. 임의의 매크로블록에 대해 다수의 종속성이 존재할 수 있으므로, 다수의 델타가 체크된다.
Z 방향은 2 개의 상이한 프레임 사이의 종속성을 조정한다. 예컨대, 프레임(Z) 내의 매크로블록(X,Y)이 프레임(Z+A) 내의 매크로블록(X,Y)에 종속하면, Z 방향으로 종속성이 존재할 것이다. 이 종속성은 (0,0,A)로도 지정될 수 있다.
Z는 서로에 종속하지 않는 동일한 프레임 상에 상이한 로직 프로세스를 나타내는 데에도 사용될 수 있다. 만일 그 프로세스가 A와 B이면, Z는 모든 A 동작에 대해 0으로 설정될 수 있고, Z는 모든 B 동작에 대해 1로 설정될 수 있다. 이는 모든 Z 델타 값을 0으로 유지함으로써 하나의 물리적 스코어보드가 다수의 로직 스코어보드를 관리하게 한다. 따라서, (1) 종속성을 가지고, (2) 종속성 없이, (3) 상이한 프레임을 통해, 또는 (4) 동일한 프레임을 가진 상이한 동작에 대해 매크로블록을 관리하는 데 Z가 사용될 수 있다.
따라서, 스코어보드(22)의 보다 상세한 동작을 도시하는 도 5를 참조하면, 현재 스레드에 대한 고유한 스레드 식별자(TDID)를 획득하고 스코어보드 레지스터(68)에 마킹하는 블록(50)에 의해 비디오 전단부(12)로부터의 스레드 요청이 처리된다. 스코어보드 레지스터(68)는 좌표(X,Y,Z)마다의 열 및 넘버링된 스레드마다의 또는 스레드 식별자마다의 행을 포함한다. 각각의 활성 스레드는 스레드 식별자(식별자 1 내지 N을 가짐)를 수신하여 스코어보드 레지스터(68)의 행을 구성한다.
스코어보드를 마킹하는 것은 단순히 스레드가 디스패칭될 때마다 스코어보드 레지스터(68)가 스레드가 인프라이트(in flight) 임을 알아야 함을 의미한다. 우선 인코더(74)는 다음 이용가능한 스레드 식별자가 레지스터(66) 내의 유효 비트에서 보고 있는 것이 무엇인지를 결정한다. 레지스터(66)는 사실상 어떤 비트가 스코어보드 레지스터(68) 내에서 유효한지를 나타낸다. 따라서, 블록(50)에서 다음 유효 비트가 다음 스레드에 할당되고, 이어서 그 스레드는 "마킹"된 것으로 간주한다. 마킹의 결과로서, 스레드 식별자에 대응하는 스코어보드 레지스터(68) 내에 개체가 구성되며, 개체는 적합한 행에 배치되고, 행은 1 내지 N으로 넘버링된다. 마킹된 스레드는 X, Y 및 Z 좌표를 제공하고, 차례로 스레드는 행 번호로도 간주될 수 있는 스레드 식별자를 구비한다. 스레드는 실행 유닛(16)에서 스레드 식별자가 실행의 완료를 통해 폐기될 때 그 스레드 식별자를 버린다.
일반적으로, 모든 스레드가 제공된 스레드 식별자인 동안에, 스코어보드 내의 프로세싱은 종속성이 없는 독립 스레드에 덜 필요하다. 스레드는 블록(50)에서 위쪽으로 그리고 그 위에 중재기(56)의 상위 포트까지 전달될 수 있다.
종속 스레드는 선입선출(FIFO) 버퍼(52)에 수집된다. 종속 스레드의 실행은 다른 잠재적으로 활성인 (잠재적으로 실행되지 않는) 스레드의 실행에 종속한다. 이는 다수의 종속 스레드가 블록(50)을 통해 이동되어 제거되게 하며, 그 결과 미정의 종속성이 종속 스레드 FIFO 버퍼(52)를 스톨(stall)할 때 종속 스레드가 신속하게 처리되고 중재기(56)까지 차례로 전달될 수 있음을 보장한다. 중재기(56)는 종속 스레드가 스톨될 때 종속 스레드를 본다.
이어서 종속 스레드가 선입선출 버퍼(52)로부터 순차적으로 처리된다. 블록(72)에서 그 종속성이 식별되고 어떤 경우에 스레드 종속성 레지스터(30)는 그 종속성으로 마킹될 수 있다. 블록(54)은 블록(72)에 종속성 및 그 종속성의 X, Y 및 Z 좌표를 제공한다. 일 실시예에서 만일 양 유형의 스레드가 디스패치할 준비가 되면, 그 종속 스레드는 우선순위가 높은 것으로 주어질 수 있다. 블록(72)은 전술한 바와 같이 스레드의 좌표 및 상대적인 좌표로부터 종속성이 존재하는 매크로블록 또는 프레임으로 델타를 전개한다.
"스톨링 모드(stalling mode)"라 불리우는 스코어보드(22)의 동작의 일 모드에서, 스코어보드(22)는 다음 X, Y 및 Z 좌표 또는 델타를 생성하거나 또는 디스패치에 대한 현재의 스레드를 제거하기 전에 매칭에 대해 대기한다. 따라서, 스톨링 모드에서, 종속하는 모든 스레드가 폐기(즉, 실행되고 더 이상이 활성화되지 않음)될 때까지 스레드는 개시되지 않는다. 따라서, 스레드 FIFO 버퍼(52)는 스톨링 모드가 발생하고 버퍼(52)가 가득 할 때 블록(52) 아래의 화살표로 표시된 바와 같이, 비디오 전단부(12)를 또한 통지한다.
중재기(56)는 실행 유닛(16)에 의해 실행될 독립적인 또는 종속적인 스레드를 선택하여, 이를 스레드 페이로드(58)를 통해 전달한다. 실행 유닛(16)에 의해 실행된 스레드는 스코어보드 레지스터(68) 및 임의의 매칭 스레드 레지스터(30)로부터 스레드 식별자를 제거하는 블록(60)으로 다시 들어간다. 비교기(62)는 매칭 스레드 레지스터(30)을 찾도록 돕는다.
따라서, 일단 스레드가 실행되면, 실행이 해당 스레드의 실행에 종속하는 임의의 스레드는 통지될 필요가 있다. 특히 스톨링 모드에서, 종속적인 임의의 스레드가 실행될 때까지 스레드는 디스패치될 수 없다. 비교기(62)는 스레드 종속성을 체크하는 동안 폐기된 임의의 스레드에 대한 종속성을 제거하기 위한 스레드 종속성 레지스터(30)를 리세트하도록 사용될 수 있다.
그 다음에 내용 주소화 기억장치(content addressable memory : CAM)는 디스 패치되기를 원하는 스레드가 종속하는 레지스터(68) 내에 의의의 스레드가 존재하는지 여부를 판정한다. 스코어보드 레지스터(68)의 임의의 로우 내에 엔트리가 존재하지 않으면, 현재 실행 중인 이러한 종속적인 스레드가 존재하지 않음을 추론할 수 있고, 스레드는 디스패치되도록 준비된 것으로 릴리스(release)될 수 있고 블록(54)으로부터 중재기(56)로 전달될 수 있다. 스톨링 모드에서 종속성이 존재하면, 스레드는 이들 종속성이 클리어되기를 대기하도록 강제될 수 있다.
스톨링 모드보다 견실한, 브로드캐스팅 모드(broadcasting mode)라 불리우는 스코어보드(22)의 동작의 다른 모드에 따르면, 디스패치될 소정의 스레드의 종속성이 결정되고, 이들 종속성의 스레드 식별자가 획득되어 스레드 종속성 레지스터(30)로 주입되고, 그 다음에 이들 종속성이 여전히 존재하고 계류 중이라 하더라도, 스레드가 디스패치된다.
실제로, 스레드는 실행 유닛(16)으로 디스패치되고 그 자신의 종속성을 관리하도록 요구된다. 스레드는 실행 유닛(16) 및 스코어보드 블록(60) 각각에 대해 브로드캐스팅되는 스레드 TDID를 폐기하는 스누핑에 의해 이를 수행한다. 일단 종속되는 모든 스레드가 제거된 것으로 스레드가 판정하면, 실행 유닛(16)에서 유휴에 있는 스레드는 해당 실행 유닛(16)에서 실행하도록 진행될 수 있다.
일 실시예에서, 각각의 스레드는 델타로 각각 표시된 8개 한도의 종속성을 표시하도록 8개의 비트를 사용한다. 8개의 델타는 연속적인 스레드 종속성 레지스터(30) 내로 사전 정의된 순서로 로드된다. 그 다음에 스레드는 그 8개의 비트에 근거하여, 대상이 되는 종속성이 폐기되는지를 판정하기 위해 어느 종속성 레지스 터가 체크되어야 하는지를 안다.
스톨링 모드 상의 차이는 브로드캐스팅 모드에서, 스레드가 기본적으로 스코어보드에 의해 개시되고 그 다음에 스레드는 스레드 정보를 폐기하는 관찰에 의해, 그 자싱에 대해 실행을 개시할 때를 효과적으로 제어한다는 것이다. 브로드캐스팅 모드에서, 현재의 스레드는 계류 중인 종속성을 갖는 중재기(56)로부터 디스패치되며 스레드 종속성 레지스터(30)의 추가적인 페이로드는 계류 중인 종속성 스레드의 스레드 식별자를 포함한다.
스코어보드(22)에 통지하는 것에 부가하여, 소정의 스레드가 실행 유닛(16)에 의해 실행을 통해 폐기하는 경우, 모든 실행 유닛(16)으로 그 스레드 식별자를 브로드캐스팅한다. 그 다음에 디스패치된 스레드는 일단 자신에 의해 디스패치된 모든 스레드 종속성 레지스터에 대해 스레드 식별자를 수신하면 실행을 개시한다.
순차적인 모드로 불리우는 동작의 또 다른 모드에서, 스코어보드(22)는 현재의 스레드에 바로 선행하여 디스패치된 스레드의 스레드 식별자에 종속하여 각각의 스레드를 마크한다.
본 발명의 몇몇 실시예에 따르면, 스코어보드(22)는 하드웨어로 구현될 수 있으며, 이는 성능 및 속도를 향상시킬 수 있다. 하드웨어 스코어보드(22)는 몇몇 실시예에서, 순서와 상관없이 스레드를 보다 효율적으로 디스패치할 수 있어, 성능 향상을 위한 워크로드의 재배열을 허용한다. 몇몇 실시예에서, 스코어보드(22)가 강화하는 유일한 규칙은 그 실행이 스레드 B의 실행에 종속하는 스레드 A가 스코어보드(22)에 스레드 B가 도달한 후에 스코어보드(22)에 도달해야 한다는 것이다. 스레드 A가 스레드 B보다 먼저 도달하면, 스코어보드는 스레드 B를 관측하지 않아 스레드 B가 폐기된 것으로 가정할 것이므로, 스레드 A를 부정확하게 제거한다. 그러나, 예를 들어, 성능을 향상시키기 위해, 임의의 다른 재배열이 행해질 수 있다. 일반적으로, 몇몇 실시예에서, 드라이버는 규칙이 항상 추종되는 것으로 확신한다.
몇몇 실시예에서, 실행되어야 하는 스레드의 수는 스코어보드(22) 내의 활성 스레드의 수를 훨씬 초과해야 한다. 스코어보드(22)가 활성 스레드(즉, 아직 폐기되지 않은 스레드)를 단지 추적하도록 함으로써, 몇몇 실시예에서는 스코어보드의 크기 및 효율이 크게 향상될 수 있다.
도 1, 도 2, 도 3 및 도 5에 도시된 블럭은 하드웨어 또는 소프트웨어 컴포넌트를 구성할 수 있다. 소프트웨어 컴포넌트의 경우, 도면들은 반도체 집적 회로 메모리, 광 저장 장치 또는 자기 저장 장치와 같은 컴퓨터 판독가능 매체에 저장될 수 있는 인스트럭션들의 시퀀스를 나타낼 수 있다. 그러한 경우, 인스트럭션들은 상기 저장장치로부터의 인스트럭션들을 검색하고 그들을 실행하는 컴퓨터 또는 프로세서 기반 시스템에 의해 실행가능하다. 일부의 경우, 인스트럭션들은 적절한 저장 매체 내에 저장될 수 있는 펌웨어일 수 있다.
본 명세서에 기술된 그래픽 처리 기법은 다양한 하드웨어 아키텍처로 구현될 수 있다. 가령, 그래픽 기능은 칩셋 내에 통합될 수 있다. 대안으로, 이산 그래픽 프로세서가 사용될 수도 있다. 다른 실시예로서, 그래픽 기능은 멀티코어 프로세서를 포함한 범용 프로세서에 의해 구현될 수 있다.
본 발명이 제한된 개수의 실시예와 관련하여 기술되었지만, 당업자라면 다양 한 변형 및 수정을 이해할 것이다. 첨부된 특허청구범위는 본 발명의 진정한 사상과 영역 내에서의 모든 변형 및 수정을 포함한다.
도 1은 본 발명의 일 실시예에 따른 시스템 도면이다.
도 2는 본 발명의 일 실시예의 개략적인 도면이다.
도 3은 일 실시예에 따른 도 1의 스레드 스포너(thread spawner)를 도시하는 블록이다.
도 4는 2개의 상이한 프레임에서의 매크로블록의 도면이다.
도 5는 본 발명의 일 실시예에 따른 도 2의 스코어보드 레지스터(22)의 도면이다.
도 5는 본 발명의 일 실시예에 따른 시스템 도면이다.
도면의 주요부분에 대한 부호의 설명
100 : 메인 프로세서 110 : 칩셋 코어 로직
112 : 그래픽 프로세서 114 : 프레임 버퍼
118 : 디스플레이 스크린 120 : 키보드/마우스

Claims (15)

  1. 스코어보드 내에서, 복수의 실행 유닛에 의한 스레드들의 실행을 위해 스레드들을 관리하는 단계와,
    아직 실행이 완료되지 않은, 상기 스코어보드에 의해 수신되는 스레드들을 추적하는 단계와,
    상기 스코어보드로부터 상기 실행 유닛에 의해 실행된 스레드들을 제거하는 단계를 포함하되,
    상기 관리하는 단계, 추적하는 단계 및 제거하는 단계는 상기 스레드들뿐만 아니라 상기 스레드들의 종속성(dependencies)에도 적용되는
    스레드 및 스레드 종속성 관리 방법.
  2. 제 1 항에 있어서,
    다른 스레드의 완료에 종속하는 하나의 스레드가 상기 다른 스레드가 상기 스코어보드에 도달한 후에 상기 스코어보드에 도달해야 하는 한, 스레드 실행의 순서가 임의의 순서로 변경되도록 인에이블하는 단계를 포함하는
    스레드 및 스레드 종속성 관리 방법.
  3. 제 1 항에 있어서,
    실행을 위한 스레드를 상기 실행을 위한 스레드의 종속성 전부의 실행이 완료되기 전에 발행(launching)하는 단계와, 상기 실행을 위한 스레드가 자신의 종속성을 관리할 수 있도록 인에이블하는 단계와, 하나의 실행 유닛 내의 스레드의 실행의 완료를 다른 실행 유닛으로 브로드캐스팅하는 단계를 포함하는
    스레드 및 스레드 종속성 관리 방법.
  4. 제 1 항에 있어서,
    인접 매크로블럭을 위한 스레드의 실행에 대하여 하나의 매크로블럭을 위한 스레드의 종속성을 결정하는 것과 상이한 프레임 내의 스레드에 대하여 하나의 스레드의 종속성을 결정하는 것을 포함하는 공간 종속성을 결정하는 단계를 포함하는
    스레드 및 스레드 종속성 관리 방법.
  5. 제 4 항에 있어서,
    동일한 프레임 상에서 공간 종속성 및 상이한 논리 프로세스를 표시하도록 좌표를 사용하는 단계를 포함하는
    스레드 및 스레드 종속성 관리 방법.
  6. 제 1 항에 있어서,
    동일한 프레임 내의 매크로블럭들의 좌표들과 상이한 프레임들 내의 매크로블럭들의 좌표들 간의 델타(delta)를 표시함으로써 두 개의 스레드들 간의 종속성을 표시하는 단계를 포함하는
    스레드 및 스레드 종속성 관리 방법.
  7. 비디오 전단부와,
    상기 비디오 전단부에 연결된 스코어보드와,
    스레드 디스패처에 연결된 스레드 응답기를 포함하되,
    상기 스코어보드는 복수의 실행 유닛에 의한 스레드들의 실행을 위해 스레드들을 관리하고, 아직 실행이 완료되지 않은, 상기 스코어보드에 의해 수신된 스레드들을 추적하며, 상기 스코어보드로부터 상기 실행 유닛에 의해 실행된 스레드들을 제거하고,
    상기 관리, 추적 및 제거는 상기 스레드들뿐만 아니라 상기 스레드들의 종속성에도 적용되는
    스레드 및 스레드 종속성 관리 장치.
  8. 제 7 항에 있어서,
    상기 스코어보드에 연결된 실행 유닛을 포함하는
    스레드 및 스레드 종속성 관리 장치.
  9. 제 7 항에 있어서,
    상기 스코어보드는 스레드 식별자에 의해 스레드들을 리스트하고 각각의 스레드에 대해 관련된 매크로블럭의 좌표를 제공하는 스코어보드 레지스터를 포함하며, 상기 스코어보드는 아웃스탠딩 스레드 종속성(outstanding thread dependencies)을 저장하고 종속성이 제거되기 전에 스레드를 발행하도록 하는 레지스터를 포함하는
    스레드 및 스레드 종속성 관리 장치.
  10. 제 9 항에 있어서,
    상기 스코어보드는 실행된 스레드를 위한 스레드 식별자를 수신하며, 실행된 스레드의 스레드 식별자를 폐기하고, 종속성 실행을 대기하는 스레드가 실행된 스레드의 스레드 식별자를 스누핑(snooping)하도록 인에이블하는
    스레드 및 스레드 종속성 관리 장치.
  11. 제 10 항에 있어서,
    상기 스코어보드는, 다른 스레드에 실행이 종속하는 하나의 스레드가 상기 다른 스레드가 상기 스코어보드에 도달한 후에 상기 스코어보드에 도달하는 한 임의의 재순서화를 인에이블하는
    스레드 및 스레드 종속성 관리 장치.
  12. 제 7 항에 있어서,
    상기 스코어보드는 다른 스레드들에 종속하는 스레드들에 앞서 다른 스레드들에 종속하지 않는 스레드들을 처리하며, 상기 스코어보드는 종속성을 저장함으로써 스레드의 종속성을 표시하는 스레드 종속성 레지스터를 포함하는
    스레드 및 스레드 종속성 관리 장치.
  13. 제 7 항에 있어서,
    상기 스코어보드는 복수의 논리적 스코어보드를 관리하는
    스레드 및 스레드 종속성 관리 장치.
  14. 제 7 항에 있어서,
    상기 비디오 전단부에 연결된 스레드 스포너(thread spawner)―상기 스레드 스포너는 상기 스코어보드를 포함하며, 상기 스레드 디스패처는 상기 스레드 스포너에 연결됨―와,
    상기 스레드 디스패처에 연결된 다수의 실행 유닛과,
    상기 장치에 연결된 하드 드라이브를 더 포함하는
    스레드 및 스레드 종속성 관리 장치.
  15. 제 14 항에 있어서,
    상기 스코어보드는 하나의 실행 유닛에 의한 스레드 실행의 완료를 다수의 다른 실행 유닛으로 브로드캐스팅하고, 실행된 스레드의 스레드 식별자를 수신하고, 실행된 스레드의 스레드 식별자를 폐기하고, 종속성의 실행을 대기하는 스레드가 실행된 스레드의 스레드 식별자를 스누핑하도록 인에이블하는
    스레드 및 스레드 종속성 관리 장치.
KR1020090058786A 2008-06-30 2009-06-30 스레드 및 스레드 종속성 관리 방법 및 장치 KR101079001B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/215,850 US8933953B2 (en) 2008-06-30 2008-06-30 Managing active thread dependencies in graphics processing
US12/215,850 2008-06-30

Publications (2)

Publication Number Publication Date
KR20100003238A KR20100003238A (ko) 2010-01-07
KR101079001B1 true KR101079001B1 (ko) 2011-11-01

Family

ID=41002930

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090058786A KR101079001B1 (ko) 2008-06-30 2009-06-30 스레드 및 스레드 종속성 관리 방법 및 장치

Country Status (4)

Country Link
US (1) US8933953B2 (ko)
EP (1) EP2141586B1 (ko)
KR (1) KR101079001B1 (ko)
CN (2) CN101620527A (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8635621B2 (en) * 2008-08-22 2014-01-21 International Business Machines Corporation Method and apparatus to implement software to hardware thread priority
US8203984B2 (en) 2008-12-19 2012-06-19 Intel Corporation Power management for wireless networks
EP2534643A4 (en) * 2010-02-11 2016-01-06 Nokia Technologies Oy METHOD AND APPARATUS FOR PROVIDING MULTIFIL VIDEO DECODING
US10241799B2 (en) * 2010-07-16 2019-03-26 Qualcomm Incorporated Out-of-order command execution with sliding windows to maintain completion statuses
US9633407B2 (en) 2011-07-29 2017-04-25 Intel Corporation CPU/GPU synchronization mechanism
US9984430B2 (en) * 2013-04-15 2018-05-29 Intel Corporation Ordering threads as groups in a multi-threaded, multi-core graphics compute system
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9589311B2 (en) * 2013-12-18 2017-03-07 Intel Corporation Independent thread saturation of graphics processing units
US9996386B2 (en) * 2014-07-23 2018-06-12 Intel Corporation Mid-thread pre-emption with software assisted context switch
US9519944B2 (en) 2014-09-02 2016-12-13 Apple Inc. Pipeline dependency resolution
US9824414B2 (en) * 2014-12-09 2017-11-21 Intel Corporation Thread dispatching for graphics processors
US9952901B2 (en) * 2014-12-09 2018-04-24 Intel Corporation Power efficient hybrid scoreboard method
US9916178B2 (en) * 2015-09-25 2018-03-13 Intel Corporation Technologies for integrated thread scheduling
US10339295B2 (en) 2016-07-28 2019-07-02 Microsoft Technology Licensing, Llc Tracking work between system entities
US11360808B2 (en) * 2017-04-09 2022-06-14 Intel Corporation Efficient thread group scheduling
GB2567436B (en) 2017-10-10 2019-10-02 Imagination Tech Ltd Geometry to tiling arbiter for tile-based rendering system
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
CN109308218A (zh) * 2018-08-22 2019-02-05 安徽慧视金瞳科技有限公司 一种多点同时绘制的匹配算法
US11119820B2 (en) * 2019-03-15 2021-09-14 Intel Corporation Local memory sharing between kernels
CN110162387A (zh) * 2019-04-09 2019-08-23 口口相传(北京)网络技术有限公司 线程调度方法、装置、计算机设备及计算机可读存储介质
US20220414816A1 (en) * 2021-06-24 2022-12-29 Intel Corporation Dynamic dependency scoreboard for overlapping pixels of primitives

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100388947B1 (ko) 1997-12-16 2003-06-25 인텔 코오퍼레이션 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
WO2008007038A1 (en) * 2006-07-11 2008-01-17 Arm Limited Data dependency scoreboarding
WO2008027823A1 (en) 2006-08-29 2008-03-06 Qualcomm Incorporated Dependent instruction thread scheduling

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3796124B2 (ja) * 2001-03-07 2006-07-12 株式会社ルネサステクノロジ スレッド間優先度可変プロセッサ
US7752423B2 (en) * 2001-06-28 2010-07-06 Intel Corporation Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
US9323571B2 (en) * 2004-02-06 2016-04-26 Intel Corporation Methods for reducing energy consumption of buffered applications using simultaneous multi-threading processor
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US20060256854A1 (en) * 2005-05-16 2006-11-16 Hong Jiang Parallel execution of media encoding using multi-threaded single instruction multiple data processing
US20070030280A1 (en) * 2005-08-08 2007-02-08 Via Technologies, Inc. Global spreader and method for a parallel graphics processor
US7434032B1 (en) * 2005-12-13 2008-10-07 Nvidia Corporation Tracking register usage during multithreaded processing using a scoreboard having separate memory regions and storing sequential register size indicators

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100388947B1 (ko) 1997-12-16 2003-06-25 인텔 코오퍼레이션 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
WO2008007038A1 (en) * 2006-07-11 2008-01-17 Arm Limited Data dependency scoreboarding
WO2008027823A1 (en) 2006-08-29 2008-03-06 Qualcomm Incorporated Dependent instruction thread scheduling

Also Published As

Publication number Publication date
CN106055310B (zh) 2020-04-28
EP2141586B1 (en) 2013-08-28
CN106055310A (zh) 2016-10-26
US8933953B2 (en) 2015-01-13
CN101620527A (zh) 2010-01-06
KR20100003238A (ko) 2010-01-07
US20090327662A1 (en) 2009-12-31
EP2141586A1 (en) 2010-01-06

Similar Documents

Publication Publication Date Title
KR101079001B1 (ko) 스레드 및 스레드 종속성 관리 방법 및 장치
EP2593862B1 (en) Out-of-order command execution in a multimedia processor
US8407454B2 (en) Processing long-latency instructions in a pipelined processor
US9208108B2 (en) Method and system for improved flash controller commands selection
CN1294484C (zh) 利用重新调度的重放队列中断处理器中的重放依赖关系循环
US7526634B1 (en) Counter-based delay of dependent thread group execution
JP5112449B2 (ja) スレッドをキューに供給する方法及び装置
US8719553B2 (en) Method for re-circulating a fragment through a rendering pipeline
US20070091102A1 (en) GPU Pipeline Multiple Level Synchronization Controller Processor and Method
US20110004881A1 (en) Look-ahead task management
KR20090045944A (ko) 종속 명령 스레드 스케줄링
US10861125B2 (en) Preparing and executing command streams in data processing systems
JP2007200288A (ja) 実行スレッドをグループ化するためのシステム及び方法
EP3140730B1 (en) Detecting data dependencies of instructions associated with threads in a simultaneous multithreading scheme
US11755325B2 (en) Instruction handling for accumulation of register results in a microprocessor
US9645637B2 (en) Managing a free list of resources to decrease control complexity and reduce power consumption
US8803900B2 (en) Synchronization with semaphores in a multi-engine GPU
US8441487B1 (en) Bandwidth compression for shader engine store operations
CN116635829A (zh) 用于高吞吐量和低开销内核启动的压缩命令分组
US20040128476A1 (en) Scheme to simplify instruction buffer logic supporting multiple strands
TWI428833B (zh) 多執行緒處理器及其指令執行及同步方法及其電腦程式產品
US11561794B2 (en) Evicting and restoring information using a single port of a logical register mapper and history buffer in a microprocessor comprising multiple main register file entries mapped to one accumulator register file entry
US20040128488A1 (en) Strand switching algorithm to avoid strand starvation
CN116737374A (zh) 基于多线程的基准码识别方法、装置、计算机设备及介质
CN117931294A (zh) 指令处理设备和处理系统

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140930

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151002

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160929

Year of fee payment: 6