KR102161055B1 - 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 - Google Patents

소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 Download PDF

Info

Publication number
KR102161055B1
KR102161055B1 KR1020130119450A KR20130119450A KR102161055B1 KR 102161055 B1 KR102161055 B1 KR 102161055B1 KR 1020130119450 A KR1020130119450 A KR 1020130119450A KR 20130119450 A KR20130119450 A KR 20130119450A KR 102161055 B1 KR102161055 B1 KR 102161055B1
Authority
KR
South Korea
Prior art keywords
intervals
schedules
loop
candidate
interval
Prior art date
Application number
KR1020130119450A
Other languages
English (en)
Other versions
KR20150040663A (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 KR1020130119450A priority Critical patent/KR102161055B1/ko
Priority to US14/508,318 priority patent/US9383981B2/en
Publication of KR20150040663A publication Critical patent/KR20150040663A/ko
Application granted granted Critical
Publication of KR102161055B1 publication Critical patent/KR102161055B1/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
    • 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
    • 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/4452Software pipelining
    • 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

Landscapes

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

Abstract

본 발명의 일 측면에 따른 모듈로 스케줄링 방법은, 루프에서 인접된 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출하는 단계; 상기 후보의 시작간격들을 이용하여 명령어들의 스케줄들을 병렬적으로 탐색하는 단계; 및 상기 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택하는 단계를 포함한다.

Description

소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치{Method and Apparatus for instruction scheduling using software pipelining}
본 발명은 소프트웨어 파이프라이닝의 기법 중 모듈로 스케줄링 방법 및 그 방법을 수행하는 장치에 관한 발명이다.
반복적으로 수행되는 루프는 프로세서의 데이터 처리과정에서 막대한 연산량 을 동반하고, 전체의 데이터 처리시간에서 많은 비중을 차지한다. 이러한, 루프의 처리 부담을 감소시키기 위하여, 다양한 소프트웨어 파이프라이닝 기법들이 제안되어 왔다.
소프트웨어 파이프라이닝 기법 중 하나인, 모듈로 스케줄링 기법은 루프의 처리 시간을 줄이기 위해, 루프의 여러 반복(interation)들이 병렬적으로 수행되도록 루프를 변환하여 처리하는 스케줄링 기법이다. 모듈로 스케줄링 기법에 따르면, 루프의 n번째 반복(iteration)이 완전히 끝난 다음에 n+1번째 반복이 시작되는 것이 아니라, 루프의 n번째 반복의 실행중에 루프의 n+1번째 반복이 시작된다. 루프의 n번째 반복과 루프의 n+1 번째 반복이 파이프라인 됨으로써, 루프의 n번째 반복과 n+1 번째 반복을 병렬적으로 처리될 수 있다.
모듈로 스케줄링 방법에서는 루프의 처리 시간을 줄이기 위하여, 루프의 n번째 반복의 시작시간과 루프의 n+1번째 반복의 시작시간의 차이인 시작간격(initiation interval, II)을 최적화하는 것이 매우 중요하다. 하지만, 최적화된 시작간격(II)을 찾기까지 오랜 시간이 소비되는 문제점이 있다.
본 발명이 이루고자하는 기술적 과제는, 최적화된 시작간격(II)을 빠르고 신속하게 탐색할 수 있는 모듈로 스케줄링 방법 및 이를 수행하는 장치를 제공하는데 있다.
본 발명의 일 측면에 따른 모듈로 스케줄링 방법은, 루프에서 인접된 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출하는 단계; 상기 후보의 시작간격들을 이용하여 명령어들의 스케줄들을 병렬적으로 탐색하는 단계; 및 상기 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택하는 단계를 포함한다.
본 발명의 일 측면에 따라서, 상기된 방법을 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체가 제공된다.
본 발명의 일 측면에 따른 모듈로 스케줄링 장치는, 루프를 처리하기 위한 명령어들을 저장하는 메모리; 및 상기 명령어들을 분석하여 상기 루프를 처리할 프로세서의 동작을 스케줄링하는 모듈로 스케줄러를 포함하고, 상기 모듈로 스케줄러는, 상기 루프에서 인접된 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출하고, 상기 후보의 시작간격들을 이용하여 상기 명령어들의 스케줄들을 병렬적으로 탐색하고, 상기 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택한다.
본 발명의 일 실시예에 따르면, 다수의 시간간격들(II)에 대한 스케줄들이 병렬적으로 탐색되므로, 모듈로 스케줄링에서 최적화된 시작간격(II)을 신속하게 찾아낼 수 있다.
도 1은 일반적인 모듈로 스케줄링의 개념을 설명하는 도면이다.
도 3은 본 발명의 다른 일 실시예에 따른 모듈로 스케줄링 방법의 흐름을 도시한 도면이다.
도 4는 본 발명의 일 실시예에 따른 의존 그래프(dependence graph)를 설명하는 도면이다.
도 5는 본 발명의 일 실시예에 따른 자원 제약(resource constraint)에 의한 시작간격 ResII를 설명하는 도면이다.
도 6은 본 발명의 일 실시예에 따른 반복 제약(recurrent constraint)에 의한 시작간격 RecII를 설명하는 도면이다.
도 7은 본 발명의 일 실시예에 따른 스케줄링 장치를 도시한 도면이다.
도 8은 본 발명의 일 실시예에 따른 모듈로 스케줄러를 도시한 도면이다.
도 9는 본 발명의 다른 일 실시예에 따른 스케줄링 장치를 도시한 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 설명한다.
도 1은 일반적인 모듈로 스케줄링의 개념을 설명하는 도면이다. 도 1에서 좌측(a)는 모듈로 스케줄되지 않은 일반적인 루프의 처리과정이고, 우측(b)는 좌측(a)를 모듈로 스케줄링 한 경우의 루프의 처리과정을 도시한다. 도 1에서, 처리될 루프가 표 1와 같은 코드라고 가정한다.
for i = 0 to n-1
A(i);
B(i);
C(i);
D(i);
end
좌측(a)에 따르면, 반복 i=0 부터 반복 i=n-1 이 시간에 따라서 순서대로 수행된다. 즉, 반복 i=0이 완료된 이후에 비로서 반복 i=1이 수행된다. 좌측(a)에 따라서 표 1의 루프를 처리하는데 소요되는 시간은 수학식 1과 같이 정의될 수 있다.
Figure 112013090765454-pat00001
수학식 1에서, SL은 한번의 반복을 수행하는데 소요되는 스케줄의 길이이다. 따라서, 좌측(a)와 같은 방식에 따르면, 루프를 처리하는데 소요되는 시간은, SL 과 n에 모두 비례한다.
우측(b)에 따르면, 반복 i=0부터 반복 i=n-1 이 일정한 간격을 두고, 병렬적으로 수행된다. 즉, 반복 i=0 이 시작된 다음 일정한 간격 이후 i-1이 시작된다. 여기서, 인접한 반복들 간의 시작시간의 차이를 시작간격(initiation interval)이라고 하며, 약자 II로 표시되는 것이 일반적이다. 우측 (b)에 따르면, 반복들이 횡방향으로 중첩되기 때문에 좌측(a)보다 효율적인 루프처리가 가능하게 된다.
한편, 모듈로 스케줄링이 시작되는 삼각형 부분은 프롤로그, 파이프라인이 가능한 가득채워진 부분은 커널, 모듈로 스케줄링이 종료되는 역삼각형 부분은 에필로그라 한다. 우측(b)가 좌측(a)에 비하여 높은 루프처리 효율성을 얻기 위해서는, 프롤로그와 커널을 가능한 짧게하고, 커널을 가능한 넓게하여야 한다. 즉 우측(b)의 효율성을 높이기 위해서는 시작간격 II를 최소화하여야 하는데, 이는 수학식2와 같아 수식적으로 확인된다.
Figure 112013090765454-pat00002
n이 크다면 전체 loop의 실행 cycle에서 SL부분은 무시될 수 있으므로 시작간격 II가 모듈로 스케줄된 루프 처리의 효율성에 가장 중요한 인자로 간주될 수 있다. 따라서 시작간격 II를 최소화하는 것은 루프 처리의 효율성과 직결되어 있다.
종래기술에 따를 때, 최소화된 시작간격 II를 찾는 것은 매우 오랜 시간이 걸린다. 여기서, 최소화된 시작간격 II를 찾는다는 것은, 이론적인 최소 시작간격인 MII를 찾는 것과는 다른 개념이다. 이론적인 최소의 시작간격 MII에 따라서는, 명령어들의 스케줄링이 불가능할 수도 있다. 반면, 최소화된 시작간격 II는 실제 수행될 수 있는 스케줄들 중에서 가장 빠른 스케줄에 대응되는 시작간격을 의미한다.
최소의 시작간격 MII에 따라서 스케줄링이 불가능한 경우가 발생될 수 있는 이유는 예컨대, 최소의 시작간격 MII에는 하드웨어 자원의 제약과 명령어들의 의존성에 따른 제약이 동시에 고려된 것이 아니고, 루프와 무관한 다른 명령어 처리 스케줄 또는 인터럽트의 사정이 고려된 것이 아니기 때문이다.
따라서, 실제적인 스케줄링 구현에서는 시작간격 II의 후보 값을 하나씩 대입해서, 실제로 실행 가능한 스케줄인지 여부를 검증한다. 예를 들어, 종래기술은 II=1에서 따라서 스케줄을 탐색하고, 탐색된 스케줄이 유효한지 여부를 검증한다. 만약, 탐색된 스케줄이 유효하지 않은 경우에는, II를 1 증가시키고 II=2에서 따라서 스케줄을 탐색하고, 스케줄의 유효성을 다시 검증한다. 이와 같은 방식으로, 하나의 II 값을 점진적으로 증가시키면서 유효한 스케줄이 탐색될 때까지 앞선 과정들이 반복된다.
그러나, 종래 기술에 따를 때, 최초의 II가 작은 값에서 시작하고, 아주 큰 II에서 유효한 스케줄이 탐색될 때, 스케줄링에 소비되는 시간이 매우 오래 걸리게 되는 문제점이 있다. 예를 들어, 컴파일러의 컴필레이션에서 스케줄링이 수행된다면, 최적화된 II를 찾기 위해서 컴필레이션 시간이 전체적으로 증가된다.
도 2는 본 발명의 일 실시예에 따른 모듈로 스케줄링 방법의 흐름을 도시한 도면이다. 도 2에 도시된 방법은, 도 7에 도시된 스케줄링 장치(70) 또는 도 9에 도시된 스케줄링 장치(90)에 의해 수행될 수 있다. 이하에서는, 설명의 편의를 위하여, 스케줄링 장치(70)가 도 2의 방법을 수행하는 것으로 가정한다.
도 2를 참조하면, 스케줄링 장치(70)는 루프에서 서로 인접하는 반복들간의 시작간격 II에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출한다(205). 후보의 시작간격들은 다양한 방법에 따라서 산출될 수 있는데, 이하에서는 산출된 후보의 시작간격들이 n(n은 2 이상의 자연수)개라고 가정한다.
예를 들면, 스케줄링 장치(70)가 처음으로 후보의 시작간격들을 탐색하기 시작하는 경우에는, 사전에 산출된 최소 시작간격 MII를 일정간격으로 증가시킴으로써 n개의 후보 시작간격들을 탐색할 수 있다. 예를 들어, 총 n개의 후보시작간격들 중 i번째 후보의 시작간격들의 값 CanII[i]는 수학식 3과 같은 규칙을 갖도록 산출될 수 있다.
Figure 112013090765454-pat00003
여기서, d의 값은 임의의 자연수로서, 실시예에 따라서 변경될 수 있다. 만약, d=1 인 경우, 후보의 시작간격들은 MII, MII+1,….,MII+n-1 이 된다.
만약, 스케줄링 장치(70)가 n개의 후보의 시작간격들에 기초하여 스케줄들을 탐색해 보았으나, 유효한 스케줄이 발견되지 않는 경우에서는, 또 다른 n개의 후보의 시작간격들을 산출한다. 이때에는, 이전에 산출된 후보의 시작간격들을 소정의 규칙에 따라서 업데이트한다. 예를 들어, 이전에 산출된 후보의 시작간격들 중 가장 큰 값을 PreII라고 했을 때, n개의 후보의 시작간격들은 수학식 4와 같은 규칙을 갖도록 산출될 수 있다.
Figure 112013090765454-pat00004
다만, 본 발명의 권리범위가 이에 한정되는 것은 아니며, 스케줄링 장치(70)는 다양한 규칙에 따라서 n개의 후보의 시작간격들을 산출할 수 있다.
예를 들면, 스케줄링 장치(70)는 일정 범위 내에서 n개의 후보의 시작간격들을 산출할 수 있다. 산출 범위는 [하한 MinII, 상한 MaxII]로 제한되는 것이 바람직하다. 하한 MinII는, MII 또는 이전에 산출된 후보의 시작간격들 중 스케줄을 불가능하게 하는 후보의 시작간격의 최대값+1일 수 있다. 상한 MaxII는, 루프의 길이 또는 이전에 산출된 후보의 시작간격들 중 스케줄을 가능하게 하는 후보의 시작간격의 최소값-1일 수 있다. 스케줄링 장치(70)는 산출 범위 내에서 n개의 후보의 시작간격들을 균등한 간격으로 추출하거나, 또는 랜덤추출 할 수 있다.
상술된 실시예들 외에도 스케줄링 장치(70)는 n개의 명령어 스케줄들을 동시에 병렬적으로 탐색하기 위하여, 다양한 방식에 따라서 n개의 후보의 시작간격들을 산출할 수 있음을 당업자라면 이해할 수 있다.
스케줄링 장치(70)는 산출된 후보의 시작간격들을 이용하여 명령어들의 스케줄들을 병렬적으로 탐색한다(210). 예를 들어, 스케줄링 장치(70)는 n개의 후보의 시작간격들에 대한 n개의 스케줄들을 동시에 탐색한다. 스케줄링 장치(70)가 스케줄을 탐색한다는 의미는, 주어진 후보의 시작간격을 갖도록 루프의 명령어들을, 시간에 따라서 프로세서의 기능유닛(function unit) 또는 레지스터 파일에 할당하는 것을 의미한다. 여기서, 기능유닛은 처리소자(Processing element)라고도 하며, 기능유닛은, ALU, 비교기, Adder, 곱셈기, 쉬프터, Load/Store 유닛 등을 예시할 수 있으며 이에 한정되지 않는다.
프로세서는 여러 개의 기능유닛들과 레지스터 파일들을 포함할 수 있기 때문에, 하나의 후보의 시작간격에 대한 스케줄의 탐색에도 다양한 경우의 수들이 존재할 수 있다. 스케줄링 장치(70)는 일정한 규칙에 따라서 다양한 경우의 수들에 대한 스케줄 구성을 시도해본다. 모든 경우의 수들에 대하여 스케줄이 탐색되지 않을 수도 있고, 일부 경우의 수에 대하여 실행 가능한 스케줄이 탐색될 수도 있다. 예를 들면, 어떠한 경우의 수에 따르면 프롤로그에서의 스케줄 구성이 불가능할 수도 있고, 다른 경우의 수에 따르면 커널에서의 스케줄 구성이 불가능할 수도 있다.
한편, 프로세서는 루프의 명령어를 실제로 실행할 주체로서, 스케줄링 장치(70)의 프로세서일 수 있으나, 스케줄링 장치(70)와 다른 외부장치의 프로세서일 수도 있다. 예를 들면, 스케줄링 장치(70)가 스스로 루프를 처리하는 주체이고, 스케줄링 장치(70)는 루프를 처리하기 위한 명령어들이 스케줄링 장치(70)의 프로세서에서 실행될 수 있도록 스케줄링 할 수 있다.
이와 달리, 스케줄링 장치(70)는 루프를 포함하는 프로그램 코드를 컴파일하는 PC이고, 실제 컴파일 된 명령어들은 스마트폰의 프로세서에 의해 실행될 수도 있다. 예를 들어, PC의 프로세서는 스케줄링을 수행하고, 스케줄된 명령어들은 스마트폰의 프로세서에서 실행될 수도 있다. PC는 스마트폰 프로세서에서 명령어들이 실행될 수 있도록, 스마트폰의 프로세서의 하드웨어 구성과 명령어 집합 구조 ISA(Instruction Set Architecture)을 고려하여 스케줄을 탐색한다. 예를 들면, 프로세서의 기능유닛들의 개수와 종류과 레지스터 파일의 개수, 기능유닛들 간의 연결관계, 기능유닛과 레지스터 파일의 연결관계 등의 프로세서의 정보가 고려될 수 있다.
스케줄링 장치(70)는 n개의 스케줄들을 동시에 탐색하기 위하여, n개의 스케줄러들을 이용한다. 예를 들어, n개의 스케줄러들은 각각 하나의 후보의 시작간격을 입력 받고, 입력된 후보의 시작간격에 대하여 실행 가능한 스케줄을 탐색한다. 각각의 스케줄러들은 입력된 후보의 시작간격에 대하여 순환 예약 테이블 MRT(Modulo Reservation Table)을 생성함으로써, 스케줄을 탐색할 수 있다. MRT는 다른 반복으로부터 온 자원 동시 요구를 감지하기 위한 테이블로서, 스케줄러는 커널에 대한 MRT를 생성해봄으로써, 전체 스케줄을 탐색할 수 있다. 왜냐하면, 커널이 파이프라이닝의 깊이가 가장 크기 때문에, 커널에 대한 MRT 구성이 가능하다면, 프롤로그와 에필로그의 MRT 구성이 가능하기 때문이다. 즉, 커널에 대한 MRT는 루프 명령어들에 대한 MRT로 이해될 수 있다.
MRT는 열(column)에 기능유닛과 레지스터 파일을 배열하고, 행(law)에는 사이클을 배열한 테이블로서, 행은 후보의 시작간격의 개수에 따라서 결정된다. 예를 들어, 스케줄러에 입력된 후보의 시작간격이 4라면, 스케줄러는 4행으로 MRT를 구성해 본다. 예를 들어, 후보의 시작간격 4 및 6개의 명령어들에 대하여, 4개의 기능유닛과 1개의 레지스터 파일로 MRT 구성이 가능한 경우 표 2와 MRT를 예시할 수 있다.
FUO FU1 FU2 FU3 RF
T=0 명령어3(i) 명령어0(i+1)
T=1 명령어1(i+1) 명령어4(i+1)
T=2 명령어5(i+1)
T=3 명령어2(i+1)
n개의 스케줄러들은 스케줄 탐색을 위한 전용의 하드웨어로 구현될 수 있으나, 소프트웨어 모듈로 구현될 수도 있다. 예를 들어, 스케줄링 장치(70)의 n개의 스케줄러들에 대응하는 소프트웨어 모듈을 생성하고, 생성된 소프트웨어 모듈을 스케줄링 장치(70)의 프로세서에서 실행할 수 있다. 이와 달리, 스케줄링 장치(70)가 n개의 하드웨어 스케줄러들을 구비하는 경우, n개의 후보의 시작간격을 n개의 하드웨어 스케줄러에 입력할 수도 있다.
본 발명의 실시예에 따르면, n개의 후보의 시작간격들에 대하여 n개의 스케줄들을 동시에 탐색하기 때문에, 1개의 후보의 시작간격에 대하여 1개의 스케줄을 탐색하는데 소요되는 경우와 비교하여, 약 1/n 시간으로 최소화된 후보의 시작간격을 찾아낼 수 있다.
여기서, n은 스케줄링 장치(70)의 프로세서의 성능이나, 하드웨어 구성에 따라서 조절될 수 있다. 예를 들면, n은 스케줄링 장치(70)가 동시에 탐색할 수 있는 스케줄들의 최대치일 수 있다.
스케줄링 장치(70)는 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택한다(215). 스케줄링 장치(70)는 210에서 탐색된 스케줄들의 유효성을 판단한다. 스케줄이 유효하다는 것은 주어진 후보의 시작간격에 대하여, 실행 가능한 스케줄이 존재한다는 의미이다. 스케줄이 유효하다면, 주어진 시작간격에 대해서 MRT가 생성될 수 있다.
n개의 후보의 시작간격들에 대하여 m(0<m≤n)개의 유효한 스케줄들이 탐색된 경우, 스케줄링 장치(70)는 m개의 유효한 스케줄들 중에서 어느 하나의 스케줄을 선택한다. 스케줄링 장치(70)는 m개의 유효한 스케줄들 중에서 가장 빠른 스케줄을 선택할 수 있다. m개의 유효한 스케줄들에 대응하는 m개의 후보의 시작간격들이 존재하는데, 스케줄링 장치(70)는 m개의 후보의 시작간격들의 크기에 따라서 어느 하나의 스케줄을 선택할 수 있다. 예를 들어, 스케줄링 장치(70)는 m개의 후보의 시작간격들 중에서 가장 작은 시작간격에 대응하는 스케줄을 선택할 수 있다.
한편, n 개의 후보의 시작간격들에 대한 스케줄들이 모두 유효하지 않다고 판단되는 경우, 스케줄링 장치(70)는 n개의 후보의 시작간격들을 업데이트한다. 예를 들어, 스케줄링 장치(70)는 n개의 후보의 시작간격들을 각각을 n 만큼 증가시킴으로써, n개의 후보의 시작간격들을 업데이트할 수 있다. n개의 후보의 시작간격들을 업데이트하는 것은 전술한 205로 되돌아는 과정으로 이해될 수 있다.
이와 같이, 스케줄링 장치(70)는 205 내지 215를 재귀적으로 수행함으로써, 스케줄링을 수행할 수 있다.
도 3은 본 발명의 다른 일 실시예에 따른 모듈로 스케줄링 방법의 흐름을 도시한 도면이다. 도 3에 도시된 방법은, 도 7에 도시된 스케줄링 장치(70) 또는 도 9에 도시된 스케줄링 장치(90)에 의해 수행될 수 있다. 이하에서는, 설명의 편의를 위하여, 스케줄링 장치(70)가 도 3의 방법을 수행하는 것으로 가정한다.
도 3을 참조하면, 스케줄링 장치(70)는 루프 처리를 위한 명령어들 간의 의존성을 분석하여, 의존 그래프(dependence graph)를 생성(build)한다(305). 일반적으로 루프의 명령어들은 다른 명령어에 의해 의존적일 수 있는데, 명령어들의 의존은 크게 반복간 의존 관계(inter-iteration dependence)와 반복내 의존(intra-iteration dependence)으로 구분될 수 있다. 이러한 의존 관계가 의존 그래프로 표현될 수 있다. 의존 그래프에서, 명령어는 점(vertex)으로 나타내고, 각 의존성은 에지 또는 화살표로 도시될 수 있다.
도 4는 의존 그래프(dependence graph)를 설명하는 도면이다. 도 4에 도시된 코드(405)에 대한 의존 그래프는 410과 같이 표현할 수 있다. 의존 그래프(410)에서 아래로 향하는 화살표들은 반복내 의존을 나타내고, 위로 향하는 화살표는 반복간 의존을 나타낸다. 예를 들어, 의존 그래프(410)에서 A는 B,E 와 반복내 의존관계가 있고, D와 반복간 의존관계가 있다. 코드(405)에서, 이전 반복의 D에 의해 계산된 z를 이용하여 A를 실행하고 있다. 따라서, A는 이전 반복의 D가 실행 된 다음에 비로서 실행될 수 있다.
스케줄링 장치(70)는 최소 시작간격 MII를 산출한다(310). 310에서 II= max(RecMII, ResMII)는 MII를 산출하는 것을 의미한다. k는 n개의 후보의 시작간격들을 산출하기 위한 매개변수를 의미한다. k=0 으로 설정된다.
MII는 ResMII와 RecMII 중 큰 값으로 결정되는데, ResMII 는 자원 제약(resource constraint)을 고려하여 산출된 최소의 시작간격이고, RecMII는 반복 제약(recurrent constraint)을 고려하여 산출된 최소의 시작간격이다. 자원 제약이란 루프를 처리할 프로세서의 하드웨어 구성에 따른 파이프라이닝 제약을 의미하고, 반복 제약이란 루프를 처리하기 위한 명령어들의 의존성에 따른 파이프라이닝 제약을 말한다.
도 5에는 RecMII를 산출하기 위한 서로 다른 하드웨어 구성예들 (a),(b),(c)를 도시한다. 도 5는 표 3과 같은 루프에 따라서 스케줄 되었다고 가정한다. 표 3는 6개의 명령어들을 포함하는데, A,B,C,D는 Type 1의 명령어들이고, E,F는 Type 2의 명령어들이다. 6개의 명령어들간의 의존성은 고려하지 않기로 한다.
for i = 0 to n-1
A(i); # Type 1
B(i); # Type 1
C(i); # Type 1
D(i); # Type 1
E(i); # Type 2
F(i); # Type 1
end
도 5의 (a)에서는, 프로세서(505)가 6개의 기능유닛들을 포함하는데, 6개의 기능유닛들 모두 Type 1 및 Type 2의 명령어들을 실행할 수 있다고 가정한다. 6개의 명령어들은 프로세서(505)에 포함된 6개의 기능유닛들에 의해서 동시에 수행될 수 있기 때문에, 커널이 510과 같이 스케줄 될 수 있다. 이 때, ResMII 는 1이 된다.
도 5의 (b)에서는, 프로세서(515)가 2개의 기능유닛들을 포함하는데, 2개의 기능유닛들 모두 Type 1 및 Type 2의 명령어들을 실행할 수 있다고 가정한다. 따라서, 2개의 명령어들만이 동시에 수행될 수 있으므로, 커널이 520과 같이 스케줄 될 수 있다. 이 때, ResMII는 3이 된다.
도 5의 (c)에서는, 프로세서(525)가 6개의 기능유닛들을 포함하는데, FU0 및 FU2는 Type 1의 명령어만 실행할 수 있고, 나머지 기능유닛들은 Type 2의 명령어만 실행할 수 있다고 가정한다. 이 때, A,B,C,D의 명령어들 중 2개만이 동시에 실행될 수 있기 때문에, 커널은 530 스케줄 된다. 이 때, ResMII는 2가 된다.
도 6은 반복 제약(recurrent constraint)에 의한 시작간격 RecII를 설명하는 도면이다. 도 6의 도 4의 코드(405)를 처리하기 위한 스케줄을 도시한다. 도 6에서 자원 제약은 논외로 한다.
도 6의 (d)에서 화살표로 도시된 바와 같이 n번째 반복의 D와 n+1번째 반복의 A는 서로 의존성이 있다. 따라서, 도 6의 (e)와 같이 명령어들이 스케줄되어야 하고, 이 때, RecMII는 4가 된다.
도 3으로 돌아가서, 스케줄링 장치(70)는 n개의 후보의 시작간격들을 산출한다(315). n개의 후보의 시작간격들은 310에서 산출된 MII와 매개변수 k를 이용하여 산출될 수 있다. 예를 들어, 스케줄링 장치(70)는 MII + k를 1씩 증가시킴으로써, n개의 후보의 시작간격들을 산출할 수 있다.
스케줄링 장치(70)는 산출된 n개의 후보의 시작간격들에 대하여 각각 명령어의 스케줄을 탐색하는 n 개의 병렬적 쓰레드(parallel thread)들을 런치(launch) 한다(320). 예를 들면, 스케줄링 장치(70)는 병렬적으로 동작하는 n개의 스케줄러를 생성한다.
스케줄링 장치(70)는 n 개의 병렬적 쓰레드들을 이용하여, n개의 후보 시작간격들 각각에 대한 스케줄을 탐색한다(300). n개의 후보 시작간격들에 대한 n개의 스케줄들이 병렬적으로 탐색될 수 있다.
스케줄링 장치(70)는 스케줄의 탐색 결과, 유효한 스케줄이 존재하는지 여부를 판단한다(335). 스케줄의 유효성 판단 방법은, 도 2의 전술한 설명을 참조한다.
스케줄링 장치(70)는 탐색된 n 개의 스케줄들이 모두 유효하지 않다라고 판단되면 매개 변수 k를 n 만큼 증가시키고(340), 새로운 n개의 후보의 시작간격들을 산출한다(315). 새롭게 산출된 n개의 후보의 시작간격들은, 이전에 산출된 n개의 후보의 시작간격들을 각각 후보의 시작간격들의 개수 n만큼 증가시킨 값이다.
스케줄링 장치(70)는 스케줄의 탐색 결과, 유효한 스케줄이 존재한다고 판단되면, 유효한 스케줄에서 퍼포먼스가 가장 우수한 스케줄을 선택한다(345). 예를 들어, 스케줄링 장치(70)는 유효한 스케줄이 하나인 경우에는 그 스케줄을 선택한다. 스케줄링 장치(70)는 유효한 스케줄이 둘 이상인 경우, 유효한 스케줄들 중에서 가장 짧은 스케줄을 선택한다. 즉, 스케줄링 장치(70)는 시작간격이 가장 짧은 스케줄을 선택한다.
도 7은 본 발명의 일 실시예에 따른 스케줄링 장치를 도시한 도면이다. 도 7의 명령어 스케줄링 장치(70)는 프로파일러(710), 시뮬레이터(720), 디버거(730), 컴파일러(740) 및 메모리(750)를 포함한다. 다만, 도 7에 도시된 구성요소들이 모두 필수 구성요소들인 것은 아니며, 보다 적은 구성요소에 의해서 명령어 스케줄링 장치(70)이 구현될 수 있다. 또한, 도시되지 않은 다른 범용적인 구성요소들이 스케줄링 장치(70)에 더 포함될 수 있다.
스케줄링 장치(70)에서, 프로파일러(710), 시뮬레이터(720), 디버거(730) 및 컴파일러(740)는 하나의 SDK(Software Development Kit)를 구성할 수 있다.
컴파일러(740)는 작성된 프로그램 코드를 하위레벨 언어로 변환한다. 예를 들면, 컴파일러(740)는 고급언어로 작성된 프로그램 코드를 어셈블리 언어나 기계어로 변환한다. 컴파일러(740)는 변환된 어셈블리 언어나 기계어 언어의 명령어들을 스케줄링한다. 컴파일러(740)는 작성된 프로그램 코드를 컴필레이션(compilation) 하기 위하여, 메모리(750)에 저장된 정보를 이용할 수 있다.
메모리(750)에는 작성된 프로그램 코드 정보에 대한 정보, 프로그램 코드를 실행할 프로세서에 대한 정보가 저장될 수 있다. 프로그램 코드를 실행할 프로세서의 하드웨어 구성과 명령어 집합 구조 ISA(Instruction Set Architecture)가 메모리(750)에 저장될 수 있다. 프로세서의 하드웨어 구성에 대한 정보로서는, 프로세서의 기능유닛들의 개수와 종류과 레지스터 파일의 개수, 기능유닛들 간의 연결관계, 기능유닛과 레지스터 파일의 연결관계 등을 예시할 수 있다.
프로그램 코드를 실행할 프로세서는, 스케줄링 장치(70)의 프로세서 일 수도 있으나, 스케줄링 장치(70)와 다른 장치의 프로세서 일 수도 있다. 메모리(750)에 저장된 프로세서의 하드웨어 구성과 명령어 집합 구조 ISA에 대한 정보는 읽기 전용 데이터로 저장될 수 있다. 또한, 후술하는 바와 같이 모듈로 스케줄러(742)에 포함된 n개의 스케줄러들은 메모리(750)에 저장된 읽기 전용 데이터를 공유하여 사용할 수 있다.
또한, 메모리(750)에는 컴파일러(740)에 의해 컴파일된 명령어들이 저장될 수 있다. 메모리(750)에는 컴파일러(740)에 의해 생성된 명령어 스케줄이 저장될 수 있다.
컴파일러(740)는 작성된 프로그램 코드의 복잡성을 감소시키기 위하여, 이론적으로 실행될 가능성이 없는 무의미한 데드 코드(dead code)를 소거할 수 있다. 컴파일러(740)는 데드 코드가 제거된 프로그램 코드를 하위레벨 언어로 변환한다.
한편, 작성된 프로그램 코드를 실행할 프로세서가 루프와 루프가 아닌 명령어를 서로 다른 모듈에 의해서 처리한다면, 컴파일러(740)는 작성된 프로그램 코드를 루프와 루프가 아닌 부분으로 파티셔닝 한다. 예를 들어, 프로그램 코드를 실행할 프로세서가 VLIW 모듈 및 재구성 가능한 코어스 그레인 어레이(coarse grained array, CGRA)를 포함한다면, 컴파일러(740)는 루프가 아닌 부분은 VLIW 모듈에서 처리되도록 스케줄링 하고, 루프는 CGRA에서 처리되도록 스케줄링 할 수 있다.
컴파일러(740)는 VLIW 스케줄러(741) 및 모듈로 스케줄러(742)를 포함한다. VLIW 스케줄러(741)는 프로그램 코드에서 루프가 아닌 부분이 VLIW 모듈에서 처리되도록, 스케줄링 한다. VLIW 스케줄러(741)는 VLIW 모듈의 하드웨어에 대한 정보에 기초하여 루프가 아닌 부분에 대한 명령어들을 스케줄링 한다.
모듈로 스케줄러(742)는 루프를 처리하기 위한 명령어들을 메모리(750)에서 로딩한다. 모듈로 스케줄러(742)는 루프를 처리하기 위한 명령어들을 분석하여 루프를 처리할 프로세서의 동작을 스케줄링 한다. 모듈로 스케줄러(742)는 루프에서 인접한 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출한다. 모듈로 스케줄러(742)는 산출된 후보의 시작간격들을 이용하여 명령어들의 스케줄들을 병렬적으로 탐색한다. 모듈로 스케줄러(742)는 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택한다. 모듈로 스케줄러(742)의 보다 상세한 실시예는 후술하는 도 8의 설명을 참조한다.
디버거(730)는 작성된 프로그램 코드에서 오류를 추적한다.
시뮬레이터(720)는 작성된 프로그램 코드가 실행될 외부 장치의 하드웨어 자원을 가상적으로 구현함으로써, 외부 장치와 유사한 하드웨어 환경을 제공한다. 예를 들어, 스케줄링 장치(70)가 PC 이고, 작성된 프로그램 코드는 스마트 폰에서 실행된다고 가정할 때, 시뮬레이터(720)는 PC를 통해 스마트 폰의 하드웨어 자원을 가상적으로 구현한다. 시뮬레이터(720)를 이용하면, 소프트웨어 개발자는 PC에서 작성된 프로그램 코드가 스마트 폰에서 처리되는 것과 유사한 시뮬레이션을 수행할 수 있다.
프로파일러(710)는 작성된 프로그램 코드에 대한 프로파일링 정보를 제공한다. 프로파일링 정보는 실시예에 따라서 다양하게 변형될 수 있는데 프로그램 코드를 실행할 프로세서의 구조에 관한 정보를 포함할 수 있다. 프로파일링 정보는 프로그램 코드에 대한 성능 정보로서, 프로세서 자원의 이용에 대한 정보, 프로그램 코드의 실행 시간, 메모리 이용에 관한 정보, 명령어 스케줄에 관한 정보 등에 대한 통계적 데이터를 포함할 수 있다. 소프트웨어 개발자는 프로파일링 정보를 통해서, 작성한 프로그램 코드에 대한 전반적인 성능과 파악할 수 있다.
도 8은 본 발명의 일 실시예에 따른 모듈로 스케줄러를 도시한 도면이다. 도 8에 도시된 모듈로 스케줄러(80)는 도 7에 도시된 스케줄링 장치(70)의 모듈로 스케줄러(742) 또는 도 9에 도시된 스케줄링 장치(90)의 모듈로 스케줄러(910)일 수 있다. 다른 실시예에서, 모듈로 스케줄러(80)는 스케줄링 장치(70) 및 스케줄링 장치(90)와는 다른 장치에 포함될 수 있다. 모듈로 스케줄러(80)는 모듈로 스케줄링을 위한 프로세서로 구현될 수 있다.
도 8을 참조하면, 모듈로 스케줄러(80)는 의존성 검출부(810), MII 산출부(820), 후보II 산출부(830), n개의 스케쥴러들(860), 유효성 판단부(840) 및 스케줄 선택부(850)를 포함한다. 앞서, 전술한 설명과 중복되는 내용은 그 설명을 생략한다.
의존성 검출부(810)는 루프 처리를 위한 명령어들 간의 의존성을 분석하여, 의존 그래프(dependence graph)를 생성(build)한다.
MII 산출부(820)는 최소 시작간격 MII를 산출한다. MII는 ResMII와 RecMII 중 큰 값으로 결정되는데, ResMII 는 자원 제약(resource constraint)을 고려하여 산출된 최소의 시작간격이고, RecMII는 반복 제약(recurrent constraint)을 고려하여 산출된 최소의 시작간격이다. 자원 제약이란 루프를 처리할 프로세서의 하드웨어 구성에 따른 파이프라이닝 제약을 의미하고, 반복 제약이란 루프를 처리하기 위한 명령어들의 의존성에 따른 파이프라이닝 제약을 말한다.
후보II 산출부(830)는 n개의 후보의 시작간격들을 산출한다. n은 2 이상의 자연수일 수 있다. 후보II 산출부(830)는 최소 시작간격 MII를 일정간격으로 증가시킴으로써 n개의 후보 시작간격들을 탐색할 수 있다. 예를 들어, 총 n개의 후보시작간격들 중 i번째 후보의 시작간격들의 값 CanII[i]는 전술한 수학식 3과 같은 규칙을 갖도록 산출될 수 있다. 다만, 본 발명의 권리범위가 이에 한정되는 것은 아니며, 후보II 산출부(830)는 다양한 규칙에 따라서 n개의 후보의 시작간격들을 산출할 수 있다.
일 실시예에서, 후보II 산출부(830)는 일정 범위 내에서 n개의 후보의 시작간격들을 산출할 수 있다. 산출 범위는 [하한 MinII, 상한 MaxII]로 제한되는 것이 바람직하다. 하한 MinII는, MII 또는 이전에 산출된 후보의 시작간격들 중 스케줄을 불가능하게 하는 후보의 시작간격의 최대값+1 일 수 있다. 상한 MaxII는, 루프의 길이 또는 이전에 산출된 후보의 시작간격들 중 스케줄을 가능하게 하는 후보의 시작간격의 최소값-1일 수 있다. 스케줄링 장치(70)는 산출 범위 내에서 n개의 후보의 시작간격들을 균등한 간격으로 추출하거나, 또는 랜덤추출 할 수 있다.
예를 들어, MII=1 이고, 루프의 길이가 101이고, n=5라고 가정할 때, 후보II 산출부(830)는 1, 21, 41, 61, 101을 후보의 시작간격들로 산출한다. 스케줄러들(860)은 후보의 시작간격 1, 21, 41, 61, 101에 대하여 스케줄들을 탐색한다. 유효성 판단부(840)는 예컨대, 후보의 시작간격들 1, 21에 의해서 유효한 스케줄이 탐색되지 않고, 41, 61, 101에 의해서 유효한 스케줄들이 탐색되었다고 판단한다. 스케줄 선택부(850)는 스케줄 선택을 하지 않고, 후보의 시작간격들을 22 내지 40 범위에서 다시 산출해 줄 것을 후보II 산출부(830)에 요청한다. 후보II 산출부(830)는 22 내지 41 범위에서 다시 5개의 후보의 시작간격들 22, 24, 26, 28, 40을 산출한다. 산출된 후보의 시작간격들 22, 24, 26, 28, 40에 대하여 모두 유효한 스케줄이 탐색되지 않은 경우, 스케줄 선택부(850)는 이전이 스케줄 탐색에서 유효한 스케줄 중 가장 빠른 스케줄 즉, 시작간격 41에 대응하는 스케줄을 선택한다. 산출된 후보의 시작간격들 중 22, 24에 대해서는 유효한 스케줄이 탐색되지 않고, 26, 28, 40에 대해서는 유효한 스케줄이 탐색되었다고 가정한다. 이 때, 산출범위의 하한과 상한이 모두 25 이므로, 후보II 산출부(830)는 5개의 후보의 시작간격들을 산출할 필요 없이, 하나의 시작간격 25를 후보의 시작간격으로 산출한다. 만약, 후보의 시작간격 25에 의해 유효한 스케줄이 탐색되면, 후보의 시작간격 25에 대응하는 스케줄이 선택된다. 이와 달리, 후보의 시작간격 25에 의해 유효한 스케줄이 탐색되지 않으면, 스케줄 선택부(850)는 이전이 스케줄 탐색에서 유효한 스케줄 중 가장 빠른 스케줄 즉, 시작간격 26에 대응하는 스케줄을 선택한다.
상술된 실시예들 외에도 후보II 산출부(830)는 n개의 명령어 스케줄들을 동시에 병렬적으로 탐색하기 위하여, 다양한 방식에 따라서 n개의 후보의 시작간격들을 산출할 수 있음을 당업자라면 이해할 수 있다.
n개의 스케줄러들(860)은 각각 하나의 후보의 시작간격을 입력 받고, 입력된 후보의 시작간격에 대하여 실행 가능한 스케줄을 탐색한다. 예를 들어, 각각의 스케줄러들(860)은 입력된 후보의 시작간격에 대하여 순환 예약 테이블 MRT(Modulo Reservation Table)을 생성함으로써, 스케줄을 탐색할 수 있다.
유효성 판단부(840)는 탐색된 n개의 스케줄들의 유효성을 판단한다.
스케줄 선택부(850)는 탐색된 n개의 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택한다. n개의 후보의 시작간격들에 대하여 m(0<m≤n)개의 유효한 스케줄들이 탐색된 경우, 스케줄 선택부(850)는 m개의 유효한 스케줄들 중에서 어느 하나의 스케줄을 선택한다. 스케줄 선택부(850)는 m개의 유효한 스케줄들 중에서 가장 빠른 스케줄을 선택할 수 있다. m개의 유효한 스케줄들에 대응하는 m개의 후보의 시작간격들이 존재하는데, 스케줄 선택부(850)는 m개의 후보의 시작간격들의 크기에 따라서 어느 하나의 스케줄을 선택할 수 있다. 예를 들어, 스케줄 선택부(850)는 m개의 후보의 시작간격들 중에서 가장 작은 시작간격에 대응하는 스케줄을 선택할 수 있다.
한편, n 개의 후보의 시작간격들에 대한 스케줄들이 모두 유효하지 않다고 판단되는 경우, 스케줄 선택부(850)는 n개의 후보의 시작간격들을 업데이트한다. 예를 들어, 스케줄 선택부(850)는 후보II 산출부(830)에 새로운 n개의 후보의 시작간격들을 산출해 줄 것을 요청한다.
도 9는 본 발명의 다른 일 실시예에 따른 스케줄링 장치를 도시한 도면이다. 앞서 설명된 내용과 중복되는 내용은 그 설명을 생략한다. 도 9를 참조하면, 스케줄링 장치(90)는 모듈로 스케줄러(910), 재구성 메모리(920), 공유 레지스터 파일(940), VLIW 명령어 메모리(930), 다수의 기능유닛들 및 다수의 레지스터 파일들을 포함한다. 스케줄링 장치(90)는 재구성 가능한 프로세서 RP(Reconfigurable Processor)로 구현될 수 있다.
스케줄링 장치(90)에서 점선으로 도시된 960 부분은 루프가 아닌 부분의 명령어를 실행하기 위한 VLIW 모듈을 구성한다. 점선으로 도시된 970은 루프의 명령어를 처리하기 위한 재구성 가능한 코어스 그레인 어레이 CGRA를 구성한다. 다만, 실시예에 따라서는 VLIW 모듈(960)에서 루프를 처리하거나, CGRA(970)에서 루프가 아닌 부분을 처리하는 것도 가능하다. 스케줄링 장치(90)는 CGRA 모드와 VLIW 모드를 번갈아 가며 동작할 수 있다.
CGRA(970)는 다수의 기능유닛들 및 다수의 레지스터 파일들을 포함하는데, CGRA(970)는 명령어 실행의 효율성을 높이기 위하여, 각 기능유닛들과 각 레지스터 파일들의 동작의 흐름이나, 논리적인 연결관계를 동적으로 구성할 수 있다.
각 레지스터 파일들은 각 기능유닛들에 대한 입출력 데이터를 저장하거나, 다른 기능유닛들 또는 다른 레지스터 파일에 입출력 데이터를 바이패싱 한다.
재구성 메모리(920)는 CGRA(970)의 구성요소들의 종류, 구성요소들의 개수, 구성요소들의 물리적 연결상태와 같은 CGRA(970)의 하드웨어 정보를 저장할 수 있다. 재구성 메모리(920)는 ISA 정보를 저장할 수 있다. 재구성 메모리(920)는 루프를 처리하기 위한 명령어들을 저장할 수 있다. 상술된 정보들은 재구성 메모리(920)에 read-only 데이터로 저장될 수 있다. 또한, 재구성 메모리(920)는 루프를 처리하기 위한 명령어들의 스케줄을 모듈로 스케줄러(910)로부터 입력 받아 저장할 수 있다. CGRA(970)에서 공유 레지스터 파일(940)에는, 반복간 의존이 있는 명령어 또는 입출력 값이 저장되는 것이 바람직하다. 따라서, 인터럽트가 검출되는 경우에, 공유 레지스터 파일(940)에 저장된 데이터들은 데이터 메모리(미도시)에 쓰여질 수 있다.
VLIW 모듈(960)에서 VLIW 명령어 메모리(930)은 루프가 아닌 부분에 대한 VLIW 명령어들 및 VLIW 명령어들의 스케줄을 저장한다. 공유 레지스터 파일(940)은 VLIW 모듈(960)에 포함된 기능유닛들에 대한 입출력 데이터를 저장하거나, VLIW 명령어 메모리(930)로부터 패치(fetch)된 명령어들을 저장한다. 공유 레지스터 파일(940)에 저장된 데이터는, VLIW 모듈(960)에 포함된 기능유닛들에 의해 공유될 수 있다. 공유 레지스터 파일(940)에 저장된 데이터는 데이터 메모리(미도시)에 쓰여 질 수 있다. 실시예에 따라서, 스케줄링 장치(90)는 VLIW 명령어들을 스케줄링 하는 VLIW 스케줄러(미도시)를 더 포함할 수 있다.
모듈로 스케줄러(910)는 루프를 처리하기 위한 명령어들을 데이터 메모리(미도시) 또는 재구성 메모리(920)에서 로딩한다. 모듈로 스케줄러(910)는 루프를 처리하기 위한 명령어들을 분석하여 루프를 처리할 CGRA(970)의 동작을 스케줄링 한다. 모듈로 스케줄러(910)는 루프에서 인접한 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출한다. 모듈로 스케줄러(910)는 산출된 후보의 시작간격들을 이용하여 명령어들의 스케줄들을 병렬적으로 탐색한다. 모듈로 스케줄러(910)는 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택한다. 모듈로 스케줄러(910)는 선택한 스케줄을 재구성 메모리(920)에 저장한다. 모듈로 스케줄러(910)의 보다 상세한 실시예는 전술한 도 8의 설명으로부터 이해될 수 있다.
앞서 설명된, 스케줄링 장치(70), 모듈로 스케줄러(80) 또는 스케줄링 장치(90)은 다양한 종류의 프로세서, 칩 또는 시스템으로 구현될 수 있다. 예를 들어, 스케줄링 장치(70), 모듈로 스케줄러(80) 또는 스케줄링 장치(90)는 Reconfigurable Processor (RP), Coarse Grained Array (CGA), Fine Grained Array (FGA), Digital signal processor(DSP), Application-specific instruction-set processor(ASIP), Central processing unit(CPU), Graphic processing unit(GPU) 등의 프로세서로 구현될 수 있다. 또한, 스케줄링 장치(70), 모듈로 스케줄러(80) 또는 스케줄링 장치(90)는 프로세서를 포함하는 Discrete chip 또는 System on a chip(SoC) 등으로 구현될 수 있다. 또한, 스케줄링 장치(70), 모듈로 스케줄러(80) 또는 스케줄링 장치(90)는 프로세서를 포함하는 장치나 시스템들, Personal computer(PC), Server computer, Smart phone, PDA, PMP, Navigation, TV, 컨텐트 재생 장치, Communication system, Image processing system, Graphics processing system, 랩탑, 태블릿 PC 등으로 구현되거나 이에 포함될 수 있다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등), 비휘발성 메모리와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (20)

  1. 루프를 처리하기 위한 명령어들의 모듈로 스케줄링 방법에 있어서,
    상기 루프에서 인접한 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출하는 단계;
    상기 산출된 후보의 시작간격들의 개수 n에 따라서 n개의 스케줄러들을 생성하는 단계;
    상기 n개의 스케줄러들을 통해, 상기 후보의 시작간격들에 대한 n개의 스케줄들을 병렬적으로 탐색하는 단계; 및
    상기 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서, 상기 후보의 시작간격들을 산출하는 단계는,
    사전에 산출된 최소의 시작간격(Minimum II)을 소정의 규칙에 따라서 증가시킴으로써, n개의 시작간격들을 산출하는, 방법.
  3. 삭제
  4. 제 1 항에 있어서,
    상기 방법은,
    상기 루프를 처리할 프로세서에 대한 정보 및 상기 명령어들에 대한 정보를 읽기 전용(read only) 데이터로 설정하는 단계를 더 포함하고,
    상기 읽기 전용 데이터는 상기 n개의 스케줄러들에 의해 공유되는, 방법.
  5. 제 1 항에 있어서, 상기 어느 하나의 스케줄을 선택하는 단계는,
    상기 탐색된 스케줄들 중에서 둘 이상이 유효하다고 판단되면, 상기 유효한 스케줄들 중에서 가장 작은 후보의 시작간격에 대응되는 스케줄을 선택하는, 방법.
  6. 제 1 항에 있어서,
    상기 탐색된 스케줄들이 모두 유효하지 않다고 판단되면, 상기 후보의 시작간격들을 각각 상기 후보의 시작간격들의 개수 n만큼 증가시키는 단계를 더 포함하는, 방법.
  7. 제 1 항에 있어서,
    상기 방법은,
    상기 명령어들 간의 의존 그래프(dependence graph)를 생성하는 단계; 및
    상기 루프를 처리할 프로세서의 자원 제약(resource constraint) 및 상기 명령어들 간의 의존성에 따른 반복 제약(recurrent constraint)을 고려하여, 최소의 시작간격(Minimum II)을 산출하는 단계를 더 포함하는, 방법
  8. 제 7 항에 있어서, 상기 최소의 시작간격을 산출하는 단계는,
    상기 자원 제약을 기초로 산출된 제1 시작간격과 상기 반복 제약을 기초로 산출된 제2 시작간격 중 큰 값을 상기 최소의 시작간격으로 선택하는 단계를 포함하는, 방법.
  9. 제 1 항에 있어서, 상기 n개의 스케줄들을 병렬적으로 탐색하는 단계는,
    상기 후보의 시작간격들을 이용하여 순환 예약 테이블(modulo reservation table)들을 생성하는 단계를 더 포함하는, 방법.
  10. 제 1 항, 제 2 항, 제 4 항 내지 제 9 항 중 어느 한 항에 기재된 방법을 실행하기 위한 프로그램 코드를 기록한 컴퓨터로 읽을 수 있는 기록매체.
  11. 루프를 처리하기 위한 명령어들을 저장하는 메모리; 및
    상기 명령어들을 분석하여 상기 루프를 처리할 프로세서의 동작을 스케줄링하는 모듈로 스케줄러를 포함하고,
    상기 모듈로 스케줄러는, 상기 루프에서 인접한 반복(iteration)들 간의 시작간격(Initiation Interval)에 대하여, 적어도 둘 이상의 후보의 시작간격들을 산출하고, 상기 후보의 시작간격들을 이용하여 상기 명령어들의 스케줄들을 병렬적으로 탐색하고, 상기 탐색된 스케줄들의 유효성에 따라서 어느 하나의 스케줄을 선택하고,
    상기 모듈로 스케줄러는, 상기 산출된 후보의 시작간격들의 개수 n과 동일한 개수의 스케줄들을 병렬적으로 탐색하는 n개의 스케줄러들을 포함하는, 장치.
  12. 제 11 항에 있어서, 상기 모듈로 스케줄러는,
    사전에 산출된 최소의 시작간격(Minimum II)을 소정의 규칙에 따라서 증가시킨 n개의 시작간격들을 상기 후보의 시작간격들로 산출하는, 장치.
  13. 삭제
  14. 제 11 항에 있어서,
    상기 메모리는, 상기 루프를 처리할 프로세서에 대한 정보 및 상기 명령어들을 읽기 전용(read only) 데이터로 저장하고,
    상기 읽기 전용 데이터는, 상기 n개의 스케줄러들에 의해 공유되는, 장치.
  15. 제 11 항에 있어서, 상기 모듈로 스케줄러는,
    상기 탐색된 스케줄들 중에서 둘 이상이 유효하다고 판단되면, 상기 유효한 스케줄들 중에서 가장 작은 후보의 시작간격에 대응되는 스케줄을 선택하는, 장치.
  16. 제 11 항에 있어서, 상기 모듈로 스케줄러는,
    상기 탐색된 스케줄들이 모두 유효하지 않다고 판단되면, 상기 후보의 시작간격들 각각에 상기 후보의 시작간격들의 개수를 더하여, 상기 후보의 시작간격들을 업데이트하는, 장치.
  17. 제 11 항에 있어서, 상기 모듈로 스케줄러는,
    상기 명령어들 간의 의존 그래프(dependence graph)를 생성하는 의존성 검출부; 및
    상기 루프를 처리할 프로세서의 자원 제약(resource constraint) 및 상기 명령어들 간의 의존성에 따른 반복 제약(recurrent constraint)을 고려하여, 최소의 시작간격(Minimum II)을 산출하는 MII 산출부를 포함하는, 장치.
  18. 제 17 항에 있어서, 상기 MII 산출부는,
    상기 자원 제약을 기초로 산출된 제1 시작간격과 상기 반복 제약을 기초로 산출된 제2 시작간격 중 큰 값을 상기 최소의 시작간격으로 선택하는, 장치.
  19. 제 11 항에 있어서, 상기 모듈로 스케줄러는,
    상기 후보의 시작간격들을 이용하여 순환 예약 테이블(modulo reservation table)들을 생성하는, 장치.
  20. 제 11 항에 있어서,
    상기 루프를 처리할 프로세서는, VLIW 모듈 및 재구성 가능한 코어스 그레인 어레이(coarse grained array)를 포함하고,
    상기 모듈로 스케줄러는, 상기 루프가 상기 재구성 가능한 코어스 그레인 어레이에서 처리되도록 스케줄링 하는, 장치.
KR1020130119450A 2013-10-07 2013-10-07 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 KR102161055B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020130119450A KR102161055B1 (ko) 2013-10-07 2013-10-07 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
US14/508,318 US9383981B2 (en) 2013-10-07 2014-10-07 Method and apparatus of instruction scheduling using software pipelining

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130119450A KR102161055B1 (ko) 2013-10-07 2013-10-07 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20150040663A KR20150040663A (ko) 2015-04-15
KR102161055B1 true KR102161055B1 (ko) 2020-09-29

Family

ID=52810669

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130119450A KR102161055B1 (ko) 2013-10-07 2013-10-07 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치

Country Status (2)

Country Link
US (1) US9383981B2 (ko)
KR (1) KR102161055B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112306500B (zh) * 2020-11-30 2022-06-07 上海交通大学 一种针对粗粒度可重构结构的降低多类访存冲突编译方法
US11861366B2 (en) * 2021-08-11 2024-01-02 Micron Technology, Inc. Efficient processing of nested loops for computing device with multiple configurable processing elements using multiple spoke counts
US20240086162A1 (en) * 2022-09-09 2024-03-14 Microsoft Technology Licensing, Llc Interleaved machine instruction placement in memory

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002305542A (ja) 2000-12-22 2002-10-18 Alcatel 光ルータにおけるデータチャネルスケジューラの統一連想メモリ
US20030233643A1 (en) * 2002-06-18 2003-12-18 Thompson Carol L. Method and apparatus for efficient code generation for modulo scheduled uncounted loops
WO2004034290A2 (en) 2002-10-07 2004-04-22 Hewlett-Packard Development Company L. P. Method of using clock cycle-time in determining loop schedules during circuit design
KR101293700B1 (ko) * 2012-02-23 2013-08-06 국립대학법인 울산과학기술대학교 산학협력단 코어스 그레인드 재구성 구조를 위한 코드 생성 장치 및 그 코드 생성 방법
JP5464146B2 (ja) 2008-11-14 2014-04-09 日本電気株式会社 スケジュール決定装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5835776A (en) * 1995-11-17 1998-11-10 Sun Microsystems, Inc. Method and apparatus for instruction scheduling in an optimizing compiler for minimizing overhead instructions
US6151705A (en) * 1997-10-30 2000-11-21 Hewlett-Packard Company Efficient use of the base register auto-increment feature of memory access instructions
US6671878B1 (en) 2000-03-24 2003-12-30 Brian E. Bliss Modulo scheduling via binary search for minimum acceptable initiation interval method and apparatus
US6651247B1 (en) * 2000-05-09 2003-11-18 Hewlett-Packard Development Company, L.P. Method, apparatus, and product for optimizing compiler with rotating register assignment to modulo scheduled code in SSA form
CA2439137A1 (en) * 2003-08-08 2005-02-08 Ibm Canada Limited - Ibm Canada Limitee Improved scheduling technique for software pipelining
US7444628B2 (en) * 2004-08-30 2008-10-28 International Business Machines Corporation Extension of swing modulo scheduling to evenly distribute uniform strongly connected components
US8230436B2 (en) * 2008-01-10 2012-07-24 Microsoft Corporation Aggregating recurrent schedules to optimize resource consumption
KR20150040662A (ko) * 2013-10-07 2015-04-15 삼성전자주식회사 모듈로 스케줄링 방법, 모듈로 스케줄링 장치, 모듈로 스케줄링에 따라서 동작하는 재구성 가능한 프로세서 및 재구성 가능한 프로세서의 동작 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002305542A (ja) 2000-12-22 2002-10-18 Alcatel 光ルータにおけるデータチャネルスケジューラの統一連想メモリ
US20030233643A1 (en) * 2002-06-18 2003-12-18 Thompson Carol L. Method and apparatus for efficient code generation for modulo scheduled uncounted loops
WO2004034290A2 (en) 2002-10-07 2004-04-22 Hewlett-Packard Development Company L. P. Method of using clock cycle-time in determining loop schedules during circuit design
JP5464146B2 (ja) 2008-11-14 2014-04-09 日本電気株式会社 スケジュール決定装置
KR101293700B1 (ko) * 2012-02-23 2013-08-06 국립대학법인 울산과학기술대학교 산학협력단 코어스 그레인드 재구성 구조를 위한 코드 생성 장치 및 그 코드 생성 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Iterative Modulo Scheduling, B. Ramakrishna Rau, The International Journal ofParallel Processing, Volume 24, Number 1. (1996.2.)

Also Published As

Publication number Publication date
US9383981B2 (en) 2016-07-05
US20150106603A1 (en) 2015-04-16
KR20150040663A (ko) 2015-04-15

Similar Documents

Publication Publication Date Title
Canis et al. Modulo SDC scheduling with recurrence minimization in high-level synthesis
JP5882950B2 (ja) ステージド・ループ命令
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
KR101702651B1 (ko) 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
KR101738640B1 (ko) 트레이스 데이터 압축 장치 및 방법
US9355061B2 (en) Data processing apparatus and method for performing scan operations
JP2009524866A (ja) プログラムの並列実行のためのシステム及び方法
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
US20100095091A1 (en) Processor, Method and Computer Program
US20160371067A1 (en) Determination of branch convergence in a sequence of program instruction
US9354850B2 (en) Method and apparatus for instruction scheduling using software pipelining
Holsti et al. Status of the Bound-T WCET tool
US9841957B2 (en) Apparatus and method for handling registers in pipeline processing
KR20110109590A (ko) 재구성 가능한 프로세서의 시뮬레이션 장치 및 방법
CN113157318A (zh) 基于倒计时缓冲的gpdsp汇编移植优化方法及系统
KR102161055B1 (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
Ferreira et al. A run-time modulo scheduling by using a binary translation mechanism
US20120096247A1 (en) Reconfigurable processor and method for processing loop having memory dependency
US20120089823A1 (en) Processing apparatus, compiling apparatus, and dynamic conditional branch processing method
CN114127681A (zh) 用于实现数据流ai应用的自主加速的方法和装置
Shao et al. Map-reduce inspired loop parallelization on CGRA
Jung et al. Feasibility of high level compiler optimizations in online synthesis
KR102168175B1 (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
El Moussawi et al. Superword level parallelism aware word length optimization
KR20130108878A (ko) 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법

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