KR102244135B1 - 모듈로 스케줄링 방법 및 장치 - Google Patents

모듈로 스케줄링 방법 및 장치 Download PDF

Info

Publication number
KR102244135B1
KR102244135B1 KR1020140119362A KR20140119362A KR102244135B1 KR 102244135 B1 KR102244135 B1 KR 102244135B1 KR 1020140119362 A KR1020140119362 A KR 1020140119362A KR 20140119362 A KR20140119362 A KR 20140119362A KR 102244135 B1 KR102244135 B1 KR 102244135B1
Authority
KR
South Korea
Prior art keywords
node
search
subsequent
iteration
recurrence
Prior art date
Application number
KR1020140119362A
Other languages
English (en)
Other versions
KR20160029588A (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 KR1020140119362A priority Critical patent/KR102244135B1/ko
Priority to US14/687,284 priority patent/US10423607B2/en
Publication of KR20160029588A publication Critical patent/KR20160029588A/ko
Application granted granted Critical
Publication of KR102244135B1 publication Critical patent/KR102244135B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2462Approximate or statistical queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

루프(loop)가 포함하는 명령어들 간의 의존관계를 포함하는 데이터 의존성 그래프(dependence graph)를 획득하고 데이터 의존성 그래프에서, 사이클을 형성하는 명령어들의 집합인 리커런스(recurrence)를 탐색하고, 리커런스의 처리 순서를 결정하는 스케줄링하고, 리커런스를 탐색하는 것은 이터레이션 디스턴스(Iteration Distance)의 합이 소정의 임계값보다 작은 리커런스만을 탐색하고, 이터레이션 디스턴스는 리커런스에 포함된 소정의 명령어를 처리한 후 소정의 명령어의 처리 결과에 의존하는 다른 명령어를 처리할 수 있을 때까지 소요되는 이터레이션 횟수인 모듈로 스케줄링 방법이 개시된다.

Description

모듈로 스케줄링 방법 및 장치{A method and apparatus for modulo scheduling}
본 발명은 모듈로 스케줄링의 수행 시간을 단축시키는 방법 및 장치에 관한 것으로, 보다 구체적으로는 소프트웨어 파이프라이닝을 구현하는 대표적인 방법인 모듈로 스케줄링에서 데이터 의존성 그래프 내의 리커런스(recurrence)를 효율적으로 탐색하는 방법 및 장치에 대한 것이다.
멀티미디어, 통신 분야 등에서 사용되는 디지털 신호 처리는 알고리즘의 특성상 동일한 연산이 반복되는 루프(loop) 과정을 다수 포함한다. 루프의 처리 속도를 높이기 위해서 루프 레벨 병렬화(loop level parallelism, LLP)가 많이 이용된다. 이러한 루프 레벨 병렬화의 대표적인 예는 소프트웨어 파이프라이닝(software pipelining)이다.
소프트웨어 파이프라이닝은 일련의 연산을 반복하는 루프에 있어서, 서로 다른 반복(iteration) 간에 의존성이 없으면 각각의 연산을 동시에 처리할 수 있으므로, 현재의 반복이 끝나기 전에 다음 반복을 수행하여 서로 다른 반복을 병렬적으로 처리할 수 있다.
루프에서 현재의 반복이 시작되고 다음의 반복이 시작될 때까지의 시간 간격을 시작 간격(initiation interval, II)이라 하며, 소프트웨어 파이프라이닝의 목표는 이 시작 간격을 가능한 작게 하여, 루프 수행의 효율(throughput)을 극대화하는 데 있다.
소프트웨어 파이프라이닝의 대표적인 예는 모듈로 스케줄링(modulo scheduling) 방법이 있다. 그러나, 모듈로 스케줄링 방법에서 데이터 의존성 그래프 내의 리커런스(recurrence)를 탐색하는데 소요되는 시간이 매우 많으므로 전체적인 모듈로 스케줄링 수행 시간을 저하시킨다.
모듈로 스케줄링에서 가장 많은 시간을 차지하는 리커런스 탐색을 효율적으로 수행하여, 전체적인 모듈로 스케줄링 시간을 단축시키는 방법 및 장치를 제공한다.
또한, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공하는데 있다. 본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 실시예에 따른 모듈로 스케줄링 장치는 루프(loop)가 포함하는 명령어들 간의 의존관계를 포함하는 데이터 의존성 그래프(data dependence graph)를 획득하는 데이터 의존성 그래프 획득부, 상기 데이터 의존성 그래프에서, 사이클을 형성하는 명령어들의 집합인 리커런스(recurrence)를 탐색하는 리커런스 탐색부, 및 상기 리커런스의 처리 순서를 결정하여 스케줄링하는 스케줄링부를 포함하고, 상기 리커런스 탐색부는 이터레이션 디스턴스(Iteration Distance)의 합이 소정의 임계값보다 작은 리커런스만을 탐색하고, 상기 이터레이션 디스턴스는 상기 리커런스에 포함된 소정의 명령어를 처리한 후 상기 소정의 명령어의 처리 결과에 의존하는 다른 명령어를 처리할 수 있을 때까지 소요되는 이터레이션 횟수인 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색부는, 소스 노드(Source Node)가 S 인 경우, 상기 소스 노드 S로부터 출발하여 상기 소스 노드 S로 되돌아가는 경로인 리커런스를 탐색하고, 상기 탐색을 시작하기 전에 사용 가능한 이터레이션 디스턴스인 가용 이터레이션 디스턴스(available iteration distance)를 상기 임계값으로 초기화하고, 상기 노드 S의 하나 이상의 후속 노드 방향으로 리커런스를 탐색하는 동안에, 상기 이터레이션 디스턴스를 차감해가면서 상기 가용 이터레이션 디스턴스를 갱신하고, 상기 가용 이터레이션 디스턴스가 0 보다 작아지면 탐색을 중단하는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색부는, 상기 탐색이 중단된 경우, 방문하지 않은 후속 노드를 재귀적으로 방문하여 리커런스 탐색을 시도하는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색부는, 현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D 인 경우, 상기 노드 W가 상기 소스 노드 S가 아니고, 상기 가용 이터레이션 디스턴스가 상기 D 보다 작거나 같으면 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색부는, 현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D이고, 상기 노드 W 에서 상기 소스 노드 S에 도달할 수 있는 경로 상에 존재하는 이터레이션 디스턴스의 합이 A인 경우, 상기 D에 상기 A 를 더한 값보다 상기 가용 이터레이션 디스턴스가 작으면, 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색부는, 현재 방문 중인 노드가 V이고, 상기 노드 V의 후속 노드가 W 인 경우, 상기 노드W가 소스 노드가 아니고 노드 W가 현재까지의 경로에 기 저장되어 있으면, 상기 노드W방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색부는, 현재 방문 중인 노드가 V이고, 상기 노드 V의 후속 노드가 W 인 경우, 상기 노드W가 소스 노드가 아니고 노드 W가 현재까지의 경로에 기 저장되어 있으면, 상기 노드W방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 스케줄링부는 상기 탐색된 하나 이상의 리커런스를 상기 최소 시작 간격(Minimum Initiation Interval: MII)이 큰 순서대로 처리되도록 스케줄링하고, 상기 최소 시작 간격은 상기 각각의 리커런스를 반복하여 처리하기 위해 필요한 최소의 시간 간격인 것을 특징으로 한다.
일 실시예에 따른 모듈로 스케줄링 방법은 루프(loop)가 포함하는 명령어들 간의 의존관계를 포함하는 데이터 의존성 그래프(dependence graph)를 획득하는 단계, 상기 데이터 의존성 그래프에서, 사이클을 형성하는 명령어들의 집합인 리커런스(recurrence)를 탐색하는 단계, 및 상기 리커런스의 처리 순서를 결정하여 스케줄링 하는 단계를 포함하고, 상기 리커런스를 탐색하는 단계는 이터레이션 디스턴스(Iteration Distance)의 합이 소정의 임계값보다 작은 리커런스만을 탐색하고, 상기 이터레이션 디스턴스는 상기 리커런스에 포함된 소정의 명령어를 처리한 후 상기 소정의 명령어의 처리 결과에 의존하는 다른 명령어를 처리할 수 있을 때까지 소요되는 이터레이션 횟수인 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스를 탐색하는 단계는, 소스 노드(Source Node)가 S 인 경우, 상기 소스 노드 S로부터 출발하여 상기 소스 노드 S로 되돌아가는 경로인 리커런스를 탐색하고, 상기 탐색을 시작하기 전에 사용 가능한 이터레이션 디스턴스인 가용 이터레이션 디스턴스(available iteration distance)를 상기 임계값으로 초기화하고, 상기 노드 S의 하나 이상의 후속 노드 방향으로 리커런스를 탐색하는 동안에, 상기 이터레이션 디스턴스를 차감해가면서 상기 가용 이터레이션 디스턴스를 갱신하고, 상기 가용 이터레이션 디스턴스가 0 보다 작아지면 탐색을 중단하는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스를 탐색하는 단계는, 상기 탐색이 중단된 경우, 방문하지 않은 후속 노드를 재귀적으로 방문하여 리커런스 탐색을 시도하는 단계를 더 포함한다.
일 실시예에 따른 상기 리커런스를 탐색하는 단계는, 현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D 인 경우, 상기 노드 W가 상기 소스 노드 S가 아니고, 상기 가용 이터레이션 디스턴스가 상기 D 보다 작거나 같으면 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스를 탐색하는 단계는, 현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D이고, 상기 노드 W 에서 상기 소스 노드 S에 도달할 수 있는 경로 상에 존재하는 이터레이션 디스턴스의 합이 A인 경우, 상기 D에 상기 A 를 더한 값보다 상기 가용 이터레이션 디스턴스가 작으면, 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 리커런스 탐색하는 단계는, 현재 방문 중인 노드가 V이고, 상기 노드 V의 후속 노드가 W 인 경우, 상기 노드W가 소스 노드가 아니고 노드 W가 현재까지의 경로에 기 저장되어 있으면, 상기 노드W방향으로 탐색하지 않는 것을 특징으로 한다.
일 실시예에 따른 상기 스케줄링 하는 단계는, 상기 탐색된 하나 이상의 리커런스를 상기 최소 시작 간격(Minimum Initiation Interval: MII)이 큰 순서대로 처리되도록 스케줄링하는 단계를 포함하고, 상기 최소 시작 간격은 상기 각각의 리커런스를 반복하여 처리하기 위해 필요한 최소의 시간 간격인 것을 특징으로 한다.
일 실시예에 따른 상기 모듈로 스케줄링 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체가 제공된다.
도1은 루프의 최소 시작 간격(Minimum Initiation Interval: MII) 을 설명하기 위한 도면이다.
도2은 일 실시예에 따른 모듈로 스케줄링 장치를 도시한 것이다.
도3은 일 실시예에 따른 모듈로 스케줄링 방법의 흐름도를 나타낸다.
도4는 일 실시예에 따른 데이터 의존성 그래프를 나타낸다.
도5은 일 실시예에 따른 모듈로 스케줄링 장치가 데이터 의존성 그래프에서 리커런스를 탐색하는 방법을 나타낸다.
도6은 일 실시예에 따른 모듈로 스케줄 장치가 데이터 의존성 그래프 내에서 리커런스를 탐색하는 방법을 나타낸다.
도7은 일 실시예에 따른 데이터 의존그래프에 이터레이션 디스턴스를 표시한 도면이다.
도8은 일 실시예에 따른 모듈로 스케줄링 방법을 적용하여 성능을 측정한 결과이다.
이하에서는 도면을 참조하여 실시 예들을 상세히 설명한다. 본 명세서에 기재된 실시 예와 도면에 도시된 구성은 본 발명의 일 실시 예에 불과할 뿐이고, 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형 예들이 있을 수 있음을 이해하여야 한다.
도1은 루프의 최소 시작 간격(Minimum Initiation Interval: MII) 을 설명하기 위한 도면이다.
의존성 또는 의존 관계란 데이터 또는 명령어들의 처리 순서를 의미하는 것으로, 처리해야 할 명령어가 의존성이 존재하면 즉, 특정 명령어의 처리 결과가 다른 명령어의 입력이 되는 경우에는 명령어들의 처리 순서를 지킬 필요가 있다. 따라서, 이러한 명령어들은 서로 병렬로 처리하거나 겹쳐서 실행할 수 없다.
데이터 의존성 그래프(data dependency graph)는 에지 웨이트(edge weight), 즉 레이턴시(latency) 와 이터레이션 디스턴스(iteration distance)로 표현된다. 레이턴시란 명령어의 종류별로 연산 결과를 얻기까지 소요되는 클럭 사이클을 의미한다. 이터레이션 디스턴스란 리커런스에 포함된 소정의 명령어를 처리한 후 상기 소정의 명령어의 처리 결과에 의존하는 다른 명령어를 처리할 수 있을 때까지 소요되는 이터레이션 횟수를 의미한다. 예를 들어, 노드 160과 노드 175 사이에 존재하는 이터레이션 디스턴스는 2이다.
리커런스(recurrence)란 데이터 의존성 그래프 내에서 사이클을 형성하고 있는 명령어(즉, 노드)들의 집합을 말한다. 따라서, 리커런스에 존재하는 이터레이션 디스턴스를 모두 합한 값은 리커런스 내의 소스 노드가 반복하여 수행되기까지 소요되는 이터레이션의 횟수를 의미한다.
리커런스의 최소 시작 간격(Minimum Initiation Interval: MII)란, 리커런스에 포함된 간선, 즉 레이턴시의 총합을 이터레이션 디스턴스의 총합으로 나눈 값을 의미한다. 즉, 하나의 리커런스가 반복되기까지 필요한 시간 또는 주기를 말한다. 따라서, 예를 들어, 최소 시작 간격이 2 인 리커런스가 데이터 의존성 그래프 내에 포함되어 있을 때에, 해당 루프는 최소 시작 간격 보다 짧은 주기를 가지고 반복될 수 없다.
도1의 원으로 표시된 각각의 노드들은 프로세서가 처리해야 할 명령어를 의미하고, 수평으로 도시된 직선들의 세로 간격은 하나의 명령어가 처리되는데 필요한 시간, 즉 레이턴시(latency)를 의미한다.
루프1(120)은 변수 i 를 증가시키면서, a[i] 와1을 더한 값을 a[i + 1] 에 저장하는 루프이다. 첫 번째 이터레이션(i = 0) 에서, a[1] 에 a[0] + 1 의 값을 저장하는 연산이 수행되므로, 프로세서는 a[0] 을 메모리로부터 로드(Load, 125)하여 1을 더한 값을 a[1] 에 저장(Store, 130)한다. 두 번째 이터레이션(i = 1) 에서, 프로세서는 a[1]을 메모리로부터 로드(135)하여 1을 더한 값을 a[2] 에 저장(140)하는 연산을 수행한다. 두 번째 이터레이션에서 프로세서가 메모리로부터 로드하는 a[1] 의 값은 첫 번째 이터레이션에서 결정되므로 첫 번째 이터레이션이 완료된 후 두 번째 이터레이션이 수행될 수 있다. 즉, 첫 번째 이터레이션과 두 번째 이터레이션은 병렬로 처리될 수 없다.
즉, 루프1의 노드130 는 노드125 의 처리 결과에 의존하고 있으며, 노드135 는 노드130의 처리 결과에 의존하고 있다. 따라서 노드 125, 노드130, 및 노드135 는 사이클을 형성하고 있으며 이러한 사이클을 형성하는 노드(즉, 명령어)들의 집합을 리커런스라 한다.
노드 125, 노드 130, 노드 135로 구성된 루프1의 리커런스에서 소요되는 레이턴스의 총합을 구하면 아래와 같다. 루프1의 리커런스에서, 프로세서가 로드 명령 (125)을 처리한 후 다시 로드 명령(135)을 처리할 때까지 3 레이턴시가 필요하고 하나의 이터레이션 디스턴스를 거쳐야 한다. 바꾸어 말하면, 루프1의 리커런스에서 소스 노드에서 출발하여 다시 소스 노드로 되돌아오기까지 3레이턴스가 필요하며 이터레이션 디스턴스의 총합은 1이다. 따라서, 루프 1의 최소 시작 간격은 3 이므로, 최소 3 레이턴시의 주기로 이터레이션이 반복됨을 의미한다.
루프2(150) 은 변수 i 를 증가시키면서, a[i] 와 1을 더한 값을 a[i+2] 에 저장하는 루프이다.
첫 번째 이터레이션(i = 0)에서, a[2] 에 a[0] + 1의 값을 저장하는 연산이 수행되므로, 프로세서는 a[0] 을 메모리로부터 로드(Load, 155)하여 1을 더한 후, a[2] 에 저장(store, 160) 한다. 저장 명령(160)은 로드된 a[0]의 값을 이용하므로 로드 명령(155)에 의존한다.
두 번째 이터레이션(i = 1) 에서, 프로세서는 a[1]을 메모리로부터 로드(165)하여 1을 더한 후, a[3]에 저장(170)한다. a[1] 의 값은 첫 번째 이터레이션에서 결정되는 것이 아니므로, 프로세서는 첫 번째 이터레이션이 완료될 때까지 기다릴 필요 없이 저장 명령(160)과 병렬적으로 로드 명령(165)을 처리할 수 있다.
세 번째 이터레이션(i = 2)에서, a[2] + 1의 값을 a[4]에 저장하는 연산이 수행되므로, 프로세서는 a[2] 를 메모리로부터 로드(175) 하여 1을 더한 값을 a[4] 에 저장(180)한다. a[2]는 첫 번째 이터레이션에서 결정되므로, 세 번째 이터레이션의 로드 명령(175)은 첫 번째 이터레이션의 저장 명령(160)과 병렬적으로 처리될 수 없다. 다시 말하면, 첫 번째 이터레이션이 완료된 후에야 세 번째 이터레이션이 수행될 수 있으므로 로드 명령(175)은 저장 명령(160)의 처리 결과에 의존하고 있다.
따라서, 노드160은 노드 155에 의존하고 있으며, 노드 175는 노드 160에 의존하고 있으므로, 노드155, 노드160, 노드175는 사이클을 형성하고 있고 리커런스에 해당한다. 루프1(120)에서와 같이 루프2(150)내의 리커런스의 레이턴스의 총합과 이터레이션 디스턴스를 계산할 수 있다. 레이턴시의 총합은 3이고, 이터레이션 디스턴스의 총합은 소스 노드(155)에서 다시 소스 노드(170)까지 도달하기까지 두 개의 이터레이션이 필요하므로 2이다. 따라서, 루프2의 최소 시작 간격은 3/2 이고, 최소1.5 레이턴시의 주기를 가지고 반복된다.
도2은 일 실시예에 따른 모듈로 스케줄링 장치를 도시한 것이다.
일 실시예에 따른 모듈로 스케줄링 장치(200)은 데이터 의존성 그래프 획득부(210), 리커런스 탐색부(220), 리커런스의 MII 계산부(230), 스케줄링부(240)를 포함할 수 있다.
데이터 의존성 그래프 획득부(210)은 명령어 사이의 의존성을 나타내는 그래프를 나타내는 데이터 의존성 그래프를 획득할 수 있다. 명령어들 간의 의존성 관계의 분석은 소프트웨어 파이프라이닝과 같은 명령어들의 병렬 처리에 있어서 중요한 작업으로, 처리해야할 어떤 명령어들 사이에 의존성이 존재하면 그러한 명령어들은 병렬적으로 처리될 수 없음은 상술하였다.
데이터 의존성 그래프 획득부(210)은 프로세서가 처리해야 할 명령어는 노드로, 명령어들 사이에 존재하는 의존성은 방향 간선(directed edge)으로, 명령어가 처리되는데 필요한 시간(즉, 레이턴시)은 가중치로 그래프를 표현할 수 있으나 이에 제한되지 않는다.
리커런스 탐색부(220)은 획득된 데이터 의존성 그래프 내에 있는 리커런스를 탐색할 수 있다. 상술한 바와 같이 리커런스란 데이터 의존성 그래프 내에서 사이클을 형성하는 명령어들의 집합이다. 리커런스 탐색부(220)는 데이터 의존성 그래프 내에 존재하는 모든 리커런스를 탐색할 수도 있고, 소정의 조건을 만족하는 리커런스만을 선택적으로 탐색할 수도 있다. 이는 도5, 도6, 도7을 참조하여 후술한다.
리커런스의 MII 계산부(230)는 탐색된 리커런스 각각의 최소 시작 간격 (MII) 를 계산할 수 있다. 상술한 바와 같이, 최소 시작 간격(Minimum Initiation Interval: MII)은 리커런스에 포함된 간선, 즉 레이턴시의 총합을 이터레이션 디스턴스의 총합으로 나눈 값을 의미한다. 따라서, 최소 시작 간격이 A 인 리커런스가 데이터 의존성 그래프 내에 포함되어 있을 때에, 해당 루프는 A 보다 짧은 주기를 가지고 반복될 수 없다.
모듈로 스케줄링 장치(200)의 목적은 루프의 이터레이션을 최대한 짧은 주기로 반복하도록 스케줄링하는 것이기 때문에, 스케줄링부(240)는 리커런스 MII 계산부(230)에서 계산된 MII 를 이용하여 리커런스의 처리 순서를 결정할 수 있다.
스케줄링부(240)는 탐색된 리커런스들의 처리 순서를 결정할 수도 있으며, 탐색된 각각의 리커런스에 포함된 명령어들의 순서를 결정할 수 있다.
스케줄링부(240)는 루프 바디 내에 존재하는 리커런스를 우선적으로 스케줄링할 수 있다. 의존성(dependence)으로 인해, 루프의 각 반복들을 일정한 사이클만큼 떨어져서 실행하게 되는데 이 간격을 시작 간격(Initiation Interval: II)이라 함은 상술하였다. 다른 노드들과 달리 리커런스는 반드시 시작 간격 (II) 사이클 안에 스케줄이 완료되어야 한다는 제약이 있기 때문에, 스케줄링부(240)는 루프 바디 내의 다른 동작들이 리소스(resource)를 점유하기 이전에 리커런스에 우선 순위를 두고 스케줄링을 할 수 있다.
또한, 스케줄링부(240)는 하나 이상의 리커런스를 최소 시작 간격(MII) 순으로 정렬하고 가장 큰 최소 시작 간격(MII)을 가지는 리커런스부터 스케줄링할 수 있다. 만약 다른 명령어가 하드웨어 리소스를 점유하여, 최소 시작 간격이 큰 리커런스에 속한 명령어들의 스케줄링이 수행되지 못하여 지연된다면, 후속적으로 수행되는 명령어들도 모두 지연되기 때문에 주어진 시작 간격(II)에서 이터레이션의 수행에 실패할 가능성이 높기 때문이다.
일 실시예에 따르면, 스케줄링부(240)는 연산된 최소 시작 간격(MII)로부터 시작 간격(II)값을 증가시켜 나가면서, 분석된 메모리 의존 관계를 고려해서 명령어들을 스케줄링할 수 있다. 예를 들면, 스케줄링부(240)는 시작 간격(Initiation Interval: II)값을 최소 시작 간격(Minimum Initiation Interval: MII)값으로부터 시작하여 1씩 증가시키면서, 이터레이션의 가장 빠른 주기를 찾을 수 있다. 이를 시행착오법(trial-and-error)이라고도 한다. 그러나 스케줄링부(240)는 시행착오법 이외에 시작 간격의 값을 계산하는 다른 방법을 사용할 수 있음은 자명하다.
스케줄링부(240)은 소프트웨어 파이프라인된 루프(loop)의 프롤로그(Prologue) 또는 에필로그(Epilogue)를 획득할 수 있다.
도3은 일 실시예에 따른 모듈로 스케줄링 방법의 흐름도를 나타낸다.
도 3은 도 2 에 도시된 모듈로 스케줄링 장치(200)에서 수행되는 모듈로 스케줄링 방법을 설명하기 위한 도면이다. 따라서, 이하 생략된 내용이라 하더라도 도2의 모듈로 스케줄링 장치에 관하여 이상에서 기술된 내용은 도 3의 일 실시 예에 따른 모듈로 스케줄링 방법에도 적용된다.
단계310 에서 모듈로 스케줄링 장치(200)는 명령어 사이의 의존성을 나타내는 데이터 의존성 그래프를 획득할 수 있다. 단계 310에서 모듈로 스케줄링 장치(200)는 프로세서가 처리해야 할 명령어는 노드로, 명령어들 사이에 존재하는 의존성은 방향 간선(directed edge)으로, 명령어가 처리되는데 필요한 시간(즉, 레이턴시)은 가중치로 표현할 수 있으나 이에 제한되지 않는다.
단계 320에서 모듈로 스케줄링 장치(200)는 데이터 의존성 그래프 내의 리커런스(recurrence)를 탐색할 수 있다. 리커런스란 데이터 의존성 그래프 내에서 사이클을 형성하는 명령어들의 집합이다. 데이터 의존성 그래프 내의 리커런스 탐색은 전체적인 모듈로 스케줄링에서 가장 많은 수행시간을 차지하므로, 모듈로 스케줄링 장치(200)는 데이터 의존성 그래프 내에 존재하는 모든 리커런스를 탐색하는 대신 소정의 조건을 만족하는 리커런스를 선택적으로 탐색하여 모듈로 스케줄링의 전체 수행시간을 단축시킬 수 있다. 이는 도5, 도6, 도7을 참조하여 후술한다.
단계 330에서 모듈로 스케줄링 장치(200)는 탐색된 리커런스 각각의 최소 시작 간격(Minimum Initiation Interval: MII)을 계산할 수 있다. 상술한 바와 같이, 최소 시작 간격란 리커런스에 포함된 간선, 즉 레이턴시의 총합을 이터레이션 디스턴스의 총합으로 나눈 값을 의미한다.
단계 340에서 모듈로 스케줄링 장치(200)는 탐색된 각각의 리커런스에 포함된 명령어들의 순서를 결정할 수 있고, 탐색된 리커런스들의 순서를 결정할 수도 있다.
단계 340에서 모듈로 스케줄링 장치(200)는 하나 이상의 리커런스를 시작 간격(Iteration Interval: II) 별로 정렬하고 가장 큰 최소 시작 간격을 가지는 리커런스에 포함되는 명령어부터 스케줄링할 수 있다.
단계 340에서 모듈로 스케줄링 장치(200)는 시행착오법을 이용하여 시작 간격(II, Initiation Interval)값을 최소 시작 간격(MII)값으로부터 시작하여 1씩 증가시키면서, 이터레이션의 가장 빠른 주기를 찾을 수 있다.
단계 340에서 모듈로 스케줄링 장치(200)는 프롤로그와 에필로그를 획득할 수도 있고, 루프 트립 카운트(loop trip count)가 조정될 수도 있다.
도 4는 일 실시예에 따른 데이터 의존성 그래프를 나타낸다.
상술한 바와 같이, 모듈로 스케줄링 장치(200)의 데이터 의존성 그래프 획득부(210)는 명령어 사이의 의존성을 나타내는 데이터 의존성 그래프(400)를 획득할 수 있다. 도4의 데이터 의존성 그래프(400)의 각 방향 간선(directed edge)은 의존성을 나타내고, 각 노드는 명령어를 나타낼 수 있다. 이하, “노드 A가 처리된다”는 것은 “프로세서가 루프 내에 존재하는 명령어A를 처리한다”와 동일한 의미로 사용된다.
예를 들어, 노드B (420)가 처리되어야 노드 F(460)가 처리될 수 있으며. 노드 A(410), 노드C(430), 노드E(450)가 처리되어야 노드D(440)가 처리될 수 있다.
상술한 바와 같이, 모듈로 스케줄링 장치(200) 의 리커런스 MII 계산부(230)는 루프의 이터레이션을 최대한 짧은 주기로 반복시키기 위해 데이터 의존성 그래프 내에 존재하는 각각의 리커런스를 탐색하여 MII을 계산하는 작업이 필요하므로, 리커런스 탐색부(220)는 데이터 의존성 그래프(400)에 존재하는 리커런스를 탐색할 필요가 있다.
리커런스 탐색부(220)는 노드 A(410)를 소스 노드로 하여, 노드A(410)으로부터 출발하여 후속 노드들을 거쳐서 다시 소스 노드로 되돌아갈 수 있는 경로인 리커런스를 탐색할 수 있다. 리커런스 탐색부(220)는 데이터 의존성 그래프(400)에 존재하는 경로 {A, B, F, A}, {A, D, B, F, A}를 리커런스로 판단하여 출력할 수 있다. 리커런스 탐색부(220)는 경로 {A, B, C, D, B, F, A} 는 B 노드를 중복하여 포함하고 있으므로 리커런스로 판단하지 않을 수 있다. 이는 도5, 도6, 도7을 참조하여 후술한다.
리커런스 탐색부(220)는 주어진 데이터 의존성 그래프에서 리커런스를 탐색하기 위해, 다양한 탐색 알고리즘과 스택과 큐, 연결 리스트와 같은 자료 구조를 사용할 수 있다. 일 실시예에 따르면, 모듈로 스케줄링 장치는 데이터 의존성 그래프 내에 존재하는 리커런스를 효율적으로 탐색하기 위해 존슨 알고리즘(Johnson Algorithm)을 사용할 수 있다.
일 실시예에 따르면, 리커런스 탐색부(220)는 데이터 의존성 그래프(400) 내에 존재하는 모든 리커런스를 찾을 필요는 없다. 데이터 의존성 그래프(400) 내의 모든 리커런스를 탐색하는 것은 그래프의 노드 또는 간선의 개수, 형태에 따라 지수적으로 증가하는 복잡도를 가지기 때문이다.
일 실시예에 따르면, 리커런스 탐색부(220)가 존슨 알고리즘을 사용하여 데이터 의존성 그래프 내에 존재하는 모든 리커런스를 탐색하면 시간 복잡도는 O((n+e)(c+1)) 로 최악의 경우 2^n 의 복잡도를 가질 수 있다. (n은 명령어의 수, e는 명령어 간의 데이터 의존성(간선 개수), c는 데이터 의존성 그래프 내의 리커런스의 수)
일 실시예에 따르면 리커런스 탐색부(220)는 데이터 의존성 그래프 내의 모든 리커런스를 탐색하는 대신, 최소 시작 간격(Minimum Initiation Interval: MII)이 상대적으로 긴 리커런스만을 선택적으로 탐색하여 리커런스를 탐색하는데 소요되는 시간과 비용을 절감할 수 있다. 리커런스 탐색부(220)가 반드시 데이터 의존성 그래프 내의 모든 리커런스를 탐색하여야만 스케줄링부(240)가 스케줄링에 성공하는 것은 아니기 때문이다.
리커런스의 최소 시작 간격(Minimum Initiation Interval: MII)은 수학식 1과 같이 리커런스의 모든 간선의 레이턴시의 총합을 리커런스에 존재하는 이터레이션 디스턴스의 총합으로 나눈 것이다.
<수학식 1>
리커런스 최소 시작 간격(Minimum Initiation Interval: MII) =
Figure 112014085592659-pat00001
수학식 1과 같이, 리커런스에 포함된 노드들의 이터레이션 디스턴스의 총합이 작을수록 시작 간격은 큰 값을 가진다. 따라서, 리커런스 탐색부(220)는 데이터 의존성 그래프 내의 리커런스 중에 이터레이션 디스턴스의 총합이 임계값보다 작은 리커런스만을 탐색할 수 있으며, 스케줄링부(240)는 탐색된 리커런스를 우선적으로 스케줄링하여 소프트웨어 파이프라이닝의 성능을 향상시킬 수 있다.
일 실시예에 따르면, 리커런스 탐색부(220)는 임계값으로 1 또는 2를 사용할 수 있다.
도5은 일 실시예에 따른 모듈로 스케줄링 장치가 데이터 의존성 그래프에서 리커런스를 탐색하는 방법을 나타낸다.
일 실시예에 따르면, 모듈로 스케줄링 장치(200)는 현재 방문 중인 노드의 후속 노드(Successor node)를 저장하기 위해 스택(Stack), 큐(Queue)또는 연결 리스트와 같은 자료 구조를 이용할 수 있다. 이하, 모듈로 스케줄링 장치(200)는 현재 방문 중인 노드의 후속노드를 스택에 저장한다고 가정한다. 또한, 현재까지 방문된 노드들의 집합, 즉 탐색 경로를 Path 라고 한다. 시작 단계에서 Path 는 소스 노드만을 포함하고 있다.
단계 510에서, 방문 중인 현재 노드의 후속 노드를 탐색할 수 있다. 일 실시예에 따르면, 단계 510에서 방문하지 않은 후속 노드들의 리스트를 확인할 수 있으며, 이 때 방문하지 않은 후속 노드가 복수개인 경우 스택과 같은 자료 구조를 이용하여, 탐색할 순서를 결정할 수 있다.
단계 520에서, 후속 노드가 블록 노드에 해당하는지 여부를 판단할 수 있다. 후속 노드가 블록 노드에 해당된다면 단계 530으로 넘어가고 그렇지 않다면 단계 540으로 넘어간다. 단계 520에서, 후속 노드로부터 소스 노드로 도달할 수 있는 경로가 존재하지 않거나, 후속 노드가 이미 경로 Path 에 포함된 노드에 해당할 경우, 당해 후속 노드는 블록 노드에 해당한다고 판단할 수 있다.
단계 530에서, 후속 노드가 블록 노드라면 후속 노드 방향으로 탐색을 수행하지 않는다. 후속 노드로 방문하여도 소스 노드로 돌아갈 수 있는 경로가 존재하지 않기 때문이다.
단계 540에서, 탐색을 시도한 후속 노드가 소스 노드인지 판단할 수 있다. 후속 노드가 소스 노드라면, 리커런스를 찾은 것이므로 550 단계로 넘어가고, 그렇지 않으면 510단계로 넘어가 후속 노드를 방문한 다음 계속 탐색을 수행할 수 있다.
단계 550에서, 저장된 경로를 리커런스로 판단하여 출력할 수 있다.
단계 560에서, 탐색을 하지 않은 경로가 있는지 판단하여, 탐색 하지 않은 경로가 존재하면 다시 시작 단계로 돌아가 탐색을 시도하고, 모든 경로가 탐색되었다면 탐색을 종료할 수 있다. 즉, 데이터 의존성 그래프 상에 존재하는 모든 노드에 대해 후속 노드를 방문하였는지 판단하고 방문하지 않은 후속 노드가 있다면 후속 노드 방향으로 탐색하고, 그렇지 않다면 탐색을 종료할 수 있다. 일 실시예에 따르면, 후속 노드를 방문하였는지 여부는 플래그(flag)를 사용하여 기록할 수 있고, 스택과 같은 자료 구조를 사용하여 방문하지 않은 후속 노드가 존재하는 노드가 나타날 때까지 방문이 완료된 노드를 스택에서 팝(pop)할 수 있다.
이하, 모듈로 스케줄링 장치(200)가 도5에 도시된 모듈로 스케줄링 방법의 흐름도를 이용하여 도4의 데이터 의존성 그래프(400)에서 리커런스를 탐색하는 방법을 예로 들어 설명한다.
모듈로 스케줄링 장치(200)는A 노드(410)를 소스 노드로 하여, B노드(420) 방향으로 나아가는 경로를 이용하여 후속 노드를 재귀적으로 방문한 후 A 노드(410)에서 D 노드(440) 방향으로 나아가는 경로를 이용하여 후속 노드를 재귀적으로 방문할 수 있다. 모듈로 스케줄링 장치(200)는 먼저 B 노드(420) 방향으로 탐색을 시도할 수 있다. 시작 단계에서 Path 는 소스 노드만을 포함하고 있으므로 Path = {A} 이다.
노드 B(420)는 블록 노드 또는 소스 노드에 해당되지 않으므로(단계 520, 540) 모듈로 스케줄링 장치(200)는 탐색을 계속 수행할 수 있다(단계 510). Path = {A, B} 이다.
노드 B(420) 는 노드 F(460)와 노드 C(430)를 후속 노드로 가진다. 모듈로 스케줄링 장치(200)는 노드 F(460) 방향으로 탐색을 시도할 수 있다. 모듈로 스케줄링 장치(200)는 노드 F(460)는 블록 노드 또는 소스 노드에 해당되지 않으므로(단계 520, 540) 탐색을 계속 수행할 수 있다(단계 510). Path = {A, B, F}이다.
노드 F(460)은 노드 A(410)을 후속 노드로 가지므로, 모듈로 스케줄링 장치(200)는 노드 A(410)방향으로 탐색을 시도할 수 있다. 노드 A(410)은 블록 노드는 아니지만(단계 520) 소스 노드에 해당되므로(단계 540) Path = {A, B, F, A} 이고 모듈로 스케줄링 장치(200)는 경로 Path 를 리커런스로 판단하여 출력할 수 있다(단계 550). 한 개의 리커런스의 탐색은 종료된다.
모듈로 스케줄링 장치(200)는 아직 노드 B(420)에서 노드 C(430)로 가는 경로를 탐색하지 않았으므로(560단계), 노드B로 돌아가 노드 C(430) 방향으로 탐색을 시도할 수 있다. 노드C(430)은 블록 노드 또는 소스 노드에 해당되지 않으므로(단계 520, 540) 탐색을 계속 수행할 수 있다(단계 510). Path = {A, B, C}이다.
모듈로 스케줄링 장치(200)는 노드 C(430)의 후속 노드인 노드 D(440)으로 탐색을 계속 시도할 수 있다(510 단계). 모듈로 스케줄링 장치(200)는 노드 D(440)는 블록 노드 또는 소스 노드에 해당되지 않으므로(단계 520, 540) 탐색을 계속 수행할 수 있다(단계 510). Path = {A, B, C, D}이다.
노드 D(440)은 이미 경로에 포함되어 있는 노드 B(420) 만을 후속 노드로 가지므로 블록 노드에 해당된다(단계 520). 따라서 모듈로 스케줄링 장치(200)는 노드 D를 블록 노드로 표시하고 탐색을 중단할 수 있다(단계 530).
그러나 아직 노드 C(430)에서 노드 E (450)방향으로 탐색을 수행하지 않았으므로(단계 560), 모듈로 스케줄링 장치(200)는 노드 C(430)로 돌아가 노드 E(450) 방향으로 탐색을 계속할 수 있다(단계 510). 노드 E (450)은 블록 노드도 아니고 소스 노드에 해당하지도 않기 때문에(520, 540 단계) 모듈로 스케줄링 장치(200)는 탐색을 계속 수행할 수 있다(510단계). Path = {A, B, C, E}이다.
모듈로 스케줄링 장치(200)는 노드 D(440) 로 탐색을 시도할 수 있다. 그러나 노드 D(440)은 블록 노드이기 때문에 더 이상 탐색을 수행할 필요가 없다. 따라서 탐색은 중단(단계 530)된다.
노드 A(410) 에서 노드 D (440) 방향으로 나아가는 경로를 아직 탐색하지 않았으므로(단계 560), 모듈로 스케줄링 장치(200)는 노드A(410)으로 돌아가 노드D(440) 방향으로 탐색을 시도할 수 있다. 모듈로 스케줄링 장치(200)가 노드 A(410)로 되돌아가면서 Path 에서 노드B(420)가 삭제되었으므로 노드B(420)와 노드 B(420)에 의해 경로가 막혀있는 노드 D(440)을 블록 노드에서 해제(이하, 언-블록(Un-block)이라 한다)할 수 있다. 즉, 노드B(420)와 노드D(440) 는 더 이상 블록 노드가 아니다.
모듈로 스케줄링 장치(200)는 노드 D(440)가 소스 노드 또는 블록 노드에 해당되지 않으므로(단계 520, 540), 탐색을 계속 수행할 수 있다(단계 510). Path = {A, D} 이다. 노드 D(440)의 후속 노드 B(420) 방향으로 탐색을 계속 시도할 수 있다(510).
모듈로 스케줄링 장치(200)는 노드 B(420) 를 방문하고 상술한 단계 520, 단계 540, 단계 550, 단계 510을 반복하면 Path = {A, D, B, F, A} 를 리커런스로 판단하여 출력할 수 있다. 이제 모든 경로를 탐색하였으므로(단계 560) 모듈로 스케줄링 장치(200)는 탐색을 종료할 수 있다.
일 실시예에 따르면, 도5의 흐름도에 도시된 방법은 모듈로 스케줄링 장치(200)내의 리커런스 탐색부(220)에서 수행될 수 있으나 이에 제한되지 않는다.
도6은 일 실시예에 따른 모듈로 스케줄 장치가 데이터 의존성 그래프 내에서 리커런스를 탐색하는 방법을 나타낸다.
일 실시예에 따르면, 모듈로 스케줄링 장치(200) 는 데이터 의존성 그래프 내의 모든 리커런스를 탐색하는 대신, 최소 시작 간격(MII)이 상대적으로 큰 값을 가지는 리커런스만을 탐색하여 리커런스를 탐색하는데 소요되는 시간과 비용을 절약할 수 있다.
최소 시작 간격(MII)은 리커런스의 모든 간선의 레이턴시의 총합을 시작 디스턴스의 총합으로 나눈 것이기 때문에 리커런스에 포함된 노드들의 이터레이션 디스턴스의 총합이 작을수록 최소 시작 간격은 큰 값을 가진다는 것은 상술하였다.
일 실시예에 따르면, 모듈로 스케줄링 장치(200)는 이터레이션 디스턴스가 소정의 임계값 이하의 값을 가지는 리커런스만 탐색할 수 있다. 모듈로 스케줄링 장치(200)는 루프에 포함되는 명령어들의 초기 나열 순서대로 노드를 방문할 수 있다.
따라서, 모듈로 스케줄링 장치(200)가 루프 내의 가장 먼저 존재하는 명령어를 소스 노드로 결정하여 탐색을 시작하면, 현재 방문하고 있는 임의의 노드에서 소스 노드로 되돌아가기 위해서는 적어도 하나의 이터레이션 디스턴스가 필요하다.
일 실시예에 따르면, 모듈로 스케줄링 장치(200)는 이터레이션 디스턴스가 소정의 임계값 이하의 값을 가지는 리커런스만 탐색하기 위해, 탐색을 위해 현재 사용 가능한 이터레이션 디스턴스(이하, 가용 이터레이션 디스턴스, available iteration distance라 한다)가 남아 있지 않은 경우 탐색을 중단할 수 있다.
일 실시예에 따르면, 모듈로 스케줄링 장치(200)는 dist 라는 변수를 설정할 수 있다. dist[w] 는 w 노드로부터 소스 노드까지 도달할 수 있는 경로에 존재하는 이터레이션 디스턴스의 수를 의미한다. 따라서, dist[w]가 무한대이면, 현재 노드 w로부터 소스 노드까지 경로가 존재하지 않는다라는 것을 의미한다.
dist[w] 가 무한대가 아닌 양의 값 k를 가질 때에는, 노드 w로부터 소스 노드까지 경로가 존재하는지 여부는 알 수 없으나 만약 경로가 존재할 경우에는 최소 k 개의 이터레이션 디스턴스를 거쳐야 소스 노드로 되돌아갈 수 있음을 의미한다.
모듈로 스케줄링 장치(200)가 리커런스 탐색을 시작하기 전에는 어떠한 노드도 방문하지 않았으므로, 모든 노드의 dist 정보는 존재하지 않는다.
일 실시예에 따르면, 모듈로 스케줄링 장치(200)는 left 라는 변수를 설정하여 상술한 가용 이터레이션 디스턴스를 left 에 저장할 수 있다. 즉, 모듈로 스케줄링 장치(200)는 탐색을 시작하기 전에, left를 상술한 소정의 임계값으로 초기화하고, 소스 노드에서 출발하여 현재 노드를 방문하기까지 소요된 이터레이션 디스턴스를 차감해나갈 수 있다.
다시 말하면, left 는 모듈로 스케줄링 장치(200)가 현재 가용할 수 있는 이터레이션 디스턴스를 의미하는 것으로서, 현재 노드에서 특정 후속 노드 방향으로의 경로에 소요되는 이터레이션 디스턴스가 가용할 수 있는 이터레이션 디스턴스(left)를 초과한다면, 당해 경로는 임계값 이하의 이터레이션 디스턴스를 갖는 리커런스에 해당하지 않으므로, 모듈로 스케줄링 장치(200)는 당해 후속 노드 방향으로의 탐색을 중단할 수 있다.
모듈로 스케줄링 장치(200)는 sDist 라는 변수를 설정할 수 있다. sDist 는 모듈로 스케줄링 장치(200)가 방문 중인 현재 노드에서 후속 노드를 방문할 때 소요되는 이터레이션 디스턴스를 의미한다. 다시 말하면, 방문 중인 현재 노드와 후속 노드 사이의 간선에 존재하는 이터레이션 디스턴스를 말한다.
모듈로 스케줄링 장치(200)는 block2 라는 리스트를 설정할 수 있다. block2[w] 리스트는 현재 방문 중인 노드 v가 이미 경로에 저장된 노드 w 만을 후속 노드로 가지고 있어 노드w에 의해 탐색이 중단된 경우, block2[w]에 노드v를 저장할 수 있다. 예를 들어, 현재까지 방문된 노드들의 집합, 즉 탐색 경로를 Path 라고 할 때 노드 v의 후속 노드w가 Path에 속해있는 노드라면, block2[w] 에 v를 저장할 수 있다. Path 에서 노드 w가 삭제되면, v 의 dist는 초기화되고 블록 노드에서 해제(이하, 언-블록(Un-block))될 수 있다.
모듈로 스케줄링 장치(200)는 소스 노드에서 출발하여 후속 노드 방향으로 순차적으로 탐색을 수행할 수 있다. 예를 들어, 소스 노드의 후속 노드가 X노드, Y노드, Z노드의 세 가지 노드가 존재하는 경우, Z 노드, Y 노드, X노드 방향 순으로 리커런스 탐색을 수행할 수 있다.
모듈로 스케줄링 장치(200)는 현재 방문 중인 노드의 후속 노드(Successor)를 저장하기 위해 스택(Stack), 큐(Queue)또는 연결 리스트와 같은 자료 구조를 이용할 수 있으나 이에 제한되지 않는다. 모듈로 스케줄링 장치(200)가 소스 노드에서 Z 노드 방향으로 리커런스 탐색을 시작한 경우, 도 6의 흐름도에 도시된 방법을 사용하여 재귀적(recursive)으로 Z 노드의 후속 노드를 방문할 수 있음은 자명하다.
단계 610에서, 현재 노드의 후속 노드를 탐색할 수 있다. 일 실시예에 따르면, 단계 610에서 모듈로 스케줄링 장치(200)는 방문하지 않은 후속 노드들의 리스트를 확인할 수 있으며, 이 때 방문하지 않은 후속 노드가 복수개인 경우 스택과 같은 자료 구조를 이용하여, 탐색할 순서를 결정할 수 있다.
단계 620에서, 현재 노드의 후속 노드가 소스 노드에 해당하는지 여부를 판단하여 노드가 소스 노드에 해당한다면 단계 625로 넘어가고, 그렇지 않다면 630단계로 넘어가 후속 노드가 블록 노드에 해당하는지 여부를 검사하게 된다.
단계 625에서, 가용 이터레이션 디스턴스(left)가 현재 노드v와 후속 노드w 사이의 이터레이션 디스턴스(sDist)보다 크거나 같은지 여부를 판단하여, 단계 625의 조건을 만족하면, 단계 650으로 넘어가고 그렇지 않으면 단계 660으로 넘어간다. 가용 이터레이션 디스턴스(left)가 현재 노드v와 후속 노드w 사이의 이터레이션 디스턴스(sDist)보다 작다면, 후속 노드w가 소스 노드라 하여도 해당 경로에 존재하는 이터레이션 디스턴스의 합은 소정의 임계값을 초과하게 되기 때문에 후속 노드를 방문하지 않는다.
단계 650에서, 모듈로 스케줄링 장치(200)는 현재까지의 경로를 리커런스로 판단하여 출력할 수 있다.
단계 665에서, 현재 가용 이터레이션 디스턴스로는 후속 노드 w방향으로 탐색을 수행할 수 없으므로 탐색을 중단할 수 있다.
단계 670에서, 모든 후속 노드가 방문 완료된 노드를 경로에서 삭제하고 삭제된 노드의 dist를 결정할 수 있다. 즉, 현재 노드v의 모든 후속 노드가 방문 완료되었다면, 경로에서 노드v를 삭제하면서 노드 v의 dist(즉, dist[v])를 결정할 수 있다. 단계 670에서, 모듈로 스케줄링 장치(200)는 현재 노드 v의 후속 노드 각각의dist 값에 현재 노드v와 후속 노드 각각의 간선에 존재하는 이터레이션 디스턴스를 더한 값 중 최소값을 dist[v]로 저장할 수 있다.
예를 들어, 현재 노드v와 후속 노드 s1, s2가 있을 경우, dist[s1] + <v, s1> 과 dist[s2] + <v, s2> 중 작은 값을 dist[v]에 저장할 수 있다. <v, s1>와 <v, s2> 는 각각 노드v와 후속 노드 s1, s2와의 이터레이션 디스턴스를 의미한다. 저장된 dist[v]의 값은 단계 640 에서 탐색을 중단할지 여부를 판단하는데 사용될 수 있다. 만약 현재 노드v에서 소스 노드로 가는 경로가 존재하지 않는다면 dist[v]는 무한대(구현 상으로는 충분히 큰 수)로 설정할 수 있다.
모든 후속 노드가 방문 완료가 되었으면, 단계 680으로 넘어가 아직 탐색하지 않은 경로가 존재하는지 판단할 수 있다.
단계 680에서, 탐색을 하지 않은 경로가 있는지 판단하여, 탐색 하지 않은 경로가 존재하면 다시 시작 단계로 돌아가 탐색을 시도하고, 모든 경로가 탐색되었다면 탐색을 종료할 수 있다. 즉, 데이터 의존성 그래프 상에 존재하는 모든 노드에 대해 후속 노드를 방문하였는지 판단하고 방문하지 않은 후속 노드가 있다면 후속 노드 방향으로 탐색하고, 그렇지 않다면 탐색을 종료할 수 있다. 일 실시예에 따르면, 후속 노드를 방문하였는지 여부는 플래그(flag)를 사용하여 기록할 수 있고, 스택과 같은 자료 구조를 사용하여 방문하지 않은 후속 노드가 존재하는 노드가 나타날 때까지 방문이 완료된 노드를 스택에서 팝(pop)할 수 있다.
단계 630에서, 후속 노드가 블록 노드에 해당하는지 여부를 판단하여, 후속 노드가 블록 노드라면 단계 660으로 넘어가 탐색을 중단하고 그렇지 않다면 단계 640으로 넘어가 소정의 조건을 만족하는지 판단할 수 있다. 즉, 방문하고 있는 현재 노드v의 후속 노드 w가 소스 노드로 도달할 수 있는 경로가 존재하지 않거나(dist[w]가 무한대), 노드w가 이미 경로에 포함된 노드인 경우 노드w를 블록 노드로 판단할 수 있다. 후속 노드가 블록 노드라면 후속 노드를 방문하여도 더 이상 탐색을 시도할 수 있는 경로가 존재하지 않기 때문에 후속 노드 방향으로 탐색을 중단한다.
단계 660에서, 후속 노드 w 가 블록 노드인 경우 후속 노드 w방향으로 탐색을 중단할 수 있다. 또한, 후속 노드 w 가 경로에 이미 저장되어 있는 노드에 해당된다면, block2[w] 에 현재 방문 중인 노드 v를 저장할 수 있다. 그러나 노드w가 블록 노드에 해당하지 않으면 단계640의 조건을 판단할 수 있다.
단계 640에서, 상술한 dist, left, sDist 변수를 사용하여 소정의 조건을 판단하여 후속 노드 방향으로 탐색을 계속 수행할 것인지 여부를 판단할 수 있다. 소정의 조건 (1), (2) 식을 만족한다면 660단계로 넘어가 탐색을 중단하고 670단계로 넘어갈 수 있다. 그렇지 않다면, 610단계로 넘어가 후속 노드를 방문하고 탐색을 계속 수행할 수 있다.
단계 640에서, left - sDist 가 0이하인지 판단할 수 있다((1) 조건). 상술한 바와 같이 left 는 현재 가용할 수 있는 이터레이션 디스턴스를 저장하고 있는 변수이기 때문에 left - sDist 가 0 이하라면 당해 후속 노드 방향으로 탐색할 경우 원하는 리커런스(즉, 임계값보다 작거나 같은 이터레이션 디스턴스를 갖는 리커런스를 말한다)를 탐색할 수 없음을 의미한다.
예를 들어, left 가 1이고 sDist 가 1인 경우, 현재 노드v에서 소스 노드까지 도달할 때까지 최대 1개의 이터레이션 디스턴스를 사용할 수 있는데, 후속 노드w로 방문할 때 하나의 이터레이션 디스턴스가 소요되므로(sDist 는 1이므로), 후속 노드w로 방문하는 순간 left는 0이 된다.
그러나 상술한 바와 같이 임의의 노드에서 소스 노드까지 되돌아가기 위해서는 적어도 하나의 이터레이션 디스턴스를 필요로 하고, 따라서 후속 노드에서 소스 노드까지는 적어도 하나 이상의 이터레이션 디스턴스를 거쳐야 한다. 따라서, 단계 660에서 가용 이터레이션 디스턴스(left)가 0인 모듈로 스케줄링 장치(200)는 640단계의 식(1)을 만족하는 후속 노드 방향으로의 탐색을 중단할 수 있다.
단계 640에서, 후속 노드w에 dist 정보가 저장되어 있는 경우 left 가 sDist + dist[w] 보다 작은지 판단할 수 있다((2) 조건).
현재 노드v에서 후속 노드w를 방문하는데 sDist 만큼의 이터레이션 디스턴스가 소요되고, 후속 노드w에서 소스 노드로 되돌아가는 경로가 dist[w] 만큼의 이터레이션 디스턴스가 소요되므로, 가용할 수 있는 이터레이션 디스턴스left 가 sDist + dist[w] 보다 작으면 당해 후속 노드 방향으로 탐색할 경우 원하는 리커런스(즉, 임계값보다 작거나 같은 이터레이션 디스턴스를 갖는 리커런스를 말한다)를 탐색할 수 없음을 의미한다. 따라서, 단계 660에서 모듈로 스케줄링 장치(200)는 당해 후속 노드로 방문하지 않고 탐색을 중단할 수 있다.
단계 670에서, 후속 노드를 모두 방문하여 결정된 dist 값을, 또 다른 경로를 이용하여 탐색할 때 사용하기 위해 지우지 않고 남겨둘 수 있음은 상술하였다. 그러나 도5를 참조하여 설명한 리커런스 탐색 방법에서 블록 노드를 언블록 노드로 해제시키는 것과 유사하게, 다른 경로를 탐색하기 위해dist[v] 값을 삭제할 필요가 있는 경우도 있다.
일 실시예에 따르면, 단계 670에서 현재 경로에서 노드 u가 삭제된다면 block2[u] 리스트에 포함된 노드들은 언-블록되고 dist 정보는 삭제될 수 있다. 일 실시예에 따르면, 모듈로 스케줄링 장치(200) 내의 스택(Stack)에서 팝(pop())될 때, block2[u] 에 포함된 노드들은 언-블록되고 dist 정보는 삭제될 수 있으나 이에 제한되지 않는다. 따라서, 모듈로 스케줄링 장치(200)는 이후에 다시 dist 정보가 삭제된 노드 w를 방문했을 때, 노드w 를 통해 소스 노드에 도달하는 경로를 찾을 수 있다.
일 실시예에 따르면, 도6의 흐름도에 도시된 방법은 모듈로 스케줄링 장치(200)내의 리커런스 탐색부(220)에서 수행될 수 있으나 이에 제한되지 않는다.
도7은 일 실시예에 따른 데이터 의존그래프에 이터레이션 디스턴스를 표시한 도면이다. 설명의 편의를 위해 도7에서 노드 사이에 존재하는 레이턴시는 생략되었다. 이하 도7의 그래프를 도6의 흐름도를 사용하여 모듈로 스케줄링 장치(200)가 임계값 이하의 이터레이션 디스턴스를 갖는 리커런스를 탐색하는 방법을 설명한다.
탐색하고자 하는 리커런스의 이터레이션 디스턴스의 임계값은 2라고 가정한다. 따라서, 모듈로 스케줄링 장치(200) 는 데이터 의존성 그래프(700) 내에서 이터레이션 디스턴스가 2이하인 리커런스만을 선택적으로 탐색할 수 있다.
임계값은 2이므로 가용 이터레이션 디스턴스(left)의 초기값은 2이고, 모듈로 스케줄링 장치(200)는 탐색을 해나가면서 간선에 존재하는 이터레이션 디스턴스(즉, 노드 사이에 존재하는 이터레이션 디스턴스)만큼 차감해나갈 것이다. 간선에 존재하는 이터레이션 디스턴스는 간선 위에 표시되었다. 즉, 노드 A(710)(710) 에서 노드B(720)에 도달하는데 필요한 이터레이션 디스턴스는 0이다. 또한, 노드 D(760)(760)에서 노드 A(710)(710)으로 도달하는데 필요한 이터레이션 디스턴스는 2이다. 모듈로 스케줄링 장치(200)는 Path에 현재 탐색 경로를 저장할 수 있다. 소스 노드 A(710) 에서 출발하므로 시작 단계는 Path = {A} 이다.
모듈로 스케줄링 장치(200)는 소스 노드 A(710) 의 후속 노드 I(780), B 중 노드 B(720) 로 먼저 탐색을 시도할 수 있다. 노드 B(720) 는 소스 노드 또는 블록 노드에 해당하지 않고(단계 620, 630), 640단계의 조건에도 해당하지 않으므로 노드B를 방문할 수 있다.
모듈로 스케줄링 장치(200)는 노드 B(720)의 후속 노드 G(730)로 탐색을 시도할 수 있다. 노드 G(730) 역시 소스 노드 또는 블록 노드에 해당되지 않으며(단계 620, 630), 단계 640의 조건에도 해당하지 않으므로 노드G를 방문할 수 있다. 모듈로 스케줄링 장치(200)가 소스 노드 A(710) 에서 출발하여 노드 B(720)를 거쳐서 노드 G(730)까지 방문하는데 소요된 이터레이션 디스턴스가 없으므로 가용 이터레이션 디스턴스 left는 초기값2 에서 차감되지 않으며, 탐색 경로 Path 는 {A, B, G} 이다.
모듈로 스케줄링 장치(200)는 노드 G(730)의 후속 노드 D(760), C(740), E(750) 중 먼저 노드 D(760)로 탐색을 시도할 수 있다. 노드 D(760)는 소스 노드도 아니고 블록 노드도 아니고(단계 620, 630), 단계 640의 조건에 해당하지 않으므로, 모듈로 스케줄링 장치(200)는 노드 D(760)를 방문할 수 있다. Path = {A, B, G, D} 이고 가용 이터레이션 디스턴스는 2이다.
모듈로 스케줄링 장치(200)는 노드 D(760)의 후속 노드 A(710)로의 탐색을 시도할 수 있다. 노드 A(710)는 소스 노드에 해당되고(단계 620), 단계 625의 조건에 해당되지 않으므로 Path = {A, B, G, D, A} 이고 모듈로 스케줄링 장치(200)는 Path를 리커런스로 출력할 수 있다. 모듈로 스케줄링 장치(200)는 노드 D(760) 의 dist 를 2로 갱신할 수 있다. 모듈로 스케줄링 장치(200)는 경로 Path 에 포함된 노드 B(720), 노드G, 노드D 를 블록(block) 노드로 표시할 수 있다.
모듈로 스케줄링 장치(200)는 노드 G(730)로 돌아가 노드G(730)의 방문하지 않은 후속 노드 C(740)와 노드E 중 노드 C(740)로 탐색을 시도할 수 있다. 모듈로 스케줄링 장치(200)가 노드G(730)로 돌아가면서 Path 에서 노드 D(760)가 삭제하였고 노드 D(760) 의 dist 가 무한대가 아니므로, 노드 D(760)를 언-블록(Un-block)할 수 있다. 노드 C(740)는 소스 노드 또는 블록 노드에 해당하지 않고(단계 620, 630), 단계 640의 조건에 해당하지 않으므로, 모듈로 스케줄링 장치(200)는 노드 C(740)를 방문할 수 있다. Path = {A, B, G, C}이다. 모듈로 스케줄링 장치(200)는 경로 Path 에 포함된 노드 B(720), G(730), C (740)를 블록(block) 노드로 표시할 수 있다. 노드 G(730)에서 노드 C(740)로 도달하는데 필요한 이터레이션 디스턴스는 1이므로, 가용 이터레이션 디스턴스는 2에서 1로 차감된다. 즉, left 는 1이다.
모듈로 스케줄링 장치(200)는 노드C(740)에서 후속 노드 D(760)로 탐색을 시도할 수 있다. 노드 D(760)는 소스 노드가 아니고 블록 노드도 아니다(단계 620, 630). 노드 C(740)에서 노드 D(760)로 도달하는데 필요한 이터레이션 디스턴스는 1이다. 즉, left 는 1이고 sDist 는 1이므로 left ? sDist 가 0이하의 값을 가지므로 단계 640의 (1) 조건에 해당된다. 또한, dist[D]가 2이므로 (2) 조건에도 해당된다. 따라서, 모듈로 스케줄링 장치(200)는 더이상 노드 D(760)방향으로 탐색을 수행하지 않고 중단(단계 660)할 수 있다.
모듈로 스케줄링 장치(200)는 노드 G(730)로 돌아가기 위해 노드C(740)를 삭제하면서 노드C(740)의 dist(즉, dist[C])를 3으로 갱신하며, 노드C(740)를 언-블록할 수 있다.
모듈로 스케줄링 장치(200)는 노드G(730)의 방문하지 않은 후속 노드 E(750)방향으로 탐색을 시도할 수 있다. 노드 E(750)는 소스 노드 또는 블록 노드에 해당하지 않고(단계 620, 630), 단계 640의 조건에 해당하지 않으므로, 모듈로 스케줄링 장치(200)는 노드 E(750)를 방문할 수 있다. Path = {A, B, G, E}이다.
모듈로 스케줄링 장치(200)는 노드 E(750) 의 후속 노드 C(740)방향으로 탐색을 시도할 수 있다. 그러나 노드 C(740) 의 dist(즉, dist[C]) 는 3으로 설정되어 있기 때문에, 단계 640의 (1) 조건에 해당하지는 않지만 (2) 조건에 해당하므로 모듈로 스케줄링 장치(200)는 탐색을 중단(단계 660)할 수 있다.
모듈로 스케줄링 장치(200)는 노드 G(730)로 돌아가기 위해 노드E(750)를 삭제하면서 노드E의 dist(즉, dist[E])를 3으로 갱신하며, 노드E(750)를 언-블록할 수 있다. 모듈로 스케줄링 장치(200)는 노드G 에서 방문하지 않은 노드 H(770) 로 탐색을 시도할 수 있다. 노드 H(770)는 소스 노드 또는 블록 노드에 해당하지 않고 (단계 620, 630), 단계 640의 조건에도 해당하지 않으므로 모듈로 스케줄링 장치(200)는 노드 H(770)을 방문할 수 있다. Path = {A, B, G, H}이다.
모듈로 스케줄링 장치(200)는 계속하여 후속 노드 B(720)방향으로 탐색을 시도할 수 있다. 그러나 노드 B(720)은 이미 경로에 포함되어 있는 노드이므로 블록 노드에 해당된다(단계 630). 따라서, 모듈로 스케줄링 장치(200)는 노드 B(720) 방향으로의 탐색을 중단하고(단계 660), 노드B(720)을 유일한 후속 노드로 가지는 노드H(720) 를 block2[B]에 노드H(720)을 저장할 수 있다.
모듈로 스케줄링 장치(200)는 노드 H(770)의 모든 후속 노드, 노드G(730)의 모든 후속 노드, 노드 B(720)의 모든 후속 노드를 방문하였으므로, Path 에서 노드H(770), 노드G(730), 노드B(720)를 차례대로 삭제할 수 있다. 모듈로 스케줄링 장치(200)은 노드H(770)을 삭제할 때에는 노드 H(770)을 언-블록하지 않고, 노드B(720)을 삭제할 ‹š, block2[B]에 저장된 노드H(770)을 언-블록할 수 있다.
모듈로 스케줄링 장치(200)는 노드G를 삭제하면서 노드G의 dist(즉, dist[G])를 2로 갱신할 수 있다. 또한, 모듈로 스케줄링 장치(200)는 노드B를 삭제하면서 노드B의 dist(즉, dist[B])를 2로 갱신할 수 있다. 모듈로 스케줄링 장치(200)는 노드B와 노드G는 각각 dist가 무한대가 아니므로 노드B(720)와 노드G를 언-블록할 수 있다. 모듈로 스케줄링 장치(200)는 경로 Path에서 노드B(720)를 삭제하면서 노드 B(720)와 block2[B]에 저장된 노드H(770)를 언-블록하고 노드H의dist(즉, dist[H])를 초기화할 수 있다.
모듈로 스케줄링 장치(200)는 소스 노드 A(710) 에서 노드 I(780)방향으로 탐색을 시도할 수 있다. 이 때, 노드 I(780) 는 소스 노드 또는 블록 노드도 아니며, 단계 640의 조건에 해당되지 않는다. 모듈로 스케줄링 장치(200)는 노드 I(780)를 거쳐서 노드H (770)에 도달할 수 있음은 자명하므로 자세한 설명은 생략한다. 노드H(770)를 방문 중인 모듈로 스케줄링 장치(200)의 가용 이터레이션 디스턴스(left) 는 2이고 Path = {A, I, H} 이다.
노드 H(770)를 방문한 모듈로 스케줄링 장치는 노드 B(720)로의 탐색을 시도할 수 있다. 그러나 노드 B(720)의 dist는 2이므로 단계 640의 (2) 조건을 만족하지 않는다. 따라서, 모듈로 스케줄링 장치(200)는 노드B(720)방향으로 탐색을 중단할 수 있다. 모듈로 스케줄링 장치(200)는 노드A(710)로 돌아가기 위해 Path 에서 노드 H(770) 와 노드I(780)를 차례대로 삭제하면서 언-블록하고 dist[H]와 dist[I]를 모두 3으로 갱신할 수 있다.
모듈로 스케줄링 장치(200)는 노드 A(710)의 모든 후속 노드를 탐색하였으므로, 데이터 의존성 그래프(700) 내의 모든 경로를 탐색하였다고 판단하고(단계 680) 탐색을 종료할 수 있다.
도6 및 도7을 참조하여 설명된 이터레이션 디스턴스가 임계값 이하인 리커런스만을 탐색하는 방법에서 사용되는 변수, 자료 구조, 조건문 처리, 순서 등은 예시적인 것이며 한정적이지 않으므로 반드시 기재된 형태로 실시될 필요는 없으며 기술적 사상이나 필수적 특징을 변경하지 않고 다른 구체적인 형태로 실시될 수 있음을 이해할 수 있을 것이다.
도8은 일 실시예에 따른 모듈로 스케줄링 방법을 적용하여 성능을 측정한 결과이다. 전체 모듈로 스케줄링의 시간에서 리커런스 탐색에 소요되는 시간이 차지하는 비중은 84%에서 49%로 감소하였고, FFT_loop2 의 경우 리커런스 탐색에 소요되는 시간은 5.72ms 로 리커런스 탐색 시간은 5000배로 감소하였고, 모듈로 스케줄링 전체 시간은 1900배의 시간 감소 효과가 있음을 알 수 있다.
일 실시예에 따른 모듈로 스케줄링 방법 및 장치는 반복 모듈로 스케줄링(Iterative modulo scheduling), 스윙 모듈로 스케줄링(swing modulo scheduling)과 같이 소프트웨어 파이프라이닝을 통해 루프를 가속하는 모든 경우에 적용 가능하다. 따라서, 스칼라(Scalar) 프로세서, 슈퍼스칼라(Superscalar) 프로세서, VLIW(Very Long Instruction Word) 프로세서, CGRA(Coarse-Grained Reconfigurable Architectures) 프로세서와 같은 모든 아키텍처의 프로세서(Processor)에 적용될 수 있다. 또한, CPU(Central Processing Unit), GPU(Graphic Processing Unit), DSP(Digital Signal Processor), ASIP(Application Specific Instruction Processor), 마이크로 컨트롤러(Micro Controller)와 같은 모든 종류의 프로세서에서 적용 가능하다.
한편, 모듈로 스케줄링 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM. CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 인터넷을 통한 전송 등과 같은 캐리어 웨이브의 형태로 구현되는 것도 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 프로세서가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
본 발명에 의한 방법, 프로세스, 장치, 제품 및/또는 시스템은 간단하고, 비용적으로 효과적이며, 복잡하지 않으면서 매우 다양하고 정확하다. 또한 본 발명에 의한, 프로세스, 장치, 제품 및 시스템에 알려진 구성 요소를 적용함으로써 즉시 이용할 수 있으면서 효율적이고 경제적인 제조, 응용 및 활용을 구현할 수 있다. 본 발명의 또 다른 중요한 측면은 비용 절감, 시스템 단순화, 성능 증가를 요구하는 현 추세에 부합한다는 것이다. 이러한 본 발명의 실시 예에서 볼 수 있는 유용한 양상은 결과적으로 적어도 현 기술의 수준을 높일 수 있을 것이다.
본 발명은 특정한 최상의 실시 예와 관련하여 설명되었지만, 이외에 본 발명에 대체, 변형 및 수정이 적용된 발명들은 전술한 설명에 비추어 당업자에게 명백할 것이다. 즉, 청구범위는 이러한 모든 대체, 변형 및 수정된 발명을 포함하도록 해석한다. 그러므로 이 명세서 및 도면에서 설명한 모든 내용은 예시적이고 비제한적인 의미로 해석해야 한다.

Claims (15)

  1. 루프(loop)가 포함하는 명령어들 간의 의존성을 포함하는 데이터 의존성 그래프(data dependence graph)를 획득하는 데이터 의존성 그래프 획득부;
    상기 데이터 의존성 그래프에서, 사이클을 형성하는 명령어들의 집합인 리커런스(recurrence)를 탐색하는 리커런스 탐색부; 및
    상기 리커런스의 처리 순서를 결정하는 스케줄링부를 포함하고,
    상기 리커런스 탐색부는 이터레이션 디스턴스(Iteration Distance)의 합이 소정의 임계값보다 작은 리커런스만을 탐색하고,
    상기 이터레이션 디스턴스는 상기 리커런스에 포함된 소정의 명령어를 처리한 후 상기 소정의 명령어의 처리 결과에 의존하는 다른 명령어를 처리할 수 있을 때까지 소요되는 이터레이션 횟수인 것을 특징으로 하고,
    상기 리커런스 탐색부는,
    소스 노드(Source Node)가 S 인 경우, 상기 소스 노드 S로부터 출발하여 상기 소스 노드 S로 되돌아가는 경로인 리커런스를 탐색하고,
    상기 탐색을 시작하기 전에 사용 가능한 이터레이션 디스턴스인 가용 이터레이션 디스턴스(available iteration distance)를 상기 임계값으로 초기화하고,
    상기 노드 S의 하나 이상의 후속 노드 방향으로 리커런스를 탐색하는 동안에, 상기 이터레이션 디스턴스를 차감해가면서 상기 가용 이터레이션 디스턴스를 갱신하고, 상기 가용 이터레이션 디스턴스가 0 보다 작아지면 탐색을 중단하는 것을 특징으로 하는 모듈로 스케줄링 장치.
  2. 삭제
  3. 제1항에 있어서, 상기 리커런스 탐색부는,
    상기 탐색이 중단된 경우, 방문하지 않은 후속 노드를 재귀적으로 방문하여 리커런스 탐색을 시도하는 것을 특징으로 하는 모듈로 스케줄링 장치.
  4. 제1항에 있어서, 상기 리커런스 탐색부는,
    현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D 인 경우,
    상기 노드 W가 상기 소스 노드 S가 아니고, 상기 가용 이터레이션 디스턴스가 상기 D 보다 작거나 같으면 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 하는 모듈로 스케줄링 장치.
  5. 제1항에 있어서, 상기 리커런스 탐색부는,
    현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D이고, 상기 노드 W 에서 상기 소스 노드 S에 도달할 수 있는 경로 상에 존재하는 이터레이션 디스턴스의 합이 A인 경우,
    상기 D에 상기 A 를 더한 값보다 상기 가용 이터레이션 디스턴스가 작으면, 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 하는 모듈로 스케줄링 장치.
  6. 제1항에 있어서, 상기 리커런스 탐색부는,
    현재 방문 중인 노드가 V이고, 상기 노드 V의 후속 노드가 W 인 경우, 상기 노드 W가 소스 노드가 아니고 노드 W가 현재까지의 경로에 기 저장되어 있으면, 상기 노드 W방향으로 탐색하지 않는 것을 특징으로 하는 모듈로 스케줄링 장치.
  7. 제1항에 있어서, 상기 스케줄링부는,
    상기 탐색된 하나 이상의 리커런스를 최소 시작 간격(Minimum Initiation Interval: MII)이 큰 순서대로 처리되도록 스케줄링하고,
    상기 최소 시작 간격은 상기 리커런스를 반복하여 처리하기 위해 필요한 최소의 시간 간격인 것을 특징으로 하는 모듈로 스케줄링 장치.
  8. 모듈로 스케쥴링 장치의 동작 방법에 있어서,
    루프(loop)가 포함하는 명령어들 간의 의존성을 포함하는 데이터 의존성 그래프(dependence graph)를 획득하는 단계;
    상기 데이터 의존성 그래프에서, 사이클을 형성하는 명령어들의 집합인 리커런스(recurrence)를 탐색하는 단계; 및
    상기 리커런스의 처리 순서를 결정하는 스케줄링 단계를 포함하고,
    상기 리커런스를 탐색하는 단계는 이터레이션 디스턴스(Iteration Distance)의 합이 소정의 임계값보다 작은 리커런스만을 탐색하고,
    상기 이터레이션 디스턴스는 상기 리커런스에 포함된 소정의 명령어를 처리한 후 상기 소정의 명령어의 처리 결과에 의존하는 다른 명령어를 처리할 수 있을 때까지 소요되는 이터레이션 횟수인 것을 특징으로 하고, 상기 리커런스를 탐색하는 단계는,
    소스 노드(Source Node)가 S 인 경우, 상기 소스 노드 S로부터 출발하여 상기 소스 노드 S로 되돌아가는 경로인 리커런스를 탐색하고,
    상기 탐색을 시작하기 전에 사용 가능한 이터레이션 디스턴스인 가용 이터레이션 디스턴스(available iteration distance)를 상기 임계값으로 초기화하고,
    상기 노드 S의 하나 이상의 후속 노드 방향으로 리커런스를 탐색하는 동안에, 상기 이터레이션 디스턴스를 차감해가면서 상기 가용 이터레이션 디스턴스를 갱신하고, 상기 가용 이터레이션 디스턴스가 0 보다 작아지면 탐색을 중단하는 것을 특징으로 하는 모듈로 스케줄링 방법.
  9. 삭제
  10. 제8항에 있어서, 상기 리커런스를 탐색하는 단계는,
    상기 탐색이 중단된 경우, 방문하지 않은 후속 노드를 재귀적으로 방문하여 리커런스 탐색을 시도하는 단계를 더 포함하는 모듈로 스케줄링 방법.
  11. 제8항에 있어서, 상기 리커런스를 탐색하는 단계는,
    현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D 인 경우,
    상기 노드 W가 상기 소스 노드 S가 아니고, 상기 가용 이터레이션 디스턴스가 상기 D 보다 작거나 같으면 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 하는 모듈로 스케줄링 방법.
  12. 제8항에 있어서, 상기 리커런스를 탐색하는 단계는,
    현재 방문 중인 노드가 V 이고, 상기 노드 V의 후속 노드가 W 이며, 상기 노드 V와 상기 후속 노드 W 사이에 존재하는 이터레이션 디스턴스가 D이고, 상기 노드 W 에서 상기 소스 노드 S에 도달할 수 있는 경로 상에 존재하는 이터레이션 디스턴스의 합이 A인 경우,
    상기 D에 상기 A 를 더한 값보다 상기 가용 이터레이션 디스턴스가 작으면, 상기 후속 노드 W 방향으로 탐색하지 않는 것을 특징으로 하는 모듈로 스케줄링 방법.
  13. 제8항에 있어서, 상기 리커런스를 탐색하는 단계는,
    현재 방문 중인 노드가 V이고, 상기 노드 V의 후속 노드가 W 인 경우, 상기 노드 W가 소스 노드가 아니고 노드 W가 현재까지의 경로에 기 저장되어 있으면, 상기 노드 W방향으로 탐색하지 않는 것을 특징으로 하는 모듈로 스케줄링 방법.
  14. 제8항에 있어서, 상기 스케줄링 하는 단계는,
    상기 탐색된 하나 이상의 리커런스를 최소 시작 간격(Minimum Initiation Interval: MII)이 큰 순서대로 처리되도록 스케줄링하는 단계를 포함하고,
    상기 최소 시작 간격은 상기 리커런스를 반복하여 처리하기 위해 필요한 최소의 시간 간격인 것을 특징으로 하는 모듈로 스케줄링 방법.
  15. 제 8항, 및 10항 내지 14항 중 어느 한 항에서 수행되는 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020140119362A 2014-09-05 2014-09-05 모듈로 스케줄링 방법 및 장치 KR102244135B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020140119362A KR102244135B1 (ko) 2014-09-05 2014-09-05 모듈로 스케줄링 방법 및 장치
US14/687,284 US10423607B2 (en) 2014-09-05 2015-04-15 Method and apparatus for modulo scheduling

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140119362A KR102244135B1 (ko) 2014-09-05 2014-09-05 모듈로 스케줄링 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20160029588A KR20160029588A (ko) 2016-03-15
KR102244135B1 true KR102244135B1 (ko) 2021-04-23

Family

ID=55437609

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140119362A KR102244135B1 (ko) 2014-09-05 2014-09-05 모듈로 스케줄링 방법 및 장치

Country Status (2)

Country Link
US (1) US10423607B2 (ko)
KR (1) KR102244135B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107679635A (zh) * 2017-08-04 2018-02-09 平安科技(深圳)有限公司 基于优先级的客户跟进方法、系统及可读存储介质
CN107678839B (zh) * 2017-08-04 2021-06-18 平安科技(深圳)有限公司 基于优先级的客户跟进方法、系统及可读存储介质
JP7342952B2 (ja) * 2019-07-24 2023-09-12 日本電信電話株式会社 スケジューリング制御装置、スケジューリング制御方法、及びプログラム
CN111814289B (zh) * 2020-09-08 2020-12-22 成都同飞科技有限责任公司 一种基于图式理论的供水管网爆管分析方法及分析系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070198971A1 (en) * 2003-02-05 2007-08-23 Dasu Aravind R Reconfigurable processing

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5640319A (en) * 1991-03-18 1997-06-17 Lucent Technologies Inc. Switch control methods and apparatus
US5664193A (en) * 1995-11-17 1997-09-02 Sun Microsystems, Inc. Method and apparatus for automatic selection of the load latency to be used in modulo scheduling in an optimizing compiler
US6438747B1 (en) * 1999-08-20 2002-08-20 Hewlett-Packard Company Programmatic iteration scheduling for parallel processors
US6633817B1 (en) * 1999-12-29 2003-10-14 Incyte Genomics, Inc. Sequence database search with sequence search trees
US20030033582A1 (en) * 2001-05-09 2003-02-13 Wavemarket, Inc. Representations for estimating distance
NO316480B1 (no) * 2001-11-15 2004-01-26 Forinnova As Fremgangsmåte og system for tekstuell granskning og oppdagelse
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
US20060048123A1 (en) 2004-08-30 2006-03-02 International Business Machines Corporation Modification of swing modulo scheduling to reduce register usage
US7386820B1 (en) * 2004-12-10 2008-06-10 Synopsys, Inc. Method and apparatus for formally checking equivalence using equivalence relationships
JP5241832B2 (ja) * 2007-06-27 2013-07-17 ドルビー ラボラトリーズ ライセンシング コーポレイション マルチメディアコンテンツの特定のためのシグネチャポインターを含む検索ツリーのインクレメンタル構造
SG183690A1 (en) * 2007-08-06 2012-09-27 Trx Systems Inc Locating, tracking, and/or monitoring personnel and/or assets both indoors and outdoors
US8472753B2 (en) * 2008-01-10 2013-06-25 Samsung Electronics Co., Ltd. Method and system of adaptive reformatting of digital image
US20090195401A1 (en) * 2008-01-31 2009-08-06 Andrew Maroney Apparatus and method for surveillance system using sensor arrays
US8488863B2 (en) * 2008-11-06 2013-07-16 Los Alamos National Security, Llc Combinational pixel-by-pixel and object-level classifying, segmenting, and agglomerating in performing quantitative image analysis that distinguishes between healthy non-cancerous and cancerous cell nuclei and delineates nuclear, cytoplasm, and stromal material objects from stained biological tissue materials
KR101553655B1 (ko) * 2009-01-19 2015-09-17 삼성전자 주식회사 재구성가능 프로세서에 대한 명령어 스케줄링 장치 및 방법
KR101515568B1 (ko) * 2009-02-03 2015-04-28 삼성전자 주식회사 재구성 가능 어레이의 스케줄러, 스케줄링 방법 및 이를 이용한 컴퓨팅 장치
US9442929B2 (en) * 2013-02-12 2016-09-13 Microsoft Technology Licensing, Llc Determining documents that match a query
US9804888B2 (en) * 2013-03-15 2017-10-31 Oracle International Corporation System and method for implementing constrained data-driven parallelism

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070198971A1 (en) * 2003-02-05 2007-08-23 Dasu Aravind R Reconfigurable processing

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
W. Kim 외 3명. ‘SCC based Modulo Scheduling for Coarse-Grained Reconfigurable Processors’. 2012 International Conference on Field-Programmable Technology, 2012.12.10., pp.321-328.*

Also Published As

Publication number Publication date
US10423607B2 (en) 2019-09-24
KR20160029588A (ko) 2016-03-15
US20160070594A1 (en) 2016-03-10

Similar Documents

Publication Publication Date Title
US10592241B2 (en) Apparatus and methods for matrix multiplication
JP5882950B2 (ja) ステージド・ループ命令
JP6761878B2 (ja) コンピューティングシステムによって実行されるタスクの制御
JP5707011B2 (ja) 統合分岐先・述語予測
JP5984952B2 (ja) 作業項目の同期のための方法及びシステム
Skinderowicz The GPU-based parallel ant colony system
KR102244135B1 (ko) 모듈로 스케줄링 방법 및 장치
Bozdag et al. Compaction of schedules and a two-stage approach for duplication-based DAG scheduling
JP2004302706A (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
US20100095091A1 (en) Processor, Method and Computer Program
US9354850B2 (en) Method and apparatus for instruction scheduling using software pipelining
US10564948B2 (en) Method and device for processing an irregular application
Vishkin et al. Models for advancing PRAM and other algorithms into parallel programs for a PRAM-On-Chip platform
Prokopec et al. Near optimal work-stealing tree scheduler for highly irregular data-parallel workloads
KR102161055B1 (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
KR101293700B1 (ko) 코어스 그레인드 재구성 구조를 위한 코드 생성 장치 및 그 코드 생성 방법
WO2021098105A1 (en) Method and apparatus for functional unit assignment
Barford et al. Data flow algorithms for processors with vector extensions: handling actors with internal state
Yu et al. Algorithm and hardware support for branch anticipation
Safari et al. Locality-based relaxation: an efficient method for GPU-based computation of shortest paths
정현균 Implementation and Improvement of a Swing Modulo Scheduler for VLIW Architecture
Midkiff Transformations to modify and eliminate dependences
Gnanaolivu et al. Pipelining inter-iteration dependence in loops onto CGRAs using recurrence-aware priority scheme
JP2005267024A (ja) 並列処理装置、方法、およびプログラム

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant