KR20140096498A - 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치 - Google Patents

파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치 Download PDF

Info

Publication number
KR20140096498A
KR20140096498A KR1020130009058A KR20130009058A KR20140096498A KR 20140096498 A KR20140096498 A KR 20140096498A KR 1020130009058 A KR1020130009058 A KR 1020130009058A KR 20130009058 A KR20130009058 A KR 20130009058A KR 20140096498 A KR20140096498 A KR 20140096498A
Authority
KR
South Korea
Prior art keywords
block
edge
pipeline
scheduling
critical
Prior art date
Application number
KR1020130009058A
Other languages
English (en)
Other versions
KR101711388B1 (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 KR1020130009058A priority Critical patent/KR101711388B1/ko
Priority to US14/134,517 priority patent/US9207922B2/en
Priority to JP2014001611A priority patent/JP6349088B2/ja
Priority to CN201410014235.6A priority patent/CN103970510B/zh
Priority to EP14151699.7A priority patent/EP2759932A1/en
Publication of KR20140096498A publication Critical patent/KR20140096498A/ko
Application granted granted Critical
Publication of KR101711388B1 publication Critical patent/KR101711388B1/ko

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63GMERRY-GO-ROUNDS; SWINGS; ROCKING-HORSES; CHUTES; SWITCHBACKS; SIMILAR DEVICES FOR PUBLIC AMUSEMENT
    • A63G11/00See-saws
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치가 개시된다. 파이프라인에서 블럭을 스케줄하는 컴파일 방법은 프로그램 코드에 따른 제어 흐름(control flow)의 블럭(block)에 대한 억세스 카운트(access count)를 프로파일(profile)하는 단계, 블럭으로 들어오는 엣지의 억세스 카운트에 포함되는 엣지 카운트(edge count)가 미리 정해진 중요 한계치(important limit) 이상인 블럭을 중요 블럭으로 판단하는 단계 및 레지스터 라이트백 컨플릭트(resister write-back conflict)가 방지되도록 중요 블럭을 억세스 카운트에 따라 스케줄하는 단계를 포함한다.

Description

파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치{DEVICE AND METHOD TO COMPILE FOR SCHEDULING BLOCK AT PIPELINE}
프로그램 코드에 따른 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치가 개시된다.
복수의 파이프라인을 가지는 컴퓨터 구조에 있어서 라이트백(write-back)은 오퍼레이션(operation)에 따라 자기 디스크 등에 기록할 데이터를 일시적으로 레지스터(resistor)에 저장하는 것이다. 물리 작동을 동반한 기록은 전기적 처리에 비해 느리기 때문에, 라이트백을 통해 데이터를 레지스터에 기록하여 시스템 전체의 대기시간(latency)을 감소시킨다.
여기서 각 오퍼레이션들의 대기시간이 다르다면 다른 사이클(cycle)에 시작한 오퍼레이션들이 동시에 레지스터(register)에 라이트(write)하는 경우가 발생할 수 있고, 이것을 레지스터 라이트백 컨플릭트(register write-back conflict)라고 한다.
따라서 레지스터 라이트백 컨플릭트를 일으키지 않으면서 대기시간을 최소화하는 컴파일러 기술이 요구된다.
일 실시예에 따르면 프로그램 코드에 따른 제어 흐름(control flow)의 블럭(block)에 대한 억세스 카운트(access count)를 프로파일(profile)하는 단계, 블럭으로 들어오는 엣지의 억세스 카운트에 포함되는 엣지 카운트(edge count)가 미리 정해진 중요 한계치(important limit) 이상인 블럭을 중요 블럭으로 판단하는 단계 및 레지스터 라이트백 컨플릭트(resister write-back conflict)가 방지되도록 중요 블럭을 억세스 카운트에 따라 스케줄하는 단계를 포함하는 파이프라인(pipeline)에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
다른 일 실시예에 따르면 블럭으로 들어오는 엣지의 억세스 카운트에 포함되는 엣지 카운트가 미리 정해진 중요 한계치 이상인 블럭을 중요 블럭으로 판단하는 단계는, 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지(important edge)로 마크(mark)하는 단계 및 중요 엣지가 들어오는 블럭을 중요 블럭으로 판단하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지로 마크하는 단계는, 스케줄되지 않은 블럭으로부터 들어오는 중요 엣지를 노멀 엣지(normal edge)로 마크하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 레지스터 라이트백 컨플릭트가 방지되도록 중요 블럭을 억세스 카운트에 따라 스케줄하는 단계는, 억세스 카운트에 따른 우선순위로 블럭을 정렬(sort)하는 단계 및 우선순위로 정렬된 순서에 따라 순차적으로(sequentially) 블럭을 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 블럭으로 들어오는 엣지의 억세스 카운트에 포함되는 엣지 카운트가 미리 정해진 중요 한계치 이상인 블럭을 중요 블럭으로 판단하는 단계는, 억세스 카운트에 따라 블럭으로부터 슈퍼 블럭을 형성하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 레지스터 라이트백 컨플릭트가 방지되도록 중요 블럭을 억세스 카운트에 따라 스케줄하는 단계는, 중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클(cycle)에 라이트백(write-back)이 수행되지 않는 오퍼레이션을 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하는 단계는, 레지스터 라이트백 컨플릭트가 예상되는 사이클에 NOP(No OPeration)을 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하는 단계는, 레지스터 라이트백 컨플릭트가 예상되는 사이클에 저장(store) 오퍼레이션을 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 레지스터 라이트백 컨플릭트가 방지되도록 중요 블럭을 억세스 카운트에 따라 스케줄하는 단계는, 중요 블럭 내부 또는 중요 블럭과 엣지로 연결되는 블럭에서 라이트백이 수행되도록 중요 블럭의 오퍼레이션을 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 중요 블럭으로 판단되지 않은 비중요 블럭에서 라이트백을 무시하고 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 중요 블럭으로 판단되지 않은 비중요 블럭에서 라이트백을 무시하고 스케줄하는 단계는, 비중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 하드웨어적으로 스톨 사이클(stall cycle)을 적용하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
또 다른 일 실시예에 따르면 중요 블럭으로 판단되지 않은 비중요 블럭은 이미 스케줄된 블럭으로 나가는 엣지가 있는 경우 비중요 블럭 내에서 오퍼레이션의 라이트백이 수행되도록 스케줄하는 단계를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법이 제공될 수 있다.
일 실시예에 따르면 프로그램 코드에 따른 제어 흐름의 블럭에 대한 억세스 카운트를 프로파일하는 블럭프로파일부, 블럭으로 들어오는 엣지의 억세스 카운트에 포함되는 엣지 카운트가 미리 정해진 중요 한계치 이상인 블럭을 중요 블럭으로 판단하는 블럭판단부 및 레지스터 라이트백 컨플릭트가 방지되도록 중요 블럭을 억세스 카운트에 따라 스케줄하는 블럭스케줄부를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 장치가 제공될 수 있다.
다른 일 실시예에 따르면 억세스 카운트에 따라 블럭으로부터 슈퍼 블럭을 형성하는 슈퍼블럭형성부를 포함하고, 블럭스케줄부는, 억세스 카운트에 따른 우선순위로 블럭 및 슈퍼 블럭을 정렬하여 정렬된 순서에 따라 순차적으로 블럭 및 슈퍼 블럭을 스케줄하는, 파이프라인에서 블럭을 스케줄하는 컴파일 장치가 제공될 수 있다.
또 다른 일 실시예에 따르면 블럭판단부는, 블럭에서 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지로 마크하고, 스케줄되지 않은 블럭으로부터 들어오는 중요 엣지를 노멀 엣지로 마크하는 엣지마크부를 포함하고, 중요 엣지가 들어오는 블럭을 중요 블럭으로 판단하는, 파이프라인에서 블럭을 스케줄하는 컴파일 장치가 제공될 수 있다.
또 다른 일 실시예에 따르면 블럭스케줄부는, 중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하고, 중요 블럭으로 판단되지 않은 비중요 블럭에서 이미 스케줄된 블럭으로 나가는 엣지가 있는 경우 비중요 블럭 내에서 오퍼레이션의 라이트백이 수행되도록 스케줄하는, 파이프라인에서 블럭을 스케줄하는 컴파일 장치가 제공될 수 있다.
또 다른 일 실시예에 따르면 중요 블럭으로 판단되지 않은 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 스톨 사이클을 적용하는 스톨적용부를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 장치가 제공될 수 있다.
일 실시예에 따른 방법을 수행하도록 하는 명령어들을 포함하는 하나 이상의 프로그램을 저장한 컴퓨터 판독 가능 저장매체가 제공될 수 있다.
도 1은 파이프라인(pipeline)에서 대기시간(latency)이 같거나 다른 오퍼레이션에 따라 발생하는 라이트백(write-back)의 모습을 도시한 도면이다.
도 2는 파이프라인에서 레지스터 라이트백 컨플릭트에 대해 스톨 사이클(stall cycle)을 적용한 모습을 도시한 도면이다.
도 3은 파이프라인에서 레지스터 라이트백 컨플릭트에 대해 NOP(No OPeration)을 적용한 모습을 도시한 도면이다.
도 4는 슈퍼 블럭(super block)에 스페큘레이션(speculation)이 적용된 제어 흐름(control flow)을 도시한 도면이다.
도 5는 파이프라인에서 기본 블럭(basic block)에 NOP이 적용된 제어 흐름을 도시한 도면이다.
도 6은 일 실시예에 따른 파이프라인에서 블럭을 스케줄(schedule)하는 컴파일 방법을 도시한 흐름도이다.
도 7은 일 실시예에 따른 프로그램 코드가 프로파일(profile)된 제어 흐름을 도시한 도면이다.
도 8은 일 실시예에 따른 프로파일의 결과에 따라 슈퍼 블럭(super block)이 형성된 제어 흐름을 도시한 도면이다.
도 9는 일 실시예에 따른 프로파일의 결과에 따라 블럭이 정렬(sort)된 제어 흐름을 도시한 도면이다.
도 10은 일 실시예에 따른 프로파일의 결과에 따라 중요 엣지(important edge)가 마크(mark)된 제어 흐름을 도시한 도면이다.
도 11은 일 실시예에 따른 중요 엣지가 들어오는 블럭이 스케줄된 제어 흐름을 도시한 도면이다.
도 12는 일 실시예에 따른 중요 엣지를 고려하여 블럭이 스케줄된 제어 흐름을 도시한 도면이다.
도 13은 일 실시예에 따른 블럭이 정렬된 순서에 따라 순차적으로 스케줄된 제어 흐름을 도시한 도면이다.
본 명세서에서 전반적으로 사용되는 용어는 다음과 같이 나타날 수 있다.
파이프라인(pipeline)은 하나의 프로세서를 서로 다른 기능을 가진 여러 개의 서브프로세서로 나누어 각각의 서브프로세서가 동시에 다른 데이터를 처리하도록 시스템을 설계하는 방식일 수 있다. 여기서 하나의 명령어가 여러 단계를 거쳐 오퍼레이션(operation)을 완료되는 데에 소요되는 시간을 대기시간(latency)이라고 할 수 있고, 각각의 단계에 소요되는 시간을 사이클이라고 할 수 있다.
제어 흐름(control flow)은 프로세스 처리를 하기 위한 입출력 장치의 지정, 사용 프로그램 명칭 등을 하드웨어와 연결하는 일종의 제어 카드 그룹으로서, 순서도로 표현되어 하나의 프로그램 실행 순서에서의 모든 가능한 경로를 추상화한 것일 수 있다.
제어흐름에 나타나는 약어 중, 각각 div는 division으로서 나누기 연산 오퍼레이션, mul은 multiplication으로서 곱 연산 오퍼레이션, add는 덧셈 연산 오퍼레이션, sub는 subtraction으로서 뺄셈 연산 오퍼레이션, shift는 레지스터에서 비트 값들을 왼쪽이나 오른쪽으로 이동시키는 연산 오퍼레이션, jump는 조건 없이 루프를 반복하는 오퍼레이션, branch는 조건에 따라 루프를 반복하는 오퍼레이션, load는 메모리로부터 값을 불러오는 오퍼레이션, nop 또는 NOP은 No OPeration을 의미할 수 있다. 여기서 각 약어의 오른쪽에 붙는 숫자는 블럭에 지정된 번호로서, 예를 들어 add3은 제3 블럭에서 덧셈 연산 오퍼레이션을 수행한다고 나타낼 수 있다.
여기서 제어 흐름은 프로그램 코드에 따른 복수의 블럭을 나타낼 수 있고, 각각의 블럭에서 행 방향은 오퍼레이션이 실행(execution)되는 사이클 순서를 도시한 것일 수 있다. 예를 들어, 도 4의 첫 번째 블럭(491)에서 div1이 제일 먼저 실행되고, 4 사이클의 nop 이후에 branch가 실행될 수 있다. 일 실시예에 따르면 프로그램 코드는 C, C++, JAVA 등의 언어가 컴파일러 내부에서 변환된 IR 코드를 포함할 수 있다. 이를테면 컴파일러는 프로세서를 통해 고급 언어를 기계어로 변환할 수 있다.
도 1은 파이프라인(pipeline)에서 대기시간(latency)이 다른 오퍼레이션에 따라 발생하는 레지스터 라이트백 컨플릭트(resister write-back conflict)의 모습을 도시한 도면이다.
여기서 도 1에 도시된 약어 중, 각각 IF(Instruction Fetch)는 프로세서가 명령어의 실행을 끝내고 다음에 실행될 명령어를 기억 장치에서 꺼내올 때까지의 오퍼레이션, ID(Instruction Decode)는 명령어의 수행을 위하여 명령어를 기억 장치에서 읽어낸 후 명령어의 종류를 판단하는 오퍼레이션, EX(EXecution)은 ID에서 판단된 종류에 따라 명령어를 수행하는 오퍼레이션, WB(Write-Back)은 오퍼레이션에 따라 자기 디스크 등에 기록할 데이터를 일시적으로 레지스터(resistor)에 저장하는 오퍼레이션일 수 있다.
이하 도 1a 및 도 1b에서 가로축은 사이클(cycle), 세로축은 오퍼레이션을 나타낼 수 있다.
도 1a에 도시된 바와 같이 오퍼레이션 대기시간(operation latency)을 같게 하여 각 오퍼레이션의 WB가 각각 다른 사이클에 수행되게 할 수 있다. 여기서 각 오퍼레이션에 부여되는 같은 대기시간은 제일 긴 대기시간을 가지는 오퍼레이션의 대기시간을 기준으로 할 수 있다. 다만, 경우 짧은 대기시간을 가지는 오퍼레이션들은 결과가 나오더라도 레지스터 라이트백(register write-back)이 불가능한 경우가 발생할 수 있다. 따라서 데이터 포워딩(data forwarding)이 필요하나 VLIW(Very Long Instruction Word)에서는 많은 이슈 폭(issue width), 최근의 프로세서(processor)들에서는 높은 클락 주파수(high clock frequency)와 긴 파이프라인(long pipeline)으로 인해 데이터 포워딩이 불가능 할 수 있다.
도 1b는 대기시간이 다른 각 오퍼레이션이 동일한 사이클에 WB(101)가 발생한 경우를 도시한 것일 수 있다. 예를 들어, 도 1b에 도시된 바와 같이 제1 오퍼레이션(op1) 및 제2 오퍼레이션(op2)은 각각 IF로부터 WB까지 소요되는 사이클이 4 사이클 및 3 사이클로서 다를 수 있고, 1 사이클에 제1 오퍼레이션, 2 사이클에 제2 오퍼레이션이 실행되는 경우 5 사이클에 제1 오퍼레이션 및 제2 오퍼레이션의 WB가 수행될 수 있다. 따라서 다른 오퍼레이션이 동시에 레지스터(register)에 라이트(write)하는 레지스터 라이트백 컨플릭트(register write-back conflict)가 발생할 수 있다.
여기서 레지스터 라이트백 컨플릭트는 상술한 도 1a와 같이 복잡한 포워딩 로직(forwarding logic)을 이용하여 동일한 대기시간을 같도록 하거나, 하드웨어적인 방식으로서 레지스터 라이트 버퍼(resister write buffer) 또는 하기 도 2에 도시된 바와 같이 파이프라인 스톨(pipeline stall)을 적용하여 방지될 수 있다. 소프트웨어적인 방식으로서는 도 3 내지 도 5에 도시된 바와 같이 블럭을 스케줄하여 방지될 수 있다.
도 2는 파이프라인에서 레지스터 라이트백 컨플릭트에 대해 스톨 사이클(stall cycle)을 적용한 모습을 도시한 도면이다. 도 1과 유사하게 가로축은 사이클, 세로축은 각 오퍼레이션을 나타낼 수 있다.
여기서 레지스터 라이트백 컨플릭트가 발생했을 때 파이프라인(pipeline)을 스톨(stall)하고, 그 중의 하나를 먼저 라이트백(write-back)하며, 이어서 스톨을 풀어 주고 나머지 레지스터를 라이트(write)할 수 있다. 예를 들면, 도 2에 도시된 바와 같이, 제1 오퍼레이션 및 제2 오퍼레이션에서 레지스터 라이트백 컨플릭트가 발생할 수 있는 바, 5 사이클에 제2 오퍼레이션 내지 제5 오퍼레이션에 스톨 사이클(201)을 적용할 수 있다. 이러한 파이프라인 스톨(pipeline stall) 방식을 전체의 파이프라인을 멈추기 때문에 자주 발생하면 성능이 저하될 수 있다.
상술한 도 2에 도시된 스톨 사이클 적용과 다른 하드웨어 방식으로서 레지스터 라이트 버퍼를 사용할 수 있다. 구체적으로는 레지스터 라이트 컨플릭트가 발생하면 그 중의 하나를 레지스터 라이트 버퍼에 놓고 다음 사이클에 라이트할 수 있다. 이 경우 다음 사이클에 다시 레지스터 라이트 컨플릭트가 발생하면 회피할 수 없는 바, 대기시간이 하나만 차이 나는 파이프라인에만 적용될 수 있고 최근의 긴 대기시간(long latency)과 짧은 대기시간(short latency)이 공존하는 경우에는 적용이 어려울 수 있다.
도 3은 일 실시예에 따른 파이프라인에서 레지스터 라이트백 컨플릭트에 대해 NOP(No OPeration)(302)을 적용한 모습을 도시한 도면이다. 여기서 소프트웨어 방식의 하나인 오퍼레이션 스케줄링(operation scheduling)을 통해 레지스터 라이트 컨플릭트를 미리 인지하고, 레지스터 라이트 컨플릭트가 발생하지 않도록 스케줄할 수 있다.
구체적으로는 스케줄하고 싶은 사이클에 이미 다른 레지스터가 라이트하고 있으면 레지스터를 라이트하는 작업이 필요 없는 오퍼레이션을 스케줄할 수 있다. 예를 들어 레지스터 라이트가 필요 없는 오퍼레이션은 저장(store) 또는 NOP(302)을 포함할 수 있다. 예를 들어, 도 3에 도시된 바와 같이, 제1 오퍼레이션과 제2 오퍼레이션이 5 사이클에 레지스터 라이트백 컨플릭트가 발생하여 스톨 사이클(301)이 필요할 수 있다. 도 3에서는 스톨 사이클을 적용하는 대신, NOP(302)을 적용한 것일 수 있다. 여기서 스케줄이 잘못되는 경우 많은 NOP(302)이 추가되어 성능이 저하될 수 있다.
도 4는 슈퍼 블럭(super block)에 스페큘레이션(speculation)이 적용된 제어 흐름(control flow)을 도시한 도면이다. 여기서 도 3과 다른 소프트웨어 방식으로서 글로벌 스케줄링(global scheduling)을 고려할 수 있다. 글로벌 스케줄링은 오퍼레이션 스케줄링을 기본 블럭(BB, basic block)내에서 수행하는 것이 아니라 복수의 기본 블럭을 모아서 같이 스케줄할 수 있다. 예를 들어, 슈퍼 블럭(super block)은 글로벌 스케줄링의 대표적인 방식으로 블럭들 사이에 인 엣지(in-edge)가 없고 아웃 엣지(out-edge)만 있을 수 있다. 여기서 엣지는 억세스에 따라 오퍼레이션이 이 블럭에서 다른 블럭으로 가는 방향을 의미할 수 있다. 이를테면 오퍼레이션의 순서일 수 있다.
이런 블럭들을 스케줄 할 때 보통은 레지스터 라이트백을 고려하지 않고 동일 길이 대기시간(equal length latency)을 사용하던가 아니면 레지스터 라이트백이 기본 블럭 내에서 끝나도록 스케줄할 수 있다. 이런 경우 레지스터 라이트백 컨플릭트에 의해 성능이 저하될 수 있다.
예를 들어, 도 4a에 도시된 바와 같이, 첫 번째 블럭(491) 및 두 번째 블럭(492)이 슈퍼 블럭(410)으로 제1 블럭을 형성할 수 있고, 프로그램 코드에 따라 제2 블럭, 제3 블럭, 제4 블럭이 제어 흐름 상에 나타날 수 있다. 제1 블럭(410)의 두 번째 블럭(492)의 mul1 오퍼레이션이 스페큘레이션(490)을 통해 첫 번째 블럭(490)으로 스케줄될 수 있다. 도 4b에 도시된 바와 같이 스케줄된 mul1 오퍼레이션에 따라 제1 블럭(410)의 첫 번째 블럭(491) 및 두 번째 블럭(492)에서 nop이 감소될 수 있다.
도 5는 파이프라인에서 기본 블럭(basic block)에 NOP이 적용된 제어 흐름을 도시한 도면이다. 여기서 제1 블럭(510)은 첫 번째 블럭(591) 및 두 번째 블럭(592)으로 형성되는 슈퍼 블럭일 수 있고, 제1 블럭(510)에서 각 오퍼레이션의 라이트백이 발생하는 사이클(513)은 제1 블럭의 우측에 점선으로 도시될 수 있다. 이 때 제1 블럭(510)에서 각 오퍼레이션이 실행되고 1 내지 2 사이클 후가 우측에 점선으로 도시되는 라이트백이 나타나는 사이클(513)일 수 있다.
일 실시예에 따르면 상술한 제1 블럭(510)과 유사하게 제2 블럭(520)의 각 오퍼레이션의 라이트백이 발생하는 사이클(523), 제3 블럭(530)의 각 오퍼레이션의 라이트백이 발생하는 사이클(533), 제4 블럭(540)의 각 오퍼레이션의 라이트백이 발생하는 사이클(543)이 도시될 수 있다.
도 5는 슈퍼 블럭 및 기본 블럭 내에서만 각 오퍼레이션이 스케줄된 것으로서, 오퍼레이션이 블럭 내부에서 종료되도록 복수의 nop이 각 블럭에 발생하여 시스템의 성능이 저하될 수 있다.
이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다.
도 6은 일 실시예에 따른 파이프라인에서 블럭을 스케줄(schedule)하는 컴파일 방법을 도시한 흐름도이다.
단계(610)에서는 컴파일러가 프로그램 코드를 프로파일(profile)할 수 있다. 구체적으로는 프로그램 코드에 따른 제어 흐름(control flow)에서 블럭에 대한 억세스 카운트(access count)를 프로파일할 수 있다. 여기서 억세스 카운트를 프로파일하여 각 블럭의 엣지 카운트(edge count)를 계산할 수 있다. 예를 들어 엣지 카운트는 각 블럭으로 들어오는 엣지인 인엣지(in-edge)를 시뮬레이션을 통해 카운트한 것일 수 있다. 아웃엣지(out-edge)는 각 블럭으로부터 다른 블럭으로 나가는 엣지를 의미할 수 있다.
일 실시예에 따르면 억세스 카운트 및 엣지 카운트는 일정 횟수의 전체 억세스를 프로그램 코드에 대해 주는 시뮬레이션을 통해 계산될 수 있다. 예를 들어 억세스 카운트 및 엣지 카운트는 전체 억세스 횟수 대비 블럭에 대한 억세스 및 엣지의 비율로 나타날 수 있다.
그리고 단계(620)에서는 컴파일러가 억세스 카운트에 따라 슈퍼 블럭(super block)을 형성할 수 있다. 구체적으로는 억세스 카운트에 따라 적어도 둘 이상의 블럭을 묶어서 슈퍼 블럭을 형성할 수 있다. 일 실시예에 따르면 적어도 둘 이상의 블럭의 각 억세스 카운트가 많고 엣지로 서로 연결되는 경우 슈퍼 블럭을 형성할 수 있다.
이어서 단계(630)에서는 컴파일러가 억세스 카운트에 따른 우선순위로 블럭을 정렬(sort)할 수 있다. 여기서 전체 억세스 대비 억세스 카운트의 비율이 높은 블럭일 수록 더 빠른 우선순위를 가질 수 있다. 일 실시예에 따르면 슈퍼 블럭으로 형성되는 블럭이 가장 높은 억세스 카운트를 가지므로 최우선순위로 정렬될 수 있다.
그리고 단계(640)에서는 컴파일러가 엣지 카운트가 미리 정한 중요 한계치(important limit)보다 높은지 판단할 수 있다. 여기서 미리 정한 중요 한계치는 프로그램 코드를 컴파일 할 때 사용자에 의해 임의로 정해질 수 있다. 일 실시예에 따르면 엣지 카운트에 대해 미리 정한 중요 한계치는 10%일 수 있으나, 이에 한정하는 것은 아니다.
이어서 단계(650)에서는 컴파일러가 엣지 카운트가 미리 정한 중요 한계치 이상인 엣지를 중요 엣지(important edge)로 마크할 수 있다. 여기서 중요 엣지로 마크된 경우라도, 중요 엣지를 인엣지로 받는 블럭이 중요 엣지를 아웃엣지로 내보내는 블럭보다 빠른 우선순위인 경우 해당 엣지를 노멀 엣지로(normal edge)로 마크할 수 있다. 이를테면 중요 엣지가 아직 스케줄되지 않은 블럭으로부터 나온 경우 해당 중요 엣지를 노멀 엣지로 마크할 수 있다.
그리고 단계(660)에서는 컴파일러가 중요 블럭을 억세스 카운트에 따라 정렬된 순서에 따라 스케줄할 수 있다. 구체적으로는 억세스 카운트에 따른 우선순위로 블럭 및 슈퍼 블럭을 정렬하고, 우선순위로 정렬된 순서에 따라 순차적으로 블럭을 스케줄할 수 있다. 여기서 중요 엣지로 전달되는 레지스터 라이트백(resister write back)은 기본 블럭(BB, basic block) 너머로 스케줄될 수 있다. 또는 시스템 복잡성을 낮추기 위해 기본 블럭 내에서 라이트백이 완료되도록 스케줄할 수 있다.
이어서 중요 블럭이 아닌 비중요 블럭에 대해서는 라이트백을 무시하고 스케줄할 수 있다. 구체적으로는 비중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 스톨 사이클(stall cycle)을 적용하여 이후 오퍼레이션을 한 사이클씩 지연시킬 수 있다. 일 실시예에 따르면 비중요 블럭은 억세스 카운트가 낮아 실행될 확률이 낮으므로 성능에 미치는 영향이 작을 수 있다.
상술한 각 단계는 이하 도 7 내지 도 13에서 상세히 설명한다.
도 7은 일 실시예에 따른 프로그램 코드가 프로파일(profile)된 제어 흐름을 도시한 도면이다. 여기서 상술한 도 6의 단계(610)가 상세히 설명될 수 있다. 구체적으로는 프로그램 코드에 따른 제어 흐름의 각 블럭(791, 792, 720, 730, 740)이 도시될 수 있다.
일 실시예에 따르면 도 7a는 각 블럭에 대한 프로파일이 진행되지 않아 아직 엣지 카운트가 계산되지 않은 상태일 수 있다. 도 7b는 각 블럭에 대한 프로파일이 진행되어, 전체 억세스에 대한 시뮬레이션을 통해 엣지 카운트가 계산된 상태일 수 있다. 예를 들어, 제1 블럭의 첫 번째 블럭(791)으로 들어오는 엣지(761)는 85%, 제1 블럭의 두 번째 블럭(792)으로 들어오는 엣지(711)는 80%, 제1 블럭의 첫 번째 블럭(791)으로부터 제2 블럭(720)으로 들어오는 엣지(712)는 5%, 제2 블럭(720)으로 들어오는 엣지(762)는 10%, 제3 블럭(730)으로 들어오는 엣지(763)는 5%, 제3 블럭(730)으로부터 제2 블럭(720)으로 들어오는 엣지(732)는 2%, 제3 블럭(730)으로부터 제4 블럭(740)으로 들어오는 엣지(734)는 3%로 엣지 카운트가 계산되었다고 가정할 수 있다.
도 8은 일 실시예에 따른 프로파일의 결과에 따라 슈퍼 블럭(super block)이 형성된 제어 흐름을 도시한 도면이다. 여기서 도 6의 단계(620)가 상세히 설명될 수 있다. 각 블럭(891, 892, 810, 820, 830, 840)에 대한 엣지 카운트 및 엣지 카운트의 합으로 계산되는 억세스 카운트는 상술한 도 7에 도시된 바와 같을 수 있다.
일 실시예에 따르면 도 8a에 도시된 바와 같이 제1 블럭(810)의 첫 번째 블럭(891)으로 들어오는 엣지(861)와 제1 블럭(810)의 두 번째 블럭(892)으로 들어오는 엣지(811)에 대한 엣지 카운트는 각각 85%와 80%일 수 있다. 여기서 도 8b에 도시된 바와 같이 억세스 카운트가 많은, 이를테면 일정 값 이상인 첫 번째 블럭(891) 및 두 번째 블럭(892)을 묶어서 제1 블럭(810)을 슈퍼 블럭으로 형성할 수 있다.
도 9는 일 실시예에 따른 프로파일의 결과에 따라 블럭이 정렬(sort)된 제어 흐름을 도시한 도면이다. 여기서 상술한 도 6의 단계(630)가 상세히 설명될 수 있다. 예를 들어 각 블럭에 대한 억세스 카운트 및 각 블럭의 엣지에 대한 엣지 카운트는 상술한 도 7에 도시된 바와 같을 수 있다.
구체적으로는 도 9a에 도시된 각 블럭을 도 9b에 도시된 바와 같이 억세스 카운트가 85%로 가장 높은 제1 블럭(910)을 최우선순위 블럭(960), 17%로 다음으로 높은 제2 블럭(920)을 다음 우선순위 블럭(970), 5%로 그 다음으로 높은 제3 블럭(930)을 그 다음 우선순위 블럭(980), 그리고 3%인 제4 블럭(940)을 마지막 우선순위 블럭(990)으로 정렬할 수 있다.
도 10은 일 실시예에 따른 프로파일의 결과에 따라 중요 엣지(important edge)가 마크(mark)된 제어 흐름을 도시한 도면이다. 여기서 상술한 도 6의 단계들(640, 650)이 상세히 설명될 수 잇다.
일 실시예에 따르면 도 10a에 도시된 바와 같은 각 블럭의 엣지들(1061, 1062, 1063, 1011, 1012, 1032, 1034) 중 미리 정한 중요 한계치 이상인 엣지를 중요 엣지로 마크할 수 있다. 예를 들어, 중요 한계치가 컴파일 시 사용자에 의해 10%로 설정된다고 가정하면, 도 10b에 도시된 바와 같이 엣지 중 엣지 카운트가 85%인 제1 블럭으로 들어오는 중요 엣지(1001), 80%인 제1 블럭 내부의 중요 엣지(1002), 10%인 제2 블럭으로 들어오는 중요 엣지(1003)를 마크할 수 있다.
도 11은 일 실시예에 따른 중요 엣지가 들어오는 블럭이 스케줄된 제어 흐름을 도시한 도면이다. 여기서 상술한 도 6의 단계(660)에서 최우선순위 블럭(1160)을 스케줄할 수 있다.
일 실시예에 따르면 제 1블럭(1110)에서 첫 번째 블럭(1111)과 두 번째 블럭(1112)의 우측에 점선으로 표시된 부분(1113)은 실행된 오퍼레이션의 라이트백이 발생하는 사이클 순서를 도시한 것일 수 있다. 예를 들면, 최우선순위 블럭(1160)인 제1 블럭(1110)에서 각 오퍼레이션이 실행이 완료되는데 소요되는 대기시간은 div1이 6 사이클, mul1이 2 사이클, load1이 5 사이클일 수 있다. 여기서 라이트백은 각 오퍼레이션의 실행이 완료된 이후 1 내지 2 사이클 후에 발생할 수 있으나, 같은 시스템에서는 동일한 사이클일 수 있다.
구체적으로 도 11a에 도시된 바와 같이 마크된 중요 엣지들(1101, 1102)이 들어오는 최우선순위 블럭(1160)은 중요 블럭일 수 있다. 중요 블럭은 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄할 수 있고, 각 오퍼레이션은 기본 블럭 너머에서 또는 기본 블럭 내에서 라이트백이 완료되도록 스케줄될 수 있다. 여기서 라이트백이 수행되지 않는 오퍼레이션은 NOP(No OPeration) 또는 저장(store) 오퍼레이션을 포함할 수 있다.
예를 들면, 도 11b에 도시된 바와 같이 각 오퍼레이션이 스케줄될 수 있다. 슈퍼 블럭으로 형성된 제1 블럭(1110)의 첫 번째 블럭(1111)에서 div1이 실행되고 다음 사이클에 mul1이 실행될 수 있다. 여기서 mul1은 대기시간이 2 사이클이므로 도 11b에 도시된 바와 같이 라이트백이 발생할 수 있다.
이어서 제1 블럭(1110)의 두 번째 블럭(1112)에서 load1의 대기시간이 5 사이클이므로 3개의 nop을 스케줄하여 슈퍼 블럭 내에서 load1의 라이트백이 완료되도록 스케줄할 수 있다.
그리고 div1은 상술한 도 7에서 계산된 엣지 카운트에 따라 80%의 확률로 두 번째 블럭(1112)으로 전달될 수 있다. 일 실시예에 따르면 div1의 대기시간은 6 사이클이므로 라이트백이 없는 nop이 스케줄되어 레지스터 라이트백 컨플릭트가 방지될 수 있다. 여기서 div1은 도 7에 도시된 엣지 카운트에 따라 5%의 확률로 제2 블럭으로 전달될 수 있는 바, 하기 도 12에서 상세히 설명한다.
도 12는 일 실시예에 따른 중요 엣지를 고려하여 블럭이 스케줄된 제어 흐름을 도시한 도면이다. 여기서 상술한 도 6의 단계(660)에서 다음 우선순위 블럭(1270)을 스케줄할 수 있다.
도 12a에 도시된 바와 같이, 다음 우선순위 블럭(1270)은 제1 블럭(1210)으로부터의 엣지, 제5 블럭(1250)으로부터의 엣지(1252) 및 그 다음 우선순위 블럭(1280)으로부터의 엣지가 중요 엣지인지 여부를 고려할 수 있다.
여기서 제5 블럭(1250)으로부터의 엣지(1252)는 도 7에 도시된 바에 따르면 중요 엣지이나, 제 5블럭(1250)이 아직 스케줄되지 않은 상태이므로 스케줄에 사용하기 어려울 수 있다. 따라서 상대적으로 중요성이 떨어지므로 제5 블럭(1250)으로부터의 엣지(1252)는 엣지 카운트가 미리 정한 중요 한계치 이상임에도 노멀 엣지로 마크할 수 있다. 이를테면 해당 엣지(1252)가 노멀 엣지이고, 나머지 엣지들은 엣지 카운트가 중요 임계치 이하로서 중요 엣지가 아니므로 다음 우선순위 블럭(1270)은 비중요 블럭으로서 라이트백을 무시하고 스케줄될 수 있다.
일 실시예에 따르면 제 2블럭(1220)에서 우측에 점선으로 표시된 부분(1223)은 실행된 오퍼레이션의 라이트백이 발생하는 사이클 순서를 도시한 것일 수 있다. 예를 들면, 다음 우선순위로 정렬된 블럭(1270)에서 각 오퍼레이션의 대기시간은 load2가 5 사이클, shift2가 1 사이클, add2가 1 사이클, sub2가 1 사이클일 수 있다.
구체적으로 제2 블럭은 도 12b에 도시된 바와 같이 중요 엣지가 노멀 엣지로 마크되어 비중요 블럭이므로 라이트백을 무시하고 스케줄한 뒤 하드웨어 방식으로 레지스터 라이트백 컨플릭트를 방지할 수 있다.
예를 들면, 제2 블럭에서 load2는 대기시간이 5 사이클이므로 도 12b에 도시된 사이클에 라이트백될 수 있다. 여기서 라이트백은 load2의 실행이 완료된 후 1 내지 2 사이클 후에 발생할 수 있다. 이어서 shift2, add2, sub2는 각각 대기시간이 1 사이클이므로 바로 라이트백될 수 있다.
도 11에서 상술한 바와 같이, 제1 블럭으로부터 전달된 div1의 대기시간이 6 사이클이므로 add2와 같은 사이클에 라이트백이 발생할 수 있다. 이 경우 div1이 add2와 같은 사이클에 라이트백이 발생할 확률은 도 7에 도시된 바와 같이 5%에 불과할 수 있으므로 하드웨어적으로 스톨 사이클을 적용할 수 있다. 일 실시예에 따르면 전체적인 성능에 큰 영향을 미치지 않으면서 코드 사이즈(code size)를 증가시키지 않을 수 있다.
도 13은 일 실시예에 따른 블럭이 정렬된 순서에 따라 순차적으로 스케줄된 제어 흐름을 도시한 도면이다. 여기서 상술한 도 6의 단계(660)에서 정렬된 나머지 블럭들(1380, 1390)이 중요 블럭으로 판단되면 스케줄할 수 있다.
일 실시예에 따르면 각 블럭(1320, 1330, 1340)의 우측에 도시된 점선으로 된 부분(1323, 1333, 1343)은 제3 블럭(1330) 및 제4 블럭(1340)에서 실행된 오퍼레이션이 라이트백되는 사이클 순서를 도시한 것일 수 있다. 예를 들면 각 오퍼레이션의 대기시간은 load3 및 load4가 5 사이클, add3이 1 사이클일 수 있다.
구체적으로 그 다음 우선순위 블럭(1380)은 들어오는 엣지 중 중요 엣지가 없어 비중요 블럭일 수 있다. 마지막 우선순위 블럭(1390)은 들어오는 중요 엣지가 없으나, 나가는 엣지가 있고 해당 엣지를 받는 블럭이 아직 스케줄되지 않았다고 가정할 수 있다. 이 경우 마지막 우선순위 블럭(1390)의 다음 블럭이 스케줄되지 않았으므로 상태를 고려할 수 없어 마지막 우선순위 블럭(1390)의 각 오퍼레이션이 기본 블럭 내에서 라이트백이 완료되도록 중요 블럭과 유사하게 스케줄할 수 있다.
예를 들면, 그 다음 우선순위 블럭(1380)에서 load3은 도 7에 도시된 엣지 카운트에 따라 2%의 확률로 제2 블럭(1320), 3%의 확률로 제4 블럭(1340)으로 전달될 수 있다. 제2 블럭에서 shift2와 같은 사이클에 라이트백이 발생(1323)할 수 있으나 확률이 낮으므로 스톨 사이클을 적용하여 레지스터 라이트백 컨플릭트를 방지할 수 있다. add3는 대기시간이 1 사이클이므로 바로 라이트백이 발생할 수 있다.
그리고 제 4블럭(1340)에서 load4는 대기시간이 5 사이클이므로 3 개의 nop을 스케줄하여 load4의 라이트백이 도 13b에 도시된 바와 같이 기본 블럭 내에서 발생하도록 할 수 있다. 여기서 제3 블럭(1330)으로부터 전달된 load3은 도 7에 도시된 엣지 카운트에 따라 3%의 확률로 라이트백이 없는 nop 사이클에 라이트백이 발생할 수 있다.
일 실시예에 따르면 총 100 번 억세스하는 경우 도 5에 도시된 방법은 1035 사이클을 실행하고 도 13에 도시된 방법에서는 770 사이클과 7 스톨 사이클이 발생되어 총 777 사이클을 실행할 수 있다. 이를테면 총 24%의 실행 시간이 절감될 수 있고 코드 사이즈는 도 5에 도시된 방법이 26 명령(instruction) 인 반면 제안한 발명에서는 21 명령 이므로 총 19%가 감소될 수 있다.
일 실시예에 따르면 파이프라인에서 블럭을 스케줄하는 컴파일 장치는 블럭프로파일부, 블럭판단부, 블럭스케줄부, 슈퍼블럭형성부, 스톨적용부를 포함할 수 있다.
블럭프로파일부는 프로그램 코드에 따른 제어 흐름의 블럭에 대한 억세스 카운트를 프로파일할 수 있다. 여기서 블럭에 대한 억세스 카운트는 시뮬레이션에 따라 얻어질 수 있는 엣지 카운트를 계산하여 프로파일될 수 있다.
블럭판단부는 블럭에서 엣지 카운트를 포함하는 억세스 카운트가 미리 정해진 값 이상인 블럭을 중요 블럭으로 판단할 수 있다. 구체적으로는 블럭에서 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지로 마크하고, 스케줄되지 않은 블럭으로부터 들어오는 중요 엣지를 노멀 엣지로 마크하는 엣지마크부를 포함하고, 중요 엣지가 들어오는 블럭을 중요 블럭으로 판단할 수 있다.
블럭스케줄부는 중요 블럭을 억세스 카운트에 따라 스케줄할 수 있다. 구체적으로는 중요 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하고, 중요 블럭으로 판단되지 않은 비중요 블럭에서 이미 스케줄된 블럭으로 나가는 엣지가 있는 경우 비중요 블럭 내에서 라이트백이 수행되도록 스케줄할 수 있다.
일 실시예에 따르면 블럭스케줄부는 억세스 카운트에 따른 우선순위로 블럭 및 슈퍼 블럭을 정렬하여 정렬된 순서에 따라 순차적으로 블럭 및 슈퍼 블럭을 스케줄할 수 있다.
슈퍼블럭형성부는 억세스 카운트에 따라 블럭으로부터 슈퍼 블럭을 형성할 수 있다. 이를테면 억세스 카운트가 많은 엣지로 연결되는 적어도 두 개 이상의 블럭을 묶어서 슈퍼 블럭을 형성할 수 있다.
스톨적용부는 중요 블럭으로 판단되지 않은 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 스톨 사이클을 적용할 수 있다.
일 실시예에 따른 파이프라인에서 블럭을 스케줄하는 컴파일 장치는 레지스터 라이트백이 기본 블럭의 경계(boundary)를 넘을 수 있게 오퍼레이션을 스케줄하여 퍼포먼스(performance)를 좋게 할 수 있다. 또한, 프로파일 결과의 엣지 카운트로부터 판단된 중요 블럭을 스톨이 발생하지 않게 스케줄하여 성능을 극대화하고, 비중요 블럭에 대해서는 스톨 사이클을 적용하여 코드 사이즈를 최소화할 수 있다. 그리고 억세스 카운트에 따른 우선순위로 정렬된 블럭을 스케줄함으로써 백트래킹(back tracking)이 없게 하여 컴파일 시간(compile time)을 최소화할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPA(field programmable array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.
101: 레지스터 라이트백 컨플릭트(resistor write-back conflict)

Claims (18)

  1. 프로그램 코드에 따른 제어 흐름(control flow)의 블럭(block)에 대한 억세스 카운트(access count)를 프로파일(profile)하는 단계;
    상기 블럭으로 들어오는 엣지의 상기 억세스 카운트에 포함되는 엣지 카운트(edge count)가 미리 정해진 중요 한계치(important limit) 이상인 블럭을 중요 블럭으로 판단하는 단계; 및
    레지스터 라이트백 컨플릭트(resister write-back conflict)가 방지되도록 상기 중요 블럭을 상기 억세스 카운트에 따라 스케줄하는 단계
    를 포함하는 파이프라인(pipeline)에서 블럭을 스케줄하는 컴파일 방법.
  2. 제1항에 있어서,
    상기 블럭으로 들어오는 엣지의 상기 억세스 카운트에 포함되는 엣지 카운트가 미리 정해진 중요 한계치 이상인 블럭을 중요 블럭으로 판단하는 단계는,
    상기 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지(important edge)로 마크(mark)하는 단계; 및
    상기 중요 엣지가 들어오는 블럭을 상기 중요 블럭으로 판단하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  3. 제2항에 있어서,
    상기 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지로 마크하는 단계는,
    스케줄되지 않은 블럭으로부터 들어오는 상기 중요 엣지를 노멀 엣지(normal edge)로 마크하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  4. 제1항에 있어서,
    상기 레지스터 라이트백 컨플릭트가 방지되도록 상기 중요 블럭을 상기 억세스 카운트에 따라 스케줄하는 단계는,
    상기 억세스 카운트에 따른 우선순위로 상기 블럭을 정렬(sort)하는 단계; 및
    상기 우선순위로 정렬된 순서에 따라 순차적으로(sequentially) 상기 블럭을 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  5. 제1항에 있어서,
    상기 블럭으로 들어오는 엣지의 상기 억세스 카운트에 포함되는 엣지 카운트가 미리 정해진 중요 한계치 이상인 블럭을 중요 블럭으로 판단하는 단계는,
    상기 억세스 카운트에 따라 상기 블럭으로부터 슈퍼 블럭을 형성하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  6. 제1항에 있어서,
    상기 레지스터 라이트백 컨플릭트가 방지되도록 상기 중요 블럭을 상기 억세스 카운트에 따라 스케줄하는 단계는,
    상기 중요 블럭에서 상기 레지스터 라이트백 컨플릭트가 예상되는 사이클(cycle)에 라이트백(write-back)이 수행되지 않는 오퍼레이션을 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  7. 제6항에 있어서,
    상기 중요 블럭에서 상기 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하는 단계는,
    상기 레지스터 라이트백 컨플릭트가 예상되는 사이클에 NOP(No OPeration)을 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  8. 제6항에 있어서,
    상기 중요 블럭에서 상기 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하는 단계는,
    상기 레지스터 라이트백 컨플릭트가 예상되는 사이클에 저장(store) 오퍼레이션을 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  9. 제1항에 있어서,
    상기 레지스터 라이트백 컨플릭트가 방지되도록 상기 중요 블럭을 상기 억세스 카운트에 따라 스케줄하는 단계는,
    상기 중요 블럭 내부 또는 상기 중요 블럭과 엣지로 연결되는 블럭에서 라이트백이 수행되도록 상기 중요 블럭의 오퍼레이션을 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  10. 제1항에 있어서,
    상기 중요 블럭으로 판단되지 않은 비중요 블럭에서 라이트백을 무시하고 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  11. 제10항에 있어서,
    상기 중요 블럭으로 판단되지 않은 비중요 블럭에서 라이트백을 무시하고 스케줄하는 단계는,
    상기 비중요 블럭에서 상기 레지스터 라이트백 컨플릭트가 예상되는 사이클에 하드웨어적으로 스톨 사이클(stall cycle)을 적용하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  12. 제1항에 있어서,
    상기 중요 블럭으로 판단되지 않은 비중요 블럭은 이미 스케줄된 블럭으로 나가는 엣지가 있는 경우 상기 비중요 블럭 내에서 오퍼레이션의 라이트백이 수행되도록 스케줄하는 단계
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 방법.
  13. 프로그램 코드에 따른 제어 흐름의 블럭에 대한 억세스 카운트를 프로파일하는 블럭프로파일부;
    상기 블럭으로 들어오는 엣지의 상기 억세스 카운트에 포함되는 엣지 카운트가 미리 정해진 중요 한계치 이상인 블럭을 중요 블럭으로 판단하는 블럭판단부; 및
    레지스터 라이트백 컨플릭트가 방지되도록 상기 중요 블럭을 상기 억세스 카운트에 따라 스케줄하는 블럭스케줄부
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 장치.
  14. 제13항에 있어서,
    상기 억세스 카운트에 따라 상기 블럭으로부터 슈퍼 블럭을 형성하는 슈퍼블럭형성부
    를 포함하고,
    상기 블럭스케줄부는,
    상기 억세스 카운트에 따른 우선순위로 상기 블럭 및 상기 슈퍼 블럭을 정렬하여 정렬된 순서에 따라 순차적으로 상기 블럭 및 상기 슈퍼 블럭을 스케줄하는,
    파이프라인에서 블럭을 스케줄하는 컴파일 장치.
  15. 제13항에 있어서,
    상기 블럭판단부는,
    상기 블럭에서 상기 엣지 카운트가 미리 정해진 중요 한계치 이상인 엣지를 중요 엣지로 마크하고, 스케줄되지 않은 블럭으로부터 들어오는 상기 중요 엣지를 노멀 엣지로 마크하는 엣지마크부
    를 포함하고,
    상기 중요 엣지가 들어오는 블럭을 상기 중요 블럭으로 판단하는,
    파이프라인에서 블럭을 스케줄하는 컴파일 장치.
  16. 제13항에 있어서,
    상기 블럭스케줄부는,
    상기 중요 블럭에서 상기 레지스터 라이트백 컨플릭트가 예상되는 사이클에 라이트백이 수행되지 않는 오퍼레이션을 스케줄하고, 상기 중요 블럭으로 판단되지 않은 비중요 블럭에서 이미 스케줄된 블럭으로 나가는 엣지가 있는 경우 상기 비중요 블럭 내에서 오퍼레이션의 라이트백이 수행되도록 스케줄하는,
    파이프라인에서 블럭을 스케줄하는 컴파일 장치.
  17. 제13항에 있어서,
    상기 중요 블럭으로 판단되지 않은 블럭에서 레지스터 라이트백 컨플릭트가 예상되는 사이클에 스톨 사이클을 적용하는 스톨적용부
    를 포함하는 파이프라인에서 블럭을 스케줄하는 컴파일 장치.
  18. 제1항 내지 제12항 중 어느 한 항의 방법을 수행하도록 하는 명령어들을 포함하는 하나 이상의 프로그램을 저장한 컴퓨터 판독 가능 저장매체.
KR1020130009058A 2013-01-28 2013-01-28 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치 KR101711388B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020130009058A KR101711388B1 (ko) 2013-01-28 2013-01-28 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치
US14/134,517 US9207922B2 (en) 2013-01-28 2013-12-19 Compiling method and apparatus for scheduling block in pipeline
JP2014001611A JP6349088B2 (ja) 2013-01-28 2014-01-08 パイプラインでブロックをスケジュールするコンパイル方法及び装置
CN201410014235.6A CN103970510B (zh) 2013-01-28 2014-01-13 用于对流水线中的块进行调度的编译方法和设备
EP14151699.7A EP2759932A1 (en) 2013-01-28 2014-01-20 Compiling method and apparatus for scheduling block in pipeline

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130009058A KR101711388B1 (ko) 2013-01-28 2013-01-28 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20140096498A true KR20140096498A (ko) 2014-08-06
KR101711388B1 KR101711388B1 (ko) 2017-03-02

Family

ID=49958319

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130009058A KR101711388B1 (ko) 2013-01-28 2013-01-28 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치

Country Status (5)

Country Link
US (1) US9207922B2 (ko)
EP (1) EP2759932A1 (ko)
JP (1) JP6349088B2 (ko)
KR (1) KR101711388B1 (ko)
CN (1) CN103970510B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7208448B2 (ja) * 2019-02-01 2023-01-19 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6092180A (en) * 1997-11-26 2000-07-18 Digital Equipment Corporation Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed
US7949855B1 (en) * 2004-11-17 2011-05-24 Nvidia Corporation Scheduler in multi-threaded processor prioritizing instructions passing qualification rule
US8315995B1 (en) * 2008-09-09 2012-11-20 Peer Fusion, Inc. Hybrid storage system

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5222240A (en) * 1990-02-14 1993-06-22 Intel Corporation Method and apparatus for delaying writing back the results of instructions to a processor
SG75756A1 (en) * 1994-02-28 2000-10-24 Intel Corp Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
US5553256A (en) * 1994-02-28 1996-09-03 Intel Corporation Apparatus for pipeline streamlining where resources are immediate or certainly retired
JPH0944362A (ja) * 1995-07-27 1997-02-14 Toshiba Corp コンパイラ
US6112317A (en) 1997-03-10 2000-08-29 Digital Equipment Corporation Processor performance counter for sampling the execution frequency of individual instructions
US6139199A (en) * 1997-06-11 2000-10-31 Sun Microsystems, Inc. Fast just-in-time (JIT) scheduler
US6260189B1 (en) * 1998-09-14 2001-07-10 Lucent Technologies Inc. Compiler-controlled dynamic instruction dispatch in pipelined processors
US6862677B1 (en) * 2000-02-16 2005-03-01 Koninklijke Philips Electronics N.V. System and method for eliminating write back to register using dead field indicator
JP2003131888A (ja) 2001-10-29 2003-05-09 Hitachi Ltd 手続き間命令スケジューリング方法
JP2003140910A (ja) 2001-11-05 2003-05-16 Hitachi Ltd Vliwプロセッサにおけるバイナリトランスレーション方法
US7954102B2 (en) 2002-11-13 2011-05-31 Fujitsu Limited Scheduling method in multithreading processor, and multithreading processor
US8001363B2 (en) 2005-04-04 2011-08-16 Globalfoundries Inc. System for speculative branch prediction optimization and method thereof
US9710269B2 (en) 2006-01-20 2017-07-18 Qualcomm Incorporated Early conditional selection of an operand
US8127114B2 (en) 2007-03-28 2012-02-28 Qualcomm Incorporated System and method for executing instructions prior to an execution stage in a processor
US8145874B2 (en) 2008-02-26 2012-03-27 Qualcomm Incorporated System and method of data forwarding within an execution unit
GB2458487B (en) * 2008-03-19 2011-01-19 Imagination Tech Ltd Pipeline processors
KR101032771B1 (ko) 2009-05-29 2011-05-06 광운대학교 산학협력단 구성형 프로세서에서 risc 명령어와 확장 명령어를 병렬 처리하기 위한 방법 및 그에 따른 구성형 프로세서
CN102200924B (zh) * 2011-05-17 2014-07-16 北京北大众志微系统科技有限责任公司 基于模调度实现循环指令调度的编译方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6092180A (en) * 1997-11-26 2000-07-18 Digital Equipment Corporation Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed
US7949855B1 (en) * 2004-11-17 2011-05-24 Nvidia Corporation Scheduler in multi-threaded processor prioritizing instructions passing qualification rule
US8315995B1 (en) * 2008-09-09 2012-11-20 Peer Fusion, Inc. Hybrid storage system

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
CHEKURI 외 3명. 'Profile-driven instruction level parallel scheduling with application to super blocks'. Proc. of the 29th Annual IEEE/ACM International Symposium on Microarchitecture, 1996.12, pp.58-67 *

Also Published As

Publication number Publication date
JP6349088B2 (ja) 2018-06-27
US20140215448A1 (en) 2014-07-31
US9207922B2 (en) 2015-12-08
JP2014146311A (ja) 2014-08-14
CN103970510A (zh) 2014-08-06
EP2759932A1 (en) 2014-07-30
CN103970510B (zh) 2018-06-29
KR101711388B1 (ko) 2017-03-02

Similar Documents

Publication Publication Date Title
KR101746018B1 (ko) 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치
US8490066B2 (en) Profiler for optimizing processor architecture and application
EP2951681B1 (en) Solution to divergent branches in a simd core using hardware pointers
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US7418575B2 (en) Long instruction word processing with instruction extensions
US9355061B2 (en) Data processing apparatus and method for performing scan operations
US5604878A (en) Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
TWI469046B (zh) 基於旋轉的別名保護暫存器中的暫存器配置
GB2501582A (en) Issuing speculative load instructions to cache memory
US8869129B2 (en) Apparatus and method for scheduling instruction
US9256430B2 (en) Instruction scheduling approach to improve processor performance
US9354850B2 (en) Method and apparatus for instruction scheduling using software pipelining
JPH11272474A (ja) レジスタの複数割当てを利用した演算の処理中に割込み可能な複数実行装置
US20140258697A1 (en) Apparatus and Method for Transitive Instruction Scheduling
KR101711388B1 (ko) 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치
US20140013312A1 (en) Source level debugging apparatus and method for a reconfigurable processor
US10459725B2 (en) Execution of load instructions in a processor
CN110134438B (zh) 指令排序方法、装置、移动终端及存储介质
KR20150040663A (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
KR20150051083A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
CN116113940A (zh) 一种图计算装置、处理方法及相关设备
JP6473023B2 (ja) 性能評価モジュール及びこれを組み込んだ半導体集積回路
US10606602B2 (en) Electronic apparatus, processor and control method including a compiler scheduling instructions to reduce unused input ports
JP2011128672A (ja) スーパースカラプロセッサ及びその命令処理方法
JP3743155B2 (ja) パイプライン制御型計算機

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