KR20140081206A - 컴퓨터 시스템 - Google Patents

컴퓨터 시스템 Download PDF

Info

Publication number
KR20140081206A
KR20140081206A KR1020120150725A KR20120150725A KR20140081206A KR 20140081206 A KR20140081206 A KR 20140081206A KR 1020120150725 A KR1020120150725 A KR 1020120150725A KR 20120150725 A KR20120150725 A KR 20120150725A KR 20140081206 A KR20140081206 A KR 20140081206A
Authority
KR
South Korea
Prior art keywords
warp
threads
instruction
combined
warps
Prior art date
Application number
KR1020120150725A
Other languages
English (en)
Other versions
KR101420592B1 (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 전남대학교산학협력단
Priority to KR1020120150725A priority Critical patent/KR101420592B1/ko
Publication of KR20140081206A publication Critical patent/KR20140081206A/ko
Application granted granted Critical
Publication of KR101420592B1 publication Critical patent/KR101420592B1/ko

Links

Images

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
    • 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
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Processing (AREA)

Abstract

본 발명은 컴퓨터 시스템에 관한 것으로, 컴퓨터 시스템에서 연산 자원의 활용률을 향상시키고, 스레드들을 실행하는 데 소요되는 시간을 절감하여 컴퓨터 시스템의 성능을 향상시키기 위한 것이다. 본 발명은 실행 준비가 완료된 워프들을 선택하고, 선택된 워프들을 결합하여 결합 워프를 인출하는 워프 스케줄러와, 결합 워프의 스레드들에 연산을 수행하는 연산 장치들을 포함하는 컴퓨터 시스템을 제공한다. 본 발명에 따르면, 컴퓨터 시스템에서 연산 자원의 활용률이 향상될 수 있다.

Description

컴퓨터 시스템{COMPUTER SYSTEM}
본 발명은 컴퓨터 시스템에 관한 것으로, 더욱 상세하게는 연산 자원 활용률이 향상된 컴퓨터 시스템에 관한 것이다.
일반적으로 컴퓨터 시스템은 CPU(Central Processing Unit)와 GPU(Graphic Processing Unit)를 포함한다. CPU는 GPU에게 작업 명령과 병렬 데이터를 넘겨주고, GPU는 작업을 수행한 결과를 CPU에게 반환한다.
이러한 GPU는 다수의 세이더코어들을 포함한다. 각 세이더코어는 동일한 코드를 수행하는 다수의 스레드들을 동시에 실행한다. 세이더코어는 하드웨어적인 연산 자원에 따라 스레드들을 실행한다.
그런데, 상기와 같은 컴퓨터 시스템에서 연산 자원의 활용률이 낮은 문제점이 있다. 이로 인하여, 컴퓨터 시스템에서 스레드들을 실행하는 데 소요되는 장시간이 소요될 수 있다. 이에 따라, 컴퓨터 시스템의 성능이 저하될 수 있다.
따라서, 본 발명의 목적은 컴퓨터 시스템의 성능을 향상시키는 데 있다. 이를 위해, 본 발명은 컴퓨터 시스템에서 연산 자원의 활용률을 향상시키기 위한 것이다. 그리고 본 발명은 컴퓨터 시스템에서 스레드들을 실행하는 데 소요되는 시간을 절감하기 위한 것이다.
상기 과제를 해결하기 위한 본 발명에 따른 컴퓨터 시스템은, 실행 준비가 완료된 워프들을 선택하고, 상기 선택된 워프들을 결합하여 결합 워프를 인출하는 워프 스케줄러와, 상기 결합 워프의 스레드들에 연산을 수행하는 연산 장치들을 포함하는 것을 특징으로 한다.
이 때 본 발명에 따른 컴퓨터 시스템에 있어서, 상기 워프 스케줄러는, 다수의 스레드들이 집단화된 스레드 그룹들을 나타내는 워프들에서 어느 하나를 선택하고, 상기 선택된 워프의 스레드들 중 적어도 어느 하나가 비활성화된 경우, 상기 워프들에서 상기 선택된 워프와 결합될 워프를 선택한다.
여기서, 본 발명에 따른 컴퓨터 시스템에 있어서, 상기 결합 워프는, 상기 선택된 워프와 상기 결합될 워프를 결합된 것이다. 그리고 본 발명에 따른 컴퓨터 시스템에 있어서, 상기 워프 스케줄러는, 라운드로빈 방식에 따라 상기 결합될 워프를 선택할 수 있다.
그리고 본 발명에 따른 컴퓨터 시스템은, 상기 워프들의 데이터가 저장된 주 레지스터 파일과, 상기 주 레지스터 파일로부터 상기 결합될 워프의 데이터가 복사되는 임시 레지스터 파일을 더 포함한다.
또한 본 발명에 따른 컴퓨터 시스템은, 상기 선택된 워프의 스레드들이 모두 활성화되었는지의 여부를 나타내는 분기 상태를 표시하는 명령어 버퍼를 더 포함한다.
여기서, 본 발명에 따른 컴퓨터 시스템에 있어서, 상기 명령어 버퍼는, 상기 선택된 워프의 스레드들이 모두 활성화된 경우, 상기 분기 상태가 F(Full)로 설정되고, 상기 선택된 워프의 스레드들 중 적어도 어느 하나가 비활성화된 경우, 상기 분기 상태가 N(Not full)로 설정된다.
게다가, 본 발명에 따른 컴퓨터 시스템에 있어서, 상기 결합될 워프는, 상기 선택된 워프와 동일한 명령어를 수행하고, 비활성화된 스레드들을 포함하며, 상기 선택된 워프의 비활성화된 스레드들의 수보다 적은 수의 활성화된 스레드들을 포함한다.
한편, 본 발명에 따른 컴퓨터 시스템에 있어서, 상기 워프 스케줄러는, 워프의 선택 알고리즘에 따라 상기 결합될 워프를 선택할 수 있다. 상기 워프의 선택 알고리즘으로 라운드로빈 방식을 사용할 수 있다. 상기 워프 스케줄러는 상기 선택된 워프의 스레드들이 모두 활성화된 경우, 상기 선택된 워프를 인출한다.
본 발명에 따른 컴퓨터 시스템에서 연산 자원의 활용률을 향상시킬 수 있다.
그리고 본 발명에 따른 컴퓨터 시스템에서 스레드들을 실행하는 데 소요되는 시간을 절감할 수 있다.
이에 따라, 컴퓨터 시스템의 성능이 향상될 수 있다.
도 1은 일반적인 GPU의 구조를 보여주는 도면이고,
도 2는 도 1에서 세이더코어의 파이프라인을 보여주는 도면이고,
도 3은 도 2에서 SIMD 파이프라인을 보여주는 도면이고,
도 4는 일반적인 워프 실행 기법을 예시적으로 보여주는 도면이고,
도 5는 일반적인 세이더코어의 구조를 보여주는 도면이고,
도 6은 본 발명의 실시예에 따른 워프 실행 기법을 예시적으로 보여주는 도면이고,
도 7은 일반적인 워프 실행 기법에서 발생되는 연산자원의 활용률을 최적화하는 경우를 보여주는 도면이고,
도 8은 본 발명의 실시예에 따라 수정된 이슈 단계의 흐름도이고,
도 9는 본 발명의 실시예에 따른 세이더코어의 구조를 보여주는 도면이고,
도 10은 일반적인 레지스터 파일구조를 보여주는 도면이고,
도 11은 본 발명의 실시예에 따른 레지스터 파일구조를 보여주는 도면이며,
도 12는 일반적인 워프 실행 기법과 본 발명의 실시예에 따른 워프 실행 기법에 따른 연산자원의 활용률을 보여주는 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 보다 상세하게 설명하고자 한다. 이 때 첨부된 도면에서 동일한 구성 요소는 가능한 동일한 부호로 나타내고 있음에 유의해야 한다. 그리고 본 발명의 요지를 흐리게 할 수 있는 공지 기능 및 구성에 대한 상세한 설명은 생략할 것이다.
도 1은 일반적인 GPU의 구조를 보여주는 도면이다.
도 1을 참조하면, 컴퓨터 시스템(100)은 CPU(Central Processing Unit; 110)와 GPU(Graphic Processing Unit; 120)를 포함한다. CPU(110)는 GPU(120)에게 작업 명령과 병렬 데이터를 넘겨주고 GPU(120)는 작업을 수행한 결과를 CPU(110)에게 반환한다. GPU(120)는 다수의 세이더코어(SHADER CORE; 130)들과 내부 연결망(INTERCONNECTION NETWORK; 140) 그리고 DRAM(150)으로 구성되어 있다. GPU(120) 내부에 존재하는 각 세이더코어(130)는 동일한 코드를 수행하는 다수의 스레드들을 동시에 실행시키며, 공유 메모리(SHARED MEM; 131) 및 텍스쳐 캐쉬(TEXTURE CACHE; 132), 상수 캐쉬(CONSTANT CACHE; 133) 그리고 L1 데이터 캐쉬(L1 DATA CACHE; 134)와 같은 지역 메모리(132, 133, 134)를 가지고 있다. 지역 메모리(132, 133, 134) 중 텍스쳐 캐쉬(132)와 상수 캐쉬(133)는 읽기 전용(read-only)이다.
세이더코어(130)에서 수행되는 스레드들의 명령어는 세이더코어(130) 내부의 연산 처리 장치(EXE UNITS; 135)에서 순차적 명령어 실행 순서(in-order) 방식으로 수행된다. 세이더코어(130)는 실행할 명령어가 선택이 되면, 상응되는 피연산자를 다수의 뱅크로 구성된 레지스터 파일(RF; Register File; 136)로부터 읽어온다. 만약, 레지스터 파일(136)에 원하는 데이터가 존재하지 않으면(miss) 세이더코어(130)는 명령어 수행을 위해 필요한 데이터를 다수의 뱅크로 구성된 지역 메모리(132, 133, 134)에 접근하여 요청한다. 불행히도 지역 메모리(132, 133, 134)에서 메모리 요구(또는 데이터 요구)가 실패(miss)할 경우, 해당 메모리 요구가 하위 레벨 캐쉬 또는 DRAM(150)으로 접근할 수 있도록 메모리 포트(MEM PORT; 137)를 통해 요청한다. 특히, DRAM(150)으로 접근되는 메모리 요구는 내부 연결망(140)을 통해 메모리 컨트롤러(MEMORY CONTROLLER; 145)에 의해 처리된다.
GPU(120)는 다수의 스레드들을 병렬적으로 수행하기 위하여 스레드들을 단일 명령어 다중 데이터(SIMD: Single Instruction Multiple Data) 구조로 집단화한다. SIMD 구조로 집단화된 스레드 그룹들을 NVIDIA에서는 워프(warp; 210)라 부른다. NVIDIA에서 명명한 워프(210)는 32개의 스레드의 집합으로 GPU(120)에서 연산을 수행하는 데 있어서 가장 기본적인 단위이다. 세이더코어(130)에서 워프(210)를 수행하는 경우, 워프(210)내의 스레드들은 동일한 명령어를 순차적 명령어 실행 순서(in-order) 방식으로 수행한다.
도 2는 도 1에서 세이더코어의 파이프라인을 보여주는 도면이다. 즉 도 2는 GPU에서 실제 연산을 담당하는 세이더코어의 파이프라인을 보여주고 있다.
도 2를 참조하면, 세이더코어(130)는 GPU 코어(GPU CORE)라는 용어로도 표기되는 GPU(120) 내부에서 실제 연산을 수행하는 연산 장치이다. 일반적으로 세이더코어(130)의 수가 증가하면, 이에 비례하여 GPU의 병렬성 또한 증가한다. 최근의 NVIDIA에서 출시한 Fermi 구조에서는 세이더코어(130)와 같이 실제 연산을 수행하는 연산 장치를 스트리밍 멀티프로세서(SM; Streaming Multiprocessors)라는 용어를 사용하여 명명하기도 하지만, 본 특허에서는 세이더코어(130)라는 용어를 사용하고자 한다.
GPU(120)는 매우 많은 수의 세이더코어(130)를 보유하고 있기 때문에 GPU 프로그래밍 모델에서 프로그래머가 같은 코드를 수행하는 데 있어서 수없이 많은 스레드를 생성하도록 허용함으로써 스레드 수준 병렬성을 극대화 시킬 수 있도록 지원한다. 하나의 세이더코어(130)가 동시에 수행할 수 있는 최대의 스레드(또는 연산) 수를 표시하고자 하는 경우, 세이더코어(130)의 SIMD 폭(width)이라는 용어를 사용한다. 예를 들어, "세이더코어의 SIMD 폭이 32이다"라는 것은 세이더코어(130)가 하나의 명령어로 동시에 최대 32개의 연산을 수행할 수 있다는 것을 의미한다. 그러므로 GPU(120)는 세이더코어(130)에서 연산을 효율적으로 수행시키기 위해, 스레드들을 세이더코어(130)의 SIMD 폭(도 2에서 N)에 맞춰서 집단화한다. 다시 말하면, 하나의 세이더코어(130)에서 하드웨어적인 연산 자원에 따라 동시에 연산 가능한 최대의 스레드 수가 SIMD 폭과 동일하기 때문에 SIMD 폭만큼의 스레드들이 하나의 워프(210)로 구성되는 경우 가장 효율적이라고 할 수 있다. 이에 따라, 도 2의 세이더코어(130) 구조에서 워프(210)는 "N"개의 스레드들로 구성되어 있다.
GPU(120)에서는 세이더코어(130)의 메모리 요구가 지역 메모리(132, 133, 134)에서 실패(miss)하면, DRAM(150)으로 접근하게 된다. 하지만 DRAM(150)에 접근하여 메모리 요구를 처리하고자 하는 경우, 내부 연결망(140)을 사용하기 위한 경쟁으로 발생한 지연과 DRAM(150)의 프리차지(precharge)와 행 활성화(row-active)로 인한 손해(overhead)로 인해 수 백 사이클을 필요로 한다. 다시 말하면, DRAM(150)으로 접근하는 수 백 사이클 동안 세이더코어(130)의 파이프라인은 정지(stall)된다. 메모리 실패(miss)로 인한 파이프라인 정지 문제를 해결하기 위하여, 비순차적 명령어 실행 순서(out-of-order) 방식으로 명령어를 수행하는 경우에는 메모리 실패(miss)로 인해 수행이 정지된 명령어 대신 다른 명령어를 수행하도록 한다. 하지만 GPU(120)는 순차적으로 명령어를 실행(in-order)하기 때문에, 다른 명령어를 수행 할 수 없다. 그러므로 정지된 워프(210) 대신에 다른 워프(210)를 수행하게 하는 방식을 활용하여 메모리 실패(miss)로 인한 파이프라인 정지 문제를 해결한다. GPU(120)에서 메모리 실패(miss)는 매우 많은 사이클을 요구하기 때문에, 하나의 세이더코어(130)는 매우 많은 수(도 2에서 M)의 워프(210)들을 할당 받아 연산을 수행한다.
앞서 설명한 바와 같이, 도 2의 하나의 세이더코어(130)에는 최대 N개의 스레드를 가질 수 있는 워프(210)가 최대 M개 할당된다. 워프(210)들은 워프 풀(pool)에서 대기하고 있으며, 실행 준비가 완료된 레디 워프(ready warp; 210)들 중 하나를 워프 선택 정책(warp scheduling)에 따라 워프 스케쥴러(Warp Scheduler; 200)가 선택한다. 선택된 워프(210)는 자신의 프로그램 카운터(PC: Program Counter) 값으로 명령어 캐쉬에서 워프(210)가 수행해야 하는 명령어를 인출(INSTRUCTION FETCH; 220)한다. 그리고 난 다음, 인출한 명령어를 해석(DECODE; 230)하고 해석된 명령어와 해당 워프(210)와 상응하는 레지스터 파일(135)에서 읽어 온 피연산자 값을 SIMD 파이프라인(240)으로 보내 다수의 스칼라파이프라인(SCALAR PIPELINE; 250)을 활용하여 병렬적으로 연산을 수행한다.
해당 워프(210)와 상응하는 피연산자 값을 레지스터 파일(135)에서 읽어오기 위하여 워프(210)가 워프 스케쥴러(200)에 의해 선택되면, 해당 워프(210)의 ID(Warp ID)와 이에 상응하는 레지스터 ID(Reg ID)는 명령어가 인출 및 해석되는 동안 레지스터 파일(135)로 보내진다. SIMD 파이프라인(240)은 다수의 스칼라파이프라인(250)으로 구성되어 있으며, 하나의 스칼라파이프라인(250)은 하나의 스레드 연산을 수행한다. 그러므로 SIMD 파이프라인(240)에서 스칼라파이프라인(250)의 수는 SIMD 폭과 동일하다.
현재 세이더코어(130)에 할당된 워프(210)의 최대 스레드가 N이기 때문에 도 2의 스칼라파이프라인(250)의 수(또는 SIMD 폭)도 N이다. 모든 스레드 연산(또는 스칼라파이프라인(250))이 종료된 워프(210)가 세이더코어(130)의 파이프라인의 마지막에 도착하자마자, 해당 워프(210)의 PC값을 포함한 모든 정보들은 갱신된다. 다음에 수행할 명령어가 남은 워프(210)는 워프 스케쥴러(200)에 의해 다시 선택되어 세이더코어(130)의 파이프라인을 반복하여 수행하고 종료된 워프(210)는 제거된다.
도 3은 도 2에서 SIMD 파이프라인을 보여주는 도면이다. 즉 도 3은 세이더코어 파이프라인에서의 SIMD 파이프라인 구조를 보다 상세하게 보여주고 있다. 앞서 설명한 바와 같이, 하나의 스칼라파이프라인은 하나의 스레드 연산을 수행하고 스칼라파이프라인의 집합인 SIMD 파이프라인의 폭은 워프내의 최대 스레드 수와 동일한 N이다.
도 3을 참조하면, 선택된 워프의 명령어를 수행하기 위해서 선택된 워프(210)내의 스레드들과 상응하는 레지스터의 값이 각 스칼라파이프라인(250)의 연산장치(ALU; 251)로 들어간다. 연산장치(251)의 수는 각 스칼라파이프라인(250)의 수와 동일하다. ALU 연산 종료 후, 연산 결과는 지역 메모리(132, 133, 134)에 접근(MEMORY ACCESS; 252))하여 쓰기(WRITE BACK; 253) 작업을 수행한다. 하지만 메모리 요구가 지역 메모리(132, 133, 134)에서 실패(miss)하면 해당 워프(210)는 메모리 실패 대기 장치(MSHR; Miss Status Hold Register; 254)로 보내져 대기한다. 해당 워프(210)가 메모리 실패 대기 장치(254)에서 대기하는 동안, 메모리 요구는 메모리 시스템(260; 도 1에서 내부 연결망(140)→메모리 컨트롤러(145)→DRAM(150))으로 보내진다. 그와 동시에, 파이프라인이 정지되지 않도록 실행 가능한 새로운 워프(210)가 세이더코어(130)에 할당되어 세이더코어(130) 파이프라인(도 2)을 시작한다. 워프(210)에서 요구하는 데이터를 메모리 시스템(260)으로부터 읽어오면, 메모리 실패 대기 장치(254)는 그 데이터를 레지스터 파일(135)과 지역 메모리(132, 133, 134)에 적재하고 파이프라인에서 순서를 기다려 재수행한다.
세이더코어(130)에서 워프(210)를 수행하는 경우, 워프(210)내의 스레드들은 락스텝(lock-step)으로 수행한다. 그러므로 SIMD 파이프라인(240)의 각 스칼라파이프라인(250)들 중에서 먼저 수행이 완료된 스칼라파이프라인(250)이 존재하더라도 모든 스칼라파이프라인(250)이 종료될 때까지 대기한다. 이와 유사하게 지역 메모리(132, 133, 134)로의 접근을 요구한 스레드 중 단 하나의 스레드의 메모리 요구가 실패(miss)하더라도, 모든 스레드(즉, 워프)는 메모리 실패 대기 장치(254)로 이동된다.
한편, 상기와 같은 GPU(120)의 연산 능력이 빠르게 향상됨에 따라, 그래픽 관련 작업뿐만 아니라 일반 작업을 수행하는 경우에도 GPU(120)가 널리 활용되고 있다. 특히, 최근 GPU(120) 회사들이 제공하는 응용프로그램 인터페이스(API: Application Programming Interface)를 활용하는 경우, 프로그래머들은 보다 쉽게 GPU(120)의 높은 병렬성을 활용할 수 있다.
GPU(120) 구조에서는 SIMD 파이프라인(240)을 효율적으로 활용할 수 있도록 다수의 스레드들을 집단화한 워프(210)를 생성하여 연산을 수행한다. 다시 말하면, 워프(210)를 SIMD 파이프라인(240)에서 수행함으로써 GPU(120)는 높은 병렬 연산 자원을 효과적으로 활용할 수 있다. 하지만 일반 목적 응용프로그램은 많은 분기 명령어(또는 제어 흐름 명령어)를 가지고 있기 때문에, GPU(120)에서 일반 목적 응용프로그램을 수행하는 경우 연산 자원 활용률이 감소하고 이로 인하여 성능 또한 저하된다. 그러므로 병렬 구조인 현재의 GPU(120)가 일반 응용프로그램을 효과적으로 처리할 수 있도록 프로그래밍 하는 것은 매우 중요한 사항이다.
몇몇 일반 응용프로그램은 최신 CPU(110)에서 수행되는 경우보다 GPU(120)에서 수행하는 경우 최대 몇 백배의 성능향상을 보이기도 한다. 하지만 CPU(110)와 GPU(120)의 하드웨어 플랫폼 자체가 상이하기 때문에, 대부분의 일반 응용프로그램은 GPU(120)에서 수행되더라도 CPU(110)에 비해 성능향상 폭이 그리 크지 않다. 이를 해결하기 위해서, 상용 GP(120)U 구조에서 가장 개선하고자 하는 부분은 세이더 프로그램(세이더코어(130)에서 수행하는 프로그램)에서 분기 명령어로 인해 발생하는 제어 흐름(control-flow)을 효과적으로 처리하는 것이다. 제어 흐름을 효과적으로 처리할 수 있다면, 연산 밀도를 향상시킴으로써 GPU(120)의 연산 자원 활용률을 높여 성능을 향상시킬 수 있기 때문이다.
그래픽 처리에서 많이 사용되는 텍스쳐 연산과 같은 그래픽 처리 연산들은 대부분 분기 명령어를 필요로 하지 않는 반면, 일반 응용프로그램들은 분기 명령어를 많이 포함하고 있다. 분기 명령어는 하나의 워프(210)가 동시에 다른 명령어를 수행하도록 하기 때문에, 분기 명령어를 수행하는 워프(210)는 SIMD 구조에 더 이상 적합하지 않게 된다. 다시 말하면, 분기 명령어로 인하여 하나의 워프(210)에서 다른 명령어 흐름이 발생하는 경우 단일 명령어로 워프(210)안의 모든 스레드를 수행할 수 없는 문제가 발생한다는 것이다. 이를 해결하기 위하여 제안된 분기 명령어 처리 기법들 중 대부분은 분기 명령어를 처리하기 위하여 SIMD 파이프라인(240)에 상당한 손해를 유발하기 때문에 성능을 저하시킨다.
분기 명령어가 수행되는 경우, 하나의 경로는 테이큰(taken)이고 다른 하나의 경로는 언테이큰(untaken)이다. SIMD 구조에서 분기를 처리하는 대표적인 방법인 SIMD 재수렴(reconvergence) 기법에서는 분기 명령어로 인하여 워프(210)가 분기 된 경우, 워프(210)를 분기 결과에 따라서 각 경로마다 수행한다. 다시 말하면, 워프 내에서 테이큰(taken)된 스레드들만으로 한 번 수행하고 언테이큰(untaken) 된 스레드들만으로 한 번 수행한다. 각각의 명령어를 수행하고 난 다음, 분리되어 명령어를 수행한 워프(210)내의 스레드들은 결합점(merging point, reconvergence point)에서 하나의 경로를 갖는 워프(210)로 다시 합쳐진다.
SIMD 재수렴 기법 중 post-dominator 기법은 분기 명령어를 처리하기 위하여 최신 상용 GPU(120)에서 널리 사용된다. Post-dominator 기법에서 지시자(dominance)는 코드 최적화를 위해 컴파일러에서 식별된다. Post-dominator 알고리즘의 핵심은 하나의 노드에서 갈라진 분기 흐름들이 하나의 노드에서 만난다는 것이다. Post-dominator 알고리즘에서는 "B에서 갈라진(또는 시작되는) 모든 경로가 A에서 만난다(또는 A를 통한다)"는 것을 "A pdom B"으로 표시한다. 그러므로 Post-dominator 기법을 사용하면 하나의 분기 명령어로 인해 갈라진 명령어 흐름이 다시 만나는 결합점에 대해 알 수 있다. 결합점 정보를 활용하기 위해서 post-dominator 기법이 적용된 GPU(120)에서는 분기 스택(divergence stack)을 사용한다. 분기 스택의 각 엔트리는 PC, 활성화 스레드 정보를 나타내는 활성화 마스크(active mask) 그리고 결합 명령어 등 3가지 정보를 가지고 있다. 활성화 스레드 정보는 해당 PC를 수행하는 경우에 워프내의 스레드들의 연산 동작 여부를 나타낸다.
도 4는 일반적인 워프 실행 기법을 예시적으로 보여주는 도면이다. 즉 도 4는 SIMD 폭과 워프 내의 스레드의 수가 8인 GPU에서 분기 명령어가 실행되는 간단한 예제와 이를 해결하기 위해 post-dominator 기법이 사용되는 과정을 보여준다.
도 4를 참조하면, 세이더코어(130)는 하나의 워프(W1)를 수행한다. 워프(W1)이 분기 명령어 A를 만나 수행되고 난 다음, 워프(W1) 내의 스레드들 중 일부분은 명령어 B로 테이큰(taken)되고 나머지는 명령어 C로 언테이큰(untaken)되어 각 명령어를 수행한다. 명령어 B와 C를 각각 수행한 스레드들이 다시 명령어 D에서 합쳐져서 다시 하나의 온전한 워프(W1)로 명령어 D를 수행한다. 여기서 명령어 D가 결합점이다.
도 4의 (a)에서 박스 안의 8개의 숫자들은 워프(W1)의 활성화 스레드 정보이다. 활성화 스레드 정보는 워프(W1) 안의 모든 스레드들의 숫자만큼 길이를 가지고 있으며, 상응하는 스레드의 활성화 여부를 나타낸다. 워프(W1)가 처음 생성된 경우에는 모든 스레드가 활성화 되어 있기 때문에 활성화 마스크 내의 모든 비트는 "1"로 표시된다. 물론 스레드의 총 수가 SIMD 폭의 배수가 아닌 경우, 마지막에 생성되는 워프(W1)의 모든 스레드는 활성화 되지 않을 수도 있다. 예를 들어 SIMD 폭이 32인 경우, 하나의 워프(W1)에 들어갈 수 있는 최대 스레드의 수는 32이다. 하지만 실제 GPU(120)에서 하나의 PC를 가지는 스레드가 70개인 경우에는 2개의 워프 (W1)는 모든 스레드(32*2=64)들이 활성화되지만, 1개의 워프(W1)는 부분적으로 활성화(활성화 마스크 중 6개만 활성화, 나머지 26개는 비활성화)된 상태로 생성된다. 활성화 마스크에서 활성화를 나타내는 "1"은 해당 위치의 스레드를 상응하는 스칼라파이프라인(250)에서 수행한다는 의미이다. 반면에 비활성화를 나타내는 "0"은 해당 위치의 스레드를 상응하는 스칼라파이프라인(250)에서 수행하지 않는다는 것을 나타낸다. 예를 들어, 워프(W1)가 명령어 X를 수행하는데 활성화 마스크 값이 "11110000"이라면, 워프(W1)는 명령어 X를 수행하는 경우 1번~4번 스칼라파이프라인(250)에서만 수행하고 5번~8번 스칼라파이프라인(250)은 사용하지 않는다.
도 4의 (a)에서 분기 명령어인 A를 수행하고 난 다음 워프(W1) 내의 스레드들은 분기 결과에 따라 명령어 B 또는 C를 실행한다. 워프(W1)의 스레드들 중 1번과 5~8번의 스레드들(도 4의 (a)에서 활성화 마스크에 의해서 B 10001111로 표현되어 있다)은 테이큰(taken)되어 명령어 B를 수행하고 2~4번째 스레드들(도 4의 (a)에서 C 01110000으로 표현되어 있다.)은 언테이큰(untaken)되어 명령어 C를 수행한다. 명령어 B를 수행하는 5개의 스레드와 명령어 C를 수행하는 3개의 스레드는 결합점인 명령어 D에서 서로 만나 다시 완전한 하나의 워프(W1)로 결합되어 명령어 D를 수행한다. 워프(W1) 내의 스레드들은 락스텝(lock-step)으로 수행해야 하기 때문에, 명령어 B 수행이 완료되었더라도 명령어 D 수행은 명령어 D로 합류할 명령어 C를 수행한 스레드들이 종료될 때까지 기다린 다음 모든 스레드를 동기화하여 수행한다. 다시 말하면 명령어 B와 명령어 C를 수행하는 스레드들의 연산이 모두 종료하고 난 뒤, 명령어 D가 수행될 수 있다는 것이다.
도 4의 (b), (c), (d), (e)는 분기 명령어 A 다음에 명령어 B, C 그리고 D를 순차적으로 실행하는 경우 분기 스택정보를 보여주고 있다. 실제 분기 스택이 활용되는 경우, 도 4의 (b)와 같은 상황에서는 분기 스택의 엔트리가 빈 상태이다. 하지만 분기 스택의 이해를 쉽게 하기 위하여 도 4의 (b)의 과정을 추가하여 설명한다. 앞서 설명한 바와 같이, 분기 스택의 각 엔트리는 PC, 활성화 스레드 정보를 나타내는 활성화 마스크(Active Mask) 그리고 결합 명령어(Reconvergence PC) 등 3가지 정보를 가지고 있다. 도 4의(b), (c), (d), (e)에서 TOS(top of stack)는 분기 스택에서 현재 스택의 최상단을 가리키는 포인터로 워프(W1)가 수행될 때마다 상응하는 분기 정보를 담고 있는 분기 스택의 엔트리를 가리킨다.
도 4의 (b)는 명령어 A가 실행되기 전의 분기 스택의 정보를 보여주고 있다. 분기 스택에서 TOS가 가리키는 엔트리 정보에 따르면 다음 명령어는 A이며 워프(W1) 내의 모든 스레드들이 연산을 수행한다. 명령어 A는 분기된 명령어가 아니기 때문에 결합 명령어 정보는 존재하지 않는다. 분기된 명령어는 분기 명령어의 실행 결과에 따라 워프(W1) 내의 스레드 중 일부만을 실행하는 테이큰(taken) 또는 언테이큰(untaken) 명령어를 나타낸다.
도 4의 (c)는 명령어 A를 수행하고 난 다음, 명령어 A가 분기 명령어로 명령어 B와 C로 분기하고 명령어 D에서 결합한다는 정보가 컴파일러에 의해서 식별되어 분기 스택에 저장된 상태를 보여준다. 우리는 미분기 명령어 C 보다 분기 명령어 B가 먼저 수행되는 것을 가정하였기 때문에 분기 스택의 엔트리에 결합 명령어 D의 정보를 먼저 입력하고 명령어 C와 B 정보를 순차적으로 입력한다. 결합 명령어 D는 그 자신이 워프(W1) 내의 모든 스레드가 활성화 되는 최종 결합점이기 때문에 결합 명령어 정보는 나타내지 않는다. 도 4의 (d)는 명령어 B를 수행하고 난 다음의 분기 스택 정보를 나타내고 있다. 명령어 B를 수행하면서 TOS에 의해 엔트리를 하나 인출 하였기에 현재 남은 엔트리는 2개이다. 마지막으로 도 4의 (e)는 명령어 C를 수행하고 난 다음 분기 스택 정보로 워프(W1)이 다음 수행할 명령어가 결합 명령어인 명령어 D임을 나타내고 있다.
분기된 명령어 그리고 결합 명령어를 제외한 순차적 명령어는 워프(W1) 내의 모든 스레드들이 활성화 되어 있기 때문에 활성화 스레드 정보와 결합점 정보가 필요하지 않다. 뿐만 아니라, 다음에 수행할 PC값 또한 인출 장치(220)에서 별도로 관리하기 때문에 결과적으로 분기 스택의 정보가 필요하지 않다. 다시 말해, 분기 스택의 엔트리가 비어있는 경우 순차적인 명령어 수행으로 세이더코어(130)는 판단한다. 그러므로 도 4의 (b)의 경우에는 분기 스택의 엔트리가 비어있다. 반면에, 도 4의 (e)는 분기 스택의 엔트리가 분기된 명령어들이 서로 결합하는 결합 명령어의 정보를 나타내기 때문에 분기 스택을 사용한다. 도시되지는 않았으나, 명령어 D를 수행한 다음 분기 스택의 모든 엔트리는 빈 상태이다.
한편, 파이프라인의 정지를 유발하는 스레드 대신 다른 스레드를 수행하게 하는 기술을 Fine-Grained Multithreading(FGMT)이라고 한다. CPU(110)에서 운영체제에 의해 제공되던 일반적인 멀티태스킹에서는 스레드를 전환하는 경우에 수행 중인 파이프라인의 정보나 레지스터 값을 따로 저장해야 하는 문맥 교환(context switching)으로 성능 저하가 발생한다. 하지만 FGMT 프로세서에서는 각 연산장치(251)에서 해당하는 파이프라인 단계를 독립적으로 동시에 수행하기 때문에 수행 중이던 명령어와 스레드들의 문맥(PC와 레지스터)이 저장된 레지스터 파일(135)은 그 스레드가 종료될 때까지 유지된다. 그러므로 FGMT 기술을 사용하면 수행 중인 스레드를 다른 스레드로 변환하는 과정에서 수행 중인 파이프라인의 정보나 레지스터 값을 따로 저장할 필요가 없어 성능 저하가 발생하지 않는다.
앞서 설명한 바와 같이, GPU(120)에서는 메모리 실패(miss)로 인한 손해가 매우 크다. 이를 해결하기 위해, GPU(120)에서는 세이더코어(130)에 매우 많은 수의 스레드들을 할당(도 2에서 M*N)하고, 할당된 스레드들을 워프(210)로 집단화(도 2에서 N)한 다수의 워프(도 2에서 M; 210)들을 교환해 가며 실행하는 FGMT 기술을 채택하고 있다.
도 5는 일반적인 세이더코어의 구조를 보여주는 도면이다. 즉 도 5는 최대 M개의 워프를 동시에 수행할 수 있는 세이더코어의 파이프라인의 타이밍 다이어그램과 파이프라인에 따라 활용되는 세이더코어의 구조를 보여준다. 도 5에서 녹색(짙은색) 박스는 세이더코어의 파이프라인의 타이밍 다이어그램을 나타내며, 회색(옅은색) 박스는 파이프라인에 따라 활용되는 세이더코어의 구조를 보여준다. 파이프라인 단계는 도 2와 도 3에서 상세히 설명하였기 때문에, 도 5에서는 각 파이프라인 단계에서 활용되는 세이더코어의 구조를 중점적으로 설명하도록 한다.
도 5의 (a)는 세이더코어(130)에 할당된 M개의 워프(210)의 PC값을 저장하고 있는 인출기(FETCH UNIT; 311)의 구조를 보여주고 있다. 인출 단계(FETCH; 310)에서는 인출기(311)를 활용하여 워프(210)를 선택하고 선택된 워프(210)의 PC값으로 명령어 캐쉬(INST. CACHE)에 접근하여 해당 명령어를 인출한다. 인출된 명령어는 해석 단계(DECODE; 320)에서 해석되어 명령어 버퍼(INST. BUFFER; 321)에 저장된다. 만약, 해석된 명령어가 분기명령어로 판별되면 분기명령어가 수행되어 정확한 결과가 나오기 전까지는 그 워프(210)의 다른 PC는 인출되지 않도록 처리된다.
명령어 버퍼(321)은 선택된 워프(210)의 스레드들이 모두 활성화되었는지의 여부를 나타내는 분기 상태를 표시하다. 명령어 버퍼(321)는 선택된 워프(210)의 스레드들이 모두 활성화된 경우, 분기 상태가 F(Full)로 설정되고, 선택된 워프(210)의 스레드들 중 적어도 어느 하나가 비활성화된 경우, 분기 상태가 N(Not full)로 설정된다.
즉 명령어 버퍼(321)의 엔트리에 저장된 워프(210)의 정보는 현재 명령어의 상태(도 5의 (b)에서 V/I-bit), 현재 워프(210)의 명령어(도 5의 (b)에서 Inst. for Wm) 그리고 워프(210)의 실행 준비 상태(도 5의 (b)에서 Not/Ready-bit) 등 3가지이다. 엔트리에 저장된 정보 중 현재 명령어의 상태는 해당 워프(210)가 선택되어 실행 중이라면 무효(I: invalid)로 표시되며 선택되기 전이라면 유효(V: valid)로 표시된다. 현재 명령어 상태가 무효라면, 인출기(311)는 해당 워프(210)의 다음 명령어를 인출할 수 있다. 달리 말하면, 해당 명령어 상태가 유효라면 인출기(311)는 해당 워프(210)의 다음 명령어를 인출할 수 없다.
엔트리에 저장된 정보 중 현재 워프(210)의 명령어는 해석된 해당 워프(210)의 명령어 정보를 담고 있다. 마지막의 워프(210)의 실행 준비 상태는 현재의 워프(210)가 수행될 수 있는지 없는지를 표시하는 것으로 스코어보드(SCORE BOARD; 322))에 의해 제어된다. 실행 준비 상태는 해당 명령어의 피연산자가 레지스터에 적재되어 연산을 수행할 준비가 완료되면 스코어보드(322)에 의해 준비(Ready) 상태로 표시된다. 하지만 하나의 워프(210)는 명령어를 순차적으로 수행하기 때문에 하나의 워프(210)에서 둘 이상의 명령어가 명령어 버퍼(321)에 존재하는 경우, 스코어보드(322)에 의해 이전 명령어가 수행이 완료될 때까지 이 명령어의 준비 완료 상태 표시는 미준비 상태(Not)로 표시된다. 다시 말하면, 명령어 버퍼(321) 안에는 하나의 워프(210)에 대해 2 개 이상의 명령어가 존재할 수 있지만 스코어보드(322)에 의해 이전 명령어의 수행이 완료되는 순간까지 다음 명령어의 실행 준비 상태는 미준비 상태(Not)로 표시되므로 다음 명령어는 실행되지 않는다.
인출 단계(310)와 해석 단계(320)를 종합하여 요약하면 다음과 같다. 매 사이클 마다 인출기(311)는 워프(210)와 워프(210)의 정보를 저장할 명령어 버퍼(321)안의 엔트리를 선택한다. 그리고 선택된 워프(210)의 PC값에 따라 명령어 캐쉬(313)로 접근하여 명령어를 인출한다. 인출된 명령어는 해석되어 명령어 버퍼(321)안의 선택된 엔트리에 현재 명령어의 상태와 워프(210)의 실행 준비 상태 정보와 더불어 입력된다. 워프(210)의 현재 상태를 명령어 버퍼(321)와 스코어보드(322)가 저장하고 있기 때문에 명령어 버퍼(321)와 스코어보드(322)의 정보를 활용하면 실행 준비가 완료된 워프(210)들을 알 수 있다.
이슈 단계(ISSUE; 330)에서는 실행 준비가 완료된 워프(210)들 중 하나를 워프(210) 스케쥴링 기법에 따라 선택한다. 이슈 단계(330)에서 하나의 워프(210)를 선택 할 때 분기 스택(BRANCH STACK; 331)에서 선택된 워프(210)의 분기 정보(PC, 활성화 스레드 정보, 결합 명령어)를 제공한다. 실행 단계(EXE; 340)에서 선택된 워프(210)는 활성화 스레드 정보를 기반으로 활성화 스레드와 상응하는 레지스터 파일(341)로부터 피연산자를 읽어와 해당 스칼라파이프라인(250)에서 명령어에 따라 ALU 연산(342) 또는 MEM 연산(343)을 수행한다. 연산(342, 343) 수행이 완료되면 쓰기 단계(WB; 350)에서 수행 결과를 레지스터 파일에 쓰며 분기 스택(331)과 스코어보드(322)에 명령어 종료여부와 관련 정보를 통보한다. 다시 말하면, 명령어가 종료되면 분기 스택(331)과 스코어보드(322)는 완료된 명령어와 관련된 정보를 업데이트 한다.
만약, 실행 단계(340)에서 MEM 명령어가 실행된 경우, 주소 생성기(AGU; Address Generation Unit; 361)는 워프(210)안의 각 스레드들에서 요청하는 메모리 요구에 따라 해당 메모리의 접근 주소 정보를 생성한다. 메모리 요구는 먼저 지역메모리(362, 364, 366, 368)인 텍스쳐 캐쉬(Texture CACHE; 362), 상수 캐쉬(Const CACHE; 364), 데이터 캐쉬(Data CACHE; 366) 그리고 공유 캐쉬(Shared MEM; 368)에 접근한다. 지역 메모리(362, 364, 366, 368) 중 읽기 전용인 텍스쳐 캐쉬(362), 상수 캐쉬(364)는 상대적으로 메모리 요구를 처리하는 데 있어 부담이 적기 때문에 생성된 메모리 요구에 따라 직접적으로 접근된다. 하지만 읽기 쓰기 작업이 동시에 일어나고 접근 횟수 또한 상대적으로 많은 데이터 캐쉬(366)에 접근하는 경우, 접근 결합기(ACU: Access Coalescing Unit; 365)를 활용하여 메모리 접근을 줄이기 위해 중복하여 접근되는 메모리 요구를 결합하여 한 번에 접근하도록 한다. 그리고 데이터를 공유하기 위해 사용되는 공유 메모리(368)에 접근하는 경우, 메모리 뱅크의 충돌로 인한 지연 손해를 줄이기 위해 뱅크 충돌 조절기(BCHU: Bank Conflict Handling Unit; 367))를 사용한다. 만약, 지역 메모리(362, 364, 366, 368)에서 메모리 요구를 처리하지 못한 경우, 해당 워프(210)가 메모리 실패 대기 장치(MSHR; 370)에서 대기하는 동안 메모리 요구는 메모리 포트(MEM Port; 369)를 통해 메모리 시스템(도 1에서 내부 연결망(140)→메모리 컨트롤러(145)→DRAM(150))으로 보내진다.
이 때 분기 명령어 처리 기법인 post-dominator를 쉽게 설명하기 위하여 도 4는 하나의 세이더코어(130)에 하나의 워프(210)가 할당된 간단한 경우를 보여 주고 있다. 하지만 실제 GPU(120)에서는 FGMT 기술을 채택하고 있기 때문에 하나의 세이더코어(130)에 다수의 워프(210)가 할당된다. 그러므로 실제 GPU(120)에서 발생하는 제어 흐름은 아래의 도 6과 같이 나타난다.
도 6은 본 발명의 실시예에 따른 워프 실행 기법을 예시적으로 보여주는 도면이다. 즉 도 6은 SIMD 폭이 8인 세이더코어에서 4개의 워프를 할당 받아 수행하고 있는 도중에 분기명령어로 인해 발생한 제어 흐름의 예를 보여준다. 도 6의 명령어들은 도 4와 동일하게 분기 명령어 A와 분기 명령어 A가 테이큰(taken)되는 경우 수행하는 명령어 B, 언테이큰(untaken)되는 경우 수행하는 명령어 C 그리고 결합 명령어인 명령어 D이다.
도 6을 참조하면, 세이더코어에 할당된 4개의 워프(W0, W1, W2, W3)는 각각 자신의 ID를 가지고 있으며 8개의 스레드의 집합으로 구성된 각 워프는 스레드들에 상응하는 활성화 스레드 정보를 가지고 있다. 4개의 워프(W0, W1, W2, W3)들은 워프의 선택 알고리즘(방식)에 따라 선택될 수 있다. 예컨대 4개의 워프(W0, W1, W2, W3)들은 라운드로빈(RR: Round Robin) 방식으로 낮은 ID부터 높은 ID 순서대로 선택될 수 있다.
도 7은 일반적인 워프 실행 기법에서 발생되는 연산자원의 활용률을 최적화하는 경우를 보여주는 도면이다. 이 때 도 7은 각 워프(W0, W1, W2, W3)의 옆에 그려진 박스는 스레드를 수행할 수 있는 연산 자원(도 2의 스칼라파이프라인(250))을 나타낸다. 앞서 설명한 바와 같이, 이 경우에서는 SIMD 폭이 8개인 세이더코어(130)에서 8개의 스레드들을 하나의 워프로 집단화한 경우를 가정했기 때문에 박스의 수 또한 8개이다. 노란색(짙은색) 박스는 연산 자원이 활용된다는 것을 의미하며 하얀색(옅은색) 박스는 연산 자원이 활용되지 않는다는 것을 의미한다. 연산 자원을 활용하여 연산의 수행 여부를 나타내는 활성화 스레드 정보는 활성화 마스크가 나타낸다.
도 7의 (a)는 post-dominator 기법이 적용된 GPU(120)에서 도 6에서 보여주는 제어 흐름을 처리하는 경우 연산 자원 활용률을 보여주고 있다. 모든 워프(W0, W1, W2, W3)의 활성화 스레드 정보가 "1"인 명령어 A, D를 수행하는 경우에는 모든 워프(W0, W1, W2, W3)가 모든 연산 자원을 활용한다. 그러므로 명령어 A, D를 수행하는 모든 워프(W0, W1, W2, W3)의 연산 자원은 노란색(짙은색)으로 표시된다. 반면에, 명령어 B와 명령어 C를 수행하는 경우에는 분기로 인하여 모든 연산 자원을 사용할 수 없기 때문에 활성화 스레드 정보가 "0"인 연산 자원은 하얀색(옅은색)으로 표시되어 있다. 만약, 동일한 명령어를 실행하는 다른 워프(W0, W1, W2, W3)들을 결합하여 수행할 수 있다면 연산자원의 활용률을 증가시켜 시스템 성능을 향상시킬 수 있을 것으로 기대된다.
도 7의 (b)는 명령어 B와 C를 수행하는 워프(W0, W1, W2, W3)들이 효과적으로 결합된 경우의 연산 자원 활용률을 보여주고 있다. 도 7의 (b)에서 보이듯이, 효과적으로 연산 자원을 활용할 수 있으면 수행 시간을 최대 25% 감소시킬 수 있다. 그러므로 하기에서, 연산자원의 활용률을 증가시켜 시스템 성능을 향상시키고자, 본 발명의 실시예에 따라 각 워프(W0, W1, W2, W3)의 활성화 스레드 정보를 활용한 워프 결합 실행 기법을 제안하고자 한다.
본 발명의 실시예에 따른 활성화 스레드 정보를 활용한 워프 결합 실행 기법을 위하여 파이프라인 중 이슈 단계(ISSUE)에서 수행하던 동작이 수정된다. 일반적인 이슈 단계에서는 실행 준비가 완료된 워프(W0, W1, W2, W3)들 중 하나의 워프(W0, W1, W2, W3)를 워프 스케쥴링 기법에 따라 선택한다. 그리고 이슈 단계에서 하나의 워프(W0, W1, W2, W3)를 선택 할 때 분기 스택(BRANCH STACK)에서 제공하는 선택된 워프(W0, W1, W2, W3)의 분기 정보(PC, 활성화 스레드 정보, 결합 명령어)를 활용하여 세이더코어(130)의 스칼라파이프라인(250)의 실행 단계를 수행한다.
일반적인 이슈 단계에서는 현재 사이클(current cycle)에서 수행할 하나의 워프(W0, W1, W2, W3)만을 선택한 반면, 본 발명의 실시예에 따라 수정된 이슈 단계에서는 다음에 수행할 워프(W0, W1, W2, W3) 또한 미리 선택한다. 예를 들어, 일반적인 이슈 단계에서는 현재 사이클에 워프 W1을 선택하여 수행했다면, 본 발명의 실시예에 따라 수정된 이슈 단계에서의 현재 사이클에서 수행할 워프 W1은 이미 이전 사이클(previous cycle)에 선택이 되어졌다.
도 8은 본 발명의 실시예에 따라 수정된 이슈 단계의 흐름도이다.
도 8을 참조하면, 이전 사이클에 다음에 수행할 워프(210)를 스케쥴링하고 선택된 워프(scheduled warp; 210)가 분기된 명령어를 수행하는 상태가 아니라면 아무런 동작도 수행하지 않은 채 대기한다. 만약, 선택된 워프(210)가 분기된 명령어를 수행하는 상태라면 선택된 워프(210)와 결합될 워프(210)를 선택하고 결합되기로 선택된 워프(co-warp; 210)의 데이터를 주 레지스터 파일(MRF: Main Register File)에서 임시 레지스터 파일(TRF: Temporary Register File)로 복사한다. 그리고 난 다음, 현재 사이클에서 선택된 워프(scheduled warp; 210)와 결합되기로 선택된 워프(co-warp; 210)를 결합한 결합 워프(combined warp; 210)를 인출하여 수행(EXE) 단계로 전달한다.
도 9는 본 발명의 실시예에 따른 세이더코어의 구조를 보여주는 도면이다. 즉 도 9는 활성화 스레드 정보를 활용한 워프 결합 실행 기법을 위한 세이더코어 구조를 보여준다. 도 9는 일반적인 세이더코어 구조(도 5)와 유사하다. 다만, 도 9에서 원으로 둘러싸인 3가지 하드웨어 자원(명령어 버퍼, 스코어보드, 레지스터 파일)이 수정된 이슈단계의 동작을 지원하기 위하여 일반적인 세이더코어 구조로부터 변경된다.
먼저, 본 발명의 실시예에 따라 수정된 이슈 단계(430)에서 이전 사이클에 선택된 워프(scheduled warp)의 분기 여부 정보를 제공하기 위하여 명령어 버퍼(INST. BUFFER; 421)가 수정된다. 도 9의 (b)에서 보이는 바와 같이, 수정된 명령어 버퍼(421) 구조는 일반적인 세이더코어(130)의 명령어 버퍼(도 5의 (b); 321)에 저장된 현재 명령어의 상태, 현재 워프(210)의 명령어 그리고 워프(210)의 실행 준비 상태 이외에 워프(210)의 분기 상태(도 9의(b)의 F/N-bit)를 추가적으로 가지고 있다. 스코어보드(422)에 의해 표시되는 워프(210)의 분기 상태는 워프(210)가 분기된 명령어를 수행하는지 여부를 나타낸다. 이를 위해, 명령어가 종료될 때마다 스코어보드(422)로 다음 수행할 명령어의 활성화 스레드 정보를 전달하고 이 정보를 바탕으로 스코어보드(422)는 명령어 버퍼(421)의 현재 워프(210)의 분기 상태 정보를 모든 스레드가 활성화된 명령어인 경우에는 가득 찬 상태(F: Full)로 설정하고 모든 스레드가 활성화 되지 않은 경우에는 부족한 상태(N: Not full)로 설정한다.
본 발명의 실시예에 따른 수정된 이슈 단계(430)에서 이전 사이클에 선택된 워프의 분기 상태 정보가 부족한 상태(N)인 경우, 선택된 워프(210)와 결합할 워프(210)를 선택해야 한다. 결합되기로 선택될 워프(210)는 다음의 네 가지 조건들을 충족해야 한다.
첫 번째 조건은, 실행 준비가 완료된 상태의 워프(210)여야 한다는 것이다. 이 때 실행 준비가 되지 않은 워프(210)는 실행할 수 없기 때문에 결합될 워프의 자격이 되지 않는다.
두 번째 조건은, 동일한 명령어를 수행하는 워프(210)여야 한다는 것이다. 이 때 GPU(120)는 SIMD 구조이기 때문에 동일한 명령어를 수행하는 워프(210)가 아니면 결합될 워프(210)가 될 수 없다.
세 번째 조건은, 모든 스레드가 활성화 되지 않은(분기된 명령어를 수행하는) 워프(210)여야 한다는 것이다. 이 때 모든 스레드가 활성화 된 워프(210)는 스스로 연산 자원을 100% 활용하기 때문에 추가적인 작업(레지스터 파일(135)내의 데이터 이동)이 발생하기 때문에 결합될 워프(210)로 선택되는 것은 적합하지 않다.
네 번째 조건은, 선택된 워프(210)의 비활성화(활성화 마스크 값이 "0"인) 스레드 수보다 적은 수의 스레드가 활성화된 워프(210)들이어야 한다는 것이다. 이 때 선택된 워프(210)의 비활성화 스레드 수 보다 결합되기로 선택된 워프(co-warp; 210)의 활성화 스레드가 많은 경우, 결합되기로 선택된 워프(co-warp; 210)는 두 번 이상 수행되게 된다. 이 경우, 하나의 워프(210)가 한 번 실행되는 경우에 비해 메모리 효율성을 심각하게 저하시키기 때문에 우리는 선택된 워프(210)의 비활성화 스레드 수 보다 활성화 스레드가 많은 워프(210)는 결합될 워프(210)로 선택하지 않는다.
결합될 워프(210)를 선택하기 위한 위의 네 가지 조건 중 첫 번째 내지 세 번째 조건은 명령어 버퍼(421)의 정보를 활용하며, 네 번째 조건은 스코어보드(422)에 저장된 활성화 스레드 정보를 활용한다. 결합될 워프(210)의 조건에 일치하는 워프(210)가 존재하지 않는 경우 결합될 워프(210)는 선택되지 않는다. 그리고 결합될 워프(210)의 조건에 일치하는 워프가 많이 존재하는 경우, 결합될 워프(210)를 선택하는 워프 스케쥴링 기법(본 발명에서는 라운드로빈 방식)에 따라 워프(210)를 선택한다. 만약, 하나의 결합될 워프(210)를 선택했음에도 불구하고 여전히 위의 조건을 만족하는 워프(210)가 존재한다면 추가적으로 결합될 워프를 선택할 수 있다. 예를 들어 최대 8개의 스레드를 실행할 수 있는 워프(210)의 활성화 스레드 정보가 "1"이라면, 최대 "7"의 활성화 스레드 정보를 가진 워프(210)를 결합될 워프(210)로 선택할 수 있다. 하지만 결합되기로 선택된 워프(co-warp; 210)의 활성화 스레드 정보가 "3"이라면 최대 "4"의 활성화 스레드 정보를 가진 워프(210)를 추가적으로 선택할 수 있다. 결합될 수 있는 워프(210)의 최대 수는 후술되는 임시 레지스터 파일 구조에 따라 결정된다.
일반적인 세이더코어 구조에서 워프 스케쥴링 기법에 따라 선택된 워프(210)는 자신의 분기 스택에서 제공하는 정보 중 활성화 스레드 정보에 따라, 활성화 스레드와 상응하는 레지스터 파일(135)로부터 피연산자를 읽어와 해당 스칼라파이프라인(250)에서 명령어를 수행한다. 다시 말하면, 스칼라파이프라인(250)과 레지스터 파일(135)는 일대일로 사상되어 있음을 의미한다.
도 10은 일반적인 레지스터 파일구조를 보여주는 도면이다. 이 때 도 10은 SIMD 폭이 N이고 최대 M개의 워프가 할당되는 세이더코어에서 사용되는 일반적인 레지스터 파일구조를 보여주고 있다.
도 10을 참조하면, 일반적인 레지스터 파일구조는 워프 스케쥴러(200)에 의해 선택된 워프(210)의 ID(Warp ID)와 선택된 워프(210)에 상응하는 레지스터 ID(Reg ID)를 가지고 주 레지스터 파일(MRF; Main Register File)에 접근하여 하나의 행을 선택한다. 선택된 하나의 레지스터 파일(341)의 행의 레지스터들은 연산장치(ALU; 342)와 일대일로 사상되어 있다. 이 때 선택된 한 행의 레지스터 파일(341)에서 첫 번째 열의 레지스터는 첫 번째 스칼라파이프라인(250)의 연산장치와 사상되어 있고 N 번째 레지스터는 N 번째 스칼라파이프라인(250)의 연산장치와 사상되어 있다. 그러므로 일반적인 레지스터 파일 구조로는 본 발명의 실시예에 따른 활성화 스레드 정보를 활용한 워프 결합 실행 기법이 적용될 수 없기 때문에 새로운 레지스터 파일구조를 제안하고자 한다.
도 11은 본 발명의 실시예에 따른 레지스터 파일구조를 보여주는 도면이다. 이 때 도 11은 SIMD 폭이 N이고 최대 M개의 워프가 할당되는 세이더코어에서 사용되는 본 발명의 실시예에 따른 레지스터 파일구조를 보여주고 있다.
도 11을 참조하면, 본 발명의 실시예에 따라 활성화 스레드 정보를 활용한 워프 결합 실행 기법을 위한 새로운 레지스터 파일구조는 크게 두 부분으로 분리된다. 하나는 주 레지스터 파일 구조이고, 다른 하나는 결합되기로 선택된 워프(co-warp)를 위한 임시 레지스터 파일 구조이다. 도 11에서 좌측에 굵은 점선으로 된 박스 안의 레지스터 파일은 주 레지스터 파일 구조(510)를 보여주고 있으며, 우측은 결합되기로 선택된 워프(co-warp; 210)를 위한 임시 레지스터 파일 구조(520)를 보여준다.
본 발명의 실시예에 따라 수정된 이슈 단계의 이전 사이클에서 결합될 워프(210)가 선택되는 경우, 주 레지스터 파일 구조(510)에 저장된 결합되기로 선택된 워프(co-warp; 210)의 스레드들과 상응하는 레지스터들의 데이터가 임시 레지스터 파일 구조(520)로 이동한다. 이 때 주 레지스터 파일 구조(510)에서 임시 레지스터 파일 구조(520)의 방향으로 그려진 실선의 화살표가 데이터 이동 과정을 표현하고 있다. 임시 레지스터 파일 구조(520)에서 레지스터 파일(441)의 크기는 SIMD 폭(N)과 결합될 워프(210)의 최대 수(K)의 곱으로 결정된다. 결과적으로 임시 레지스터 파일 구조(520)의 크기에 따라 결합될 워프(210)의 수는 결정된다.
만약, 본 발명의 실시예에 따라 수정된 이슈 단계의 이전 사이클에서 선택된 워프(210)가 분기되지 않았다면 본 발명의 실시예에 따라 수정된 이슈 단계의 현재 사이클에서 활성화 스레드 정보를 활용하여 결합될 워프(210)를 선택하지 않기 때문에 선택된 워프(210)만을 이슈한다. 반면에 본 발명의 실시예에 따라 수정된 이슈 단계의 이전 사이클에서 선택된 워프(210)가 분기되었다면, 본 발명의 실시예에 따라 수정된 이슈 단계의 현재 사이클에서 활성화 스레드 정보를 활용하여 선택된 워프(210)와 결합되기로 선택된 워프(co-warp; 210)을 결합한 결합 워프(combined warp; 210)를 이슈한다.
앞서 설명한 바와 같이, 선택된 워프(210)의 비활성화 스레드 수보다 결합되기로 선택된 워프(co-warp; 210)들의 활성화 스레드 수의 합은 작거나 같기 때문에 스칼라파이프라인(250)이 부족한 경우는 절대로 발생하지 않는다. 그러므로 결합 워프(210)의 활성화 스레드들이 세이더코어(130)의 스칼라파이프라인(250)을 충돌 없이 사용하기 위해서는 다음의 세 가지 원리를 사용한다. 첫 번째 원리는, 선택된 워프(210)의 레지스터 값이 활성화 스레드 정보에 의해 일반적인 레지스터 파일에서 일대일로 사상된 스칼라파이프라인(250)으로 들어가는 것이다. 두 번째 원리는, 선택된 워프(210)의 비활성화 스레드 정보(INVERSE ACTIVE MASK)를 활용하여, 선택된 워프(210)가 사용하지 않는 스칼라파이프라인(250)을 판별하는 것이다. 세 번째 원리는, 결합되기로 선택된 워프(co-warp; 210)들의 활성화 스레드 정보를 활용하여, 결합되기로 선택된 워프(co-warp; 210)들의 활성화 스레드에 상응하는 레지스터의 값들이 네트워크(CROSSBAR NETWORK)를 통해 선택된 워프(210)가 사용하지 않는 스칼라파이프라인(250)으로 들어가는 것이다. 이 때 점선은 이슈된 결합 워프(combined warp)의 레지스터 값이 위의 세 가지 원리에 의거하여 스칼라파이프라인(250)으로 들어가는 동작을 보여준다.
도 12는 일반적인 워프 실행 기법과 본 발명의 실시예에 따른 워프 실행 기법에 따른 연산자원의 활용률을 보여주는 도면이다. 즉 도 12는 제어 흐름에 따른 GPU의 연산자원 활용률을 post-dominator 기법과 본 발명의 실시예에 따른 워프 결합 실행 기법이 적용된 경우에 따라 보여주고 있다.
도 12를 참조하면, 명령어 A와 D를 수행하는 경우 워프(210)들의 활성화 스레드 정보가 "F"이기 때문에 결합될 워프(210)들은 선택되지 않고 일반적인 post-dominator 기법과 동일하게 수행한다. 명령어 B를 수행하는 경우, W0이 선택되면 결합될 워프(210)로 W2이 선택되어 W0와 W2가 결합된 결합 워프(210)가 수행된다. 그리고 난 다음, W1이 명령어 B를 수행하고자 하는 경우 결합될 워프(210)로 W3가 선택되어 함께 수행된다. 명령어 C도 명령어 B와 마찬가지로 W0와 W2가 결합되어 수행되고 W1과 W3이 결합되어 수행된다. 본 발명의 실시예에 따른 워프 결합 실행 기법이 적용되는 경우, 일반적인 post-dominator 기법을 사용하는 경우에 비해 연산 자원 활용률이 향상되어, 스레드들의 수행시간을 25% 줄일 수 있다.
한편, 본 명세서와 도면에 개시된 본 발명의 실시예들은 본 발명의 기술 내용을 쉽게 설명하고 본 발명의 이해를 돕기 위해 특정 예를 제시한 것일 뿐이며, 본 발명의 범위를 한정하고자 하는 것은 아니다. 즉 본 발명의 기술적 사상에 바탕을 둔 다른 변형예들이 실시 가능하다는 것은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 자명한 것이다.
100 : 컴퓨터 시스템
110 : CPU
120 : GPU
130 : 세이더코어
140 : 연결망
150 : DRAM
200 : 워프 스케줄러
210 : 워프
240 : SIMD 파이프라인
250 : 스칼라파이프라인
260 : 메모리 시스템

Claims (10)

  1. 실행 준비가 완료된 워프들을 선택하고, 상기 선택된 워프들을 결합하여 결합 워프를 인출하는 워프 스케줄러;
    상기 결합 워프의 스레드들에 연산을 수행하는 연산 장치들;
    을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  2. 제 1 항에 있어서, 상기 워프 스케줄러는,
    다수의 스레드들이 집단화된 스레드 그룹들을 나타내는 워프들에서 어느 하나를 선택하고,
    상기 선택된 워프의 스레드들 중 적어도 어느 하나가 비활성화된 경우, 상기 워프들에서 상기 선택된 워프와 결합될 워프를 선택하는 것을 특징으로 하는 컴퓨터 시스템.
  3. 제 2 항에 있어서,
    상기 워프들의 데이터가 저장된 주 레지스터 파일;
    상기 주 레지스터 파일로부터 상기 결합될 워프의 데이터가 복사되는 임시 레지스터 파일;
    을 더 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  4. 제 2 항에 있어서, 상기 결합 워프는,
    상기 선택된 워프와 상기 결합될 워프를 결합된 것임을 특징으로 하는 컴퓨터 시스템.
  5. 제 2 항에 있어서,
    상기 선택된 워프의 스레드들이 모두 활성화되었는지의 여부를 나타내는 분기 상태를 표시하는 명령어 버퍼;
    를 더 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  6. 제 5 항에 있어서, 상기 명령어 버퍼는,
    상기 선택된 워프의 스레드들이 모두 활성화된 경우, 상기 분기 상태가 F(Full)로 설정되고, 상기 선택된 워프의 스레드들 중 적어도 어느 하나가 비활성화된 경우, 상기 분기 상태가 N(Not full)로 설정되는 것을 특징으로 하는 컴퓨터 시스템.
  7. 제 1 항에 있어서, 상기 결합될 워프는,
    상기 선택된 워프와 동일한 명령어를 수행하고,
    비활성화된 스레드들을 포함하며,
    상기 선택된 워프의 비활성화된 스레드들의 수보다 적은 수의 활성화된 스레드들을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  8. 제 1 항에 있어서, 상기 워프 스케줄러는,
    워프의 선택 알고리즘에 따라 상기 결합될 워프를 선택하는 것을 특징으로 하는 컴퓨터 시스템.
  9. 제 1 항에 있어서, 상기 워프 스케줄러는,
    라운드로빈 방식에 따라 상기 결합될 워프를 선택하는 것을 특징으로 하는 컴퓨터 시스템.
  10. 제 1 항에 있어서, 상기 워프 스케줄러는,
    상기 선택된 워프의 스레드들이 모두 활성화된 경우, 상기 선택된 워프를 인출하는 것을 특징으로 하는 컴퓨터 시스템.
KR1020120150725A 2012-12-21 2012-12-21 컴퓨터 시스템 KR101420592B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020120150725A KR101420592B1 (ko) 2012-12-21 2012-12-21 컴퓨터 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120150725A KR101420592B1 (ko) 2012-12-21 2012-12-21 컴퓨터 시스템

Publications (2)

Publication Number Publication Date
KR20140081206A true KR20140081206A (ko) 2014-07-01
KR101420592B1 KR101420592B1 (ko) 2014-07-17

Family

ID=51732572

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120150725A KR101420592B1 (ko) 2012-12-21 2012-12-21 컴퓨터 시스템

Country Status (1)

Country Link
KR (1) KR101420592B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210090442A (ko) * 2020-01-10 2021-07-20 전남대학교산학협력단 L1 데이터 캐시의 바이패스 방법 및 장치

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102384345B1 (ko) 2015-05-15 2022-04-19 삼성전자 주식회사 스레드를 실행하는 방법, 프로세서 및 기록매체
KR102161635B1 (ko) * 2019-02-11 2020-10-06 서경대학교 산학협력단 범용 그래픽 처리장치 및 이의 스케쥴링 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8832702B2 (en) * 2007-05-10 2014-09-09 Freescale Semiconductor, Inc. Thread de-emphasis instruction for multithreaded processor
KR100985047B1 (ko) * 2007-10-25 2010-10-04 주식회사 안철수연구소 쓰레드 스케줄링 시스템 및 그 방법
RU2009125999A (ru) * 2008-07-07 2011-01-20 Интел Корпорейшн (Us) Технология планирования потоков
KR101177059B1 (ko) * 2011-01-17 2012-08-28 전자부품연구원 병렬 제어 모듈을 동적으로 할당하는 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210090442A (ko) * 2020-01-10 2021-07-20 전남대학교산학협력단 L1 데이터 캐시의 바이패스 방법 및 장치

Also Published As

Publication number Publication date
KR101420592B1 (ko) 2014-07-17

Similar Documents

Publication Publication Date Title
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
US10067768B2 (en) Execution of divergent threads using a convergence barrier
CN108376097B (zh) 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
US9747107B2 (en) System and method for compiling or runtime executing a fork-join data parallel program with function calls on a single-instruction-multiple-thread processor
JP5701487B2 (ja) 同期並列スレッドプロセッサにおける間接的な関数呼び出し命令
US8677106B2 (en) Unanimous branch instructions in a parallel thread processor
TWI493451B (zh) 使用預解碼資料進行指令排程的方法和裝置
JP4292198B2 (ja) 実行スレッドをグループ化するための方法
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
US20150149744A1 (en) Data processing apparatus and method for performing vector processing
KR20160138878A (ko) 워프 클러스터링을 수행하는 방법
JP2019160352A (ja) 多重スレッド実行プロセッサ及び動作方法
KR20120054027A (ko) 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법
EP1794674A1 (en) Dynamic loading and unloading for processing unit
US10268519B2 (en) Scheduling method and processing device for thread groups execution in a computing system
US11934867B2 (en) Techniques for divergent thread group execution scheduling
US9508112B2 (en) Multi-threaded GPU pipeline
Sunitha et al. Performance improvement of CUDA applications by reducing CPU-GPU data transfer overhead
US9286114B2 (en) System and method for launching data parallel and task parallel application threads and graphics processing unit incorporating the same
WO2023173642A1 (zh) 指令调度的方法、处理电路和电子设备
KR101420592B1 (ko) 컴퓨터 시스템
US20120151145A1 (en) Data Driven Micro-Scheduling of the Individual Processing Elements of a Wide Vector SIMD Processing Unit
US8151090B2 (en) Sequentially propagating instructions of thread through serially coupled PEs for concurrent processing respective thread on different data and synchronizing upon branch
US20230061576A1 (en) Method and system for hardware-assisted pre-execution

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: 20170704

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180709

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190626

Year of fee payment: 6