KR101293701B1 - 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법 - Google Patents

코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법 Download PDF

Info

Publication number
KR101293701B1
KR101293701B1 KR1020120018327A KR20120018327A KR101293701B1 KR 101293701 B1 KR101293701 B1 KR 101293701B1 KR 1020120018327 A KR1020120018327 A KR 1020120018327A KR 20120018327 A KR20120018327 A KR 20120018327A KR 101293701 B1 KR101293701 B1 KR 101293701B1
Authority
KR
South Korea
Prior art keywords
cgra
configuration
pipeline
loop
sequential
Prior art date
Application number
KR1020120018327A
Other languages
English (en)
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 KR1020120018327A priority Critical patent/KR101293701B1/ko
Application granted granted Critical
Publication of KR101293701B1 publication Critical patent/KR101293701B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

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

Abstract

본 발명은 중첩 루프문 수행 장치 및 그 방법에 관한 것으로서, 더욱 상세하게는, 하이브리드 아키텍쳐에서 중첩 루프문을 실행할 때 통신 오버헤드를 줄이고 처리 속도를 높일 수 있는 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법에 관한 것이다.
본 발명에 따르면, 전체 중첩 루프문이 CGRA에서 자율적으로 실행되기 때문에 통신 오버헤드가 줄어들고, 시퀀셜 구성이 리소스가 풍부한 CGRA에서 실행되기 때문에 프로세서에서보다 더 빠르게 중첩 루프문이 수행될 수 있다.

Description

코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법{Method and apparatus of executing nested loop on coarse-grained reconfigurable array}
본 발명은 중첩 루프문 수행 장치 및 그 방법에 관한 것으로서, 더욱 상세하게는, 하이브리드 아키텍쳐에서 중첩 루프문을 실행할 때 통신 오버헤드를 줄이고 처리 속도를 높일 수 있는 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법에 관한 것이다.
CGRA(Coarse-grained reconfigurable array) 구조는 유연성 및 성능성의 이슈 모두를 다루기 위해 제안되었다. 전형적인 CGRA는 병렬 실행을 통해 성능성을 끌어올리기 위해서 처리요소들(PEs: Processing Elements)의 재구성 어레이를 가지고 있다. 각 처리요소(PE)는 산술 연산이나 논리 연산과 같은 간단한 연산들을 실행하기 위해서 동적으로(dynamically) 구성될 수 있는 작은 크기의 실행 유닛이다. 또한, 처리요소들 간의 상호 연결도 효율적인 통신을 위해서 동적으로 구성될 수 있다. 그러한 동적인 구성 능력이 CGRA의 유연성을 제공한다.
한편, 종래의 CGRA는 루프문(loop)을 수행하기 위해 이너모스트 루프(최내각 루프, innermost loop)를 할당받은 후 수행한다. 이너모스트 루프를 수행할 때에는 메인 프로세서는 CGRA로 수행에 필요한 데이터 및 파라미터를 보내고 수행 명령을 보내서 CGRA가 이너모스트 루프를 수행하게끔 한다. 수행이 끝나면 CGRA는 메인 프로세서로 완료 신호를 보내고, 메인 프로세서는 다시 필요한 데이터를 받아가는 방식으로 작업을 진행한다.
만약 수행하고자 하는 루프문이 여러 단계로 겹쳐진 중첩된 루프문장(nested loop)인 경우, 기존 방식에서는 이너모스트 루프를 여러 번 반복하면서 위의 단계를 반복 수행한다. 즉 중첩된 루프문의 경우에는 위의 단계를 여러 번 반복함으로써 메인 프로세서와 CGRA 간이 통신이 빈번히 일어나게 된다.
프로세서와 CGRA 간의 빈번한 통신으로 인하여 전체적인 수행 시간이 느려지므로, 메인 프로세서가 수행하던 작업을 CGRA가 처리할 수 있도록 함으로써 CGRA가 포함된 시스템에서 중첩된 루프문의 성능을 향상시키기 위한 기술이 필요하다.
본 발명이 해결하고자 하는 과제는, CGRA와 프로세서가 혼재하는 하이브리드 아키텍쳐에서 중첩 루프문을 실행할 때 통신 오버헤드를 줄이고 처리 속도를 높일 수 있는 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법을 제공하는 데 있다.
상기한 과제를 해결하기 위해 본 발명에 따른 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치는, CGRA에서 실행될 중첩 루프문 내에서 반복될 각 작업연산을 CGRA 내의 각 처리요소로 매핑하되, 각 작업연산이 CGRA의 각 처리요소에서 병렬적으로 처리되도록 파이프라인 매핑을 수행하고, 파이프라인 매핑 결과를 CGRA의 구성 메모리로 전달하는 파이프라인 매핑부; 메인 프로세서로부터 CGRA에서 실행될 중첩 루프문과 관련된 셋업 파라미터를 획득하여 파이프라인 매핑부로 제공하고, CGRA의 구성 메모리로부터 파이프라인 매핑 결과를 수신하여 파이프라인 매핑 결과에 따라 중첩 루프문을 실행하도록 CGRA를 제어하는 CGRA 제어부; 및 CGRA의 각 처리요소를 모니터링하여, 작업 사이클마다 중첩 루프문 내의 각 작업연산의 실행 여부를 CGRA의 각 처리요소별로 저장하는 프레디킷 레지스터를 포함하며, 중첩 루프문은 내부의 이너루프와 이너루프의 외부에 있는 아우터루프를 포함하는 루프문인 것을 특징으로 한다.
또한 상기한 과제를 해결하기 위해 본 발명에 따른 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 방법은, (a) 파이프라인 매핑부가 CGRA에서 실행될 중첩 루프문 내에서 반복될 각 작업연산이 CGRA의 각 처리요소에서 병렬적으로 처리되도록 파이프라인 매핑을 수행하는 단계; (b) 파이프라인 매핑부가 파이프라인 매핑 결과를 CGRA의 구성 메모리로 전달하는 단계; 및 (c) CGRA 제어부가 CGRA의 구성 메모리로부터 파이프라인 매핑 결과를 수신하고, 수신한 파이프라인 매핑 결과에 기초하여 중첩 루프문을 실행하도록 CGRA를 제어하는 단계를 포함하고, 중첩 루프문은 내부의 이너루프와 이너루프의 외부에 있는 아우터루프를 포함하는 루프문인 것을 특징으로 한다.
한편, 상기한 목적을 달성하기 위해서 본 발명은 상기 방법을 실현하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
본 발명에 따르면, 전체 중첩 루프문이 CGRA에서 자율적으로 실행되기 때문에 통신 오버헤드가 줄어들고, 시퀀셜 구성이 리소스가 풍부한 CGRA에서 실행되기 때문에 프로세서에서보다 더 빠르게 중첩 루프문이 수행될 수 있다.
도 1a는 코어스 그레인드 재구성 어레이(CGRA) 아키텍쳐의 일반적인 템플릿을 예시한 도면.
도 1b는 CGRA의 일구성요소인 처리요소의 구성을 예시한 도면.
도 2는 본 발명에 따른 CGRA에서의 중첩 루프문 수행 장치를 나타내는 도면.
도 3은 CGRA 제어부를 나타낸 도면.
도 4는 파이프라인 매핑부를 나타낸 도면.
도 5는 CGRA에서의 중첩 루프문 수행 방법을 나타낸 흐름도.
도 6(a) 내지 도 6(d)는 단일 루프의 파이프라이닝 과정을 예시한 도면.
도 7은 CGRA 제어부의 레지스터와 프레디킷 레지스터를 이용하여 런타임 시에 프롤로그와 에필로그를 생성하는 과정을 예시하는 도면.
도 8은 본 발명의 일 실시예에 따라 CGRA에서 중첩 루프문을 실행하는 과정을 예시한 도면.
도 9는 시퀀셜 구성이 통합된 후의 중첩 루프문의 파이프라이닝 실행을 나타낸 도면.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
이하에서 첨부된 도면을 참조하여, 본 발명의 바람직한 실시예를 상세히 설명한다. 각 도면에 제시된 동일한 참조부호는 동일한 부재를 나타낸다.
도 1a는 코어스 그레인드 재구성 어레이(Coarse-grained reconfigurable array, CGRA, 100) 아키텍쳐의 일반적인 템플릿을 예시한 도면이다.
도 1a를 참조하면, 병렬 계산을 위한 처리요소(processing element, PE, 110)들의 2차원 재구성 어레이(PE array, 120)가 도시되어 있다. 처리요소(110)들은 어레이(120)의 각 열에 대해 동작하고 있는 데이터 버스들의 집합을 통해서 지역 메모리(local memory, 130)와 메인 메모리(160)간의 입력/출력 데이터를 수동으로 수신/송신한다.
CGRA는 본질적으로 그물망과 같은 네트워크를 통하여 연결된 처리요소(110, PEs)의 어레이(120)이다. 각각의 처리요소(PE, 110)는 수학적 또는 논리적 연산, 곱셈 또는 로드/저장(load/store)을 실행할 수 있다(도 1에서 빗금 처리된 처리요소만이 load/store 가능). 처리요소(110)들은 지역 메모리(130)로부터 데이터를 로드(load)하거나 저장(store)할 수 있으며, 상호 연결된 네트워크를 통하여 이웃하는 처리요소의 출력을 처리할 수도 있다.
자원이 제한된 많은 CGRA 설계들은 특정의 기능을 위한 전용의 처리요소들을 가진다. 예를 들면, 각 행에서 몇 개의 처리요소들은 ALU(arithmetic logic unit) 연산 및 곱셈을 위하여 예약되고, 몇 개는 지역 메모리(130)로부터 또는 지역 메모리(130)로의 로딩 및 저장을 실행할 수 있다. 처리요소(10)의 기능은 구성 메모리(configuration memory, 140)에 저장되고, 구성은 CGRA에 대하여 어플리케이션을 컴파일링한 결과로써 생성된다.
CGRA는 (메인)프로세서(150)에 대한 코프로세서로써 사용된다. 프로세서(150)는 메모리-매핑된 I/O를 통하여 CGRA 구성의 로딩 및 CGRA 실행의 초기화와 같은 CGRA의 실행을 관리한다. CGRA가 실행을 시작하면, 프로세서(150)는 다른 작업을 수행할 수 있다. CGRA 실행의 종료를 통지하기 위하여 인터럽트가 사용될 수 있다. CGRA의 지역 메모리(130)는 DMA 콘트롤러(미도시)를 통하여 CGRA에 의하여 관리된다.
도 1b는 CGRA의 일구성요소인 처리요소의 구성을 예시한 도면이다.
처리요소(PE, 110)는 이웃한 처리요소들의 연산 출력값 및 자신이 수행한 연산 출력값을 입력받는 제1 및 제2 멀티플렉서(111, 112), 연산을 수행하는 기능 유닛(functional unit, FU, 113), 기능 유닛(113)의 연산 출력값을 저장하고 외부로 출력하는 출력 레지스터(114), 및 기능 유닛(113)의 연산 출력값을 피드백하는 레지스터 파일(115)을 포함한다. 처리요소(110)는 구성 메모리(140)와 연결되며, 구성 메모리(140)에 저장된 기능에 따라 자신이 수행해야할 기능(즉, 소스 피연산자들의 선택, 연산 결과의 목적지, 및 실행되는 연산)을 수행한다.
한편 본 발명에 따른 CGRA(100)의 처리요소(110)는 출력 레지스터(114)의 값을 특정 작업이 실행되기 전에 저장하고 유지하는 백업 레지스터(116)를 더 포함할 수 있다. 백업 레지스터(116)는 그 특정 작업이 실행되고 나면 출력 레지스터(114)로 전송함으로써, 출력 레지스터(114)의 값이 백업 레지스터(116)에 저장되어 있던 값으로 복원시키는 역할을 수행한다. 그에 대한 상세한 설명은 후술하도록 한다.
도 1에 도시된 것처럼, 전형적인 CGRA는 두 개의 저장 유닛들을 가진다. 하나는 구성 메모리(configuration memory, 140)이고, 나머지는 지역 메모리(local mmemory, 130)이다. 구성 메모리(140)는 처리요소(110)들에 의해 실행되는 명령들(구성 코드)의 구성을 제공한다. 명령들은 처리요소(110)들에 의해 실행되는 연산들 및 처리요소(110)들 간의 상호 연결에 대한 정보를 포함한다. 명령들은 또한 지역 메모리(130)의 데이터가 데이터 버스에 로딩되어야 하는 시간 및 버스에 있는 데이터가 지역 메모리(130)로 저장되어야 하는 시간에 대한 정보를 포함하고 있고, 그에 따라 처리요소(110)들은 별도의 어드레스 생성 유닛(도시되지 않음)이 없이도 데이터를 수신하고 송신할 수 있다.
입력 데이터 로딩 단계(제1단계)에서, 입력 데이터는 지역 메모리(130)에 전송된다. 입력 데이터는 작업 실행의 결과로써 프로세서(150)에 의해서 직접 기록되거나 혹은 메인 메모리(160)로부터 전송될 수 있다. PE 어레이(120)는 구성 메모리(140)로부터 명령들을 가져오고 또한 지역 메모리(130)로부터 입력 데이터를 가져옴으로써 계산을 시작한다. 다음으로 PE 어레이(120)는 출력 데이터를 생성하여 지역 메모리(130)에 다시 기록하여 계산 단계(제2단계)를 완료한다. 출력 데이터 전송 단계(제3단계)에서, 출력 데이터는 프로세서(150) 또는 시스템의 다른 마스터들(미도시)에 의해 처리되거나 혹은 이후의 사용을 위해 메인 메모리(160)에 복사될 수 있다.
도 2는 본 발명에 따른 CGRA에서의 중첩 루프문 수행 장치를 나타내는 도면이고, 도 3은 CGRA 제어부를 나타낸 도면이고, 도 4는 파이프라인 매핑부를 나타낸 도면이며, 도 5는 CGRA에서의 중첩 루프문 수행 방법을 나타낸 흐름도이다.
CGRA에서의 중첩 루프문 수행 방법은 CGRA에서의 중첩 루프문 수행 장치에 으해 수행되는 방법으로서, 실질적으로 동일한 발명이므로 함께 설명하도록 한다.
우선 도 2를 참조하면, 본 발명에 따른 CGRA에서의 중첩 루프문 수행 장치(200)는 CGRA 제어부(210), 파이프라인 매핑부(220), 및 프레디킷 레지스터(230)를 포함하며, 추가로 CGRA(100) 및 프로세서(150) 중의 적어도 하나를 더 포함할 수 있다.
CGRA 제어부(210)는 유한 스테이트 머신(Finite State Machine, 211), 에필로그 카운트 레지스터(epilog counr resister, EC-R, 212), 루프 카운트 레지스터(loop count regster, LC-R, 213), 및 아우터루프 반복 횟수 레지스터(LC2-R, 214)를 포함한다.
파이프라인 매핑부(220)는 및 파이프라인 생성부(222)를 포함하며, 추가로 초기화부(221), 시퀀셜 분할부(223), 시퀀셜 통합부(224) 중의 적어도 하나를 포함할 수 있다.
우선 CGRA 제어부(210)는 메인 프로세서(150)로부터 CGRA에서 실행될 중첩 루프문과 관련된 셋업 파라미터를 획득하여 파이프라인 매핑부(220)로 제공한다. 파이프라인 매핑부가 중첩 루프문에 대한 파이프라인 매핑 작업을 수행하고 나면, CGRA 제어부(210)는 파이프라인 매핑 결과를 수신하고 그 수신한 파이프라인 매핑 결과에 기초하여 CGRA를 제어함으로써 CGRA가 중첩 루프문을 실행할 수 있도록 한다.
여기서 중첩 루프문(nested loop, loop nest)이란 이너루프와 상기 이너루프의 외부에 있는 아우터루프를 포함하는 루프문, 즉 루프 구조 내부에 하나 이상의 또 다른 내부 루프 구조를 갖는 형태를 의미한다. 중첩 루프문에서 바깥쪽에 위치한 루프를 아우터루프(outer-loop, outerloop), 안쪽에 위치한 루프를 이너루프(inner loop, innerloop)라고 한다.
파이프라인 매핑부(220)는 파이프라인 매핑을 수행하는 구성요소이다. 파이프라인 매핑부(220)는 CGRA에서 실행될 중첩 루프문 내에서 반복될 각 작업연산을 CGRA 내의 각 처리요소로 매핑하되, 각 작업연산이 CGRA의 각 처리요소(110)에서 병렬적으로 처리되도록 파이프라인 매핑을 수행한다(S10). 파이프라인 매핑 결과는 CGRA의 구성 메모리(140)로 전달된다.
프레디킷 레지스터(predicate register, 230)는 CGRA의 각 처리요소를 모니터링하여 실행 여부를 저장하는 레지스터로서, 중첩 루프문이 수행되는 동안 그 각 작업 사이클마다 상기 중첩 루프문 내의 각 작업연산의 실행 여부를 CGRA의 각 처리요소별로 저장한다.
또한 파이프라인 매핑부(220)는 프레디킷 레지스터(230)를 참조하여 이너루프 및 아우터루프에 대한 파이프라인 매핑을 수행하되, 프롤로그, 커널, 에필로그 및 시퀀셜 구성을 각각 생성한다(S20). 커널은 중첩 루프문에 대하여 파이프라인이 가득 찬 구성을 의미하고, 프롤로그는 커널의 앞에 위치하고 파이프라인이 가득 차지 않은 구성을, 에필로그는 커널의 뒤에 위치하고 파이프라인이 가득 차지 않은 구성을 의미하며, 시퀀셜 구성은 에필로그 뒤에 위치하는 구성을 의미한다.
중첩 루프가 아닌 단일 루프인 경우 프롤로그(prolog), 커널(kernel), 에필로그(epilog) 및 시퀀셜 구성(sequential confoguration)이 하나씩 생성되지만, 중첩 루프문의 경우 이너루프가 아우터루프에 의해 반복되므로 프롤로그, 커널, 에필로그 및 시퀀셜 구성이 반복적으로 다수가 생성된다.
한편, 파이프라인 매핑부는 초기화부(221), 시퀀셜 분할부(223), 시퀀셜 통합부(224)를 포함할 수 있다.
초기화부(221)는 초기화 작업을 수행하는 구성요소이다, 초기화는 프로세서(150)로부터 전달받은 셋업 파라미터, 예를 들어 입력 간격(initiation interval, II), 루프의 반복 횟수인 루프 카운트(Loop Count, LC), 스테이지 측면에서의 스케줄 길이인 에필로그 카운드(epilog count, EC), 시작 구성 번호(SCN, Start Configuration Number), 아우터루프의 반복 횟수(LC2)를 기초로 파이프라인 셋업의 초기작업을 수행하는 것을 의미한다(S10). 한편 초기화부(221)의 초기화 작업은 파이프라인의 실행 시작시 주소를 초기화할 수도 있다.
시퀀셜 분할부(223)는 시퀀셜 구성의 프롤로그 및 에필로그에 대한 의존성을 분석하여(S30), 시퀀셜 구성을 에필로그에 독립적인 에필로그 독립적 구성(epilog independent configuration, EIC) 및 프롤로그에 독립적인 프롤로그 독립적 구성(prolog independent configuration, PIC) 으로 각각 분할한다(S40).
시퀀셜 통합부(224)는 EIC를 커널과 에필로그 사이로 이동시키고, PIC를 프롤로그와 커널 사이로 이동시킴으로써, 에필로그와 프롤로그를 서로 결합시키는 역할을 수행한다(S50). EIC와 PIC를 이동시킨 후에, 시퀀셜 통합부(164)는 이동시킨 결과를 기초로 파이프라인 매핑을 재수행한다(S60).
한편 CGRA(100)의 각 처리요소(100) 및 프레디킷 레지스터(230)는 그 내부에 특정 순간에 출력 레지스터의 레지스터 값을 일시적으로 저장하는 백업 레지스터(116)를 포함할 수 있다. 백업 레지스터(116)는 특정 순간이 지나가면 자신이 저장하고 있던 값을 출력 레지스터(114)로 전달함으로써, 출력 레지스터(114)의 값을 백업 레지스터(116)에 저장되어 있던 값으로 복원시킨다.
파이프라인 매핑 결과는 구성 메모리(140)로 전달되어 저장된다.
CGRA 제어부(210)는 중첩 루프문을 실행하고자 할 때 실행하고자 하는 중첩 루프문에 대한 파이프라인 매핑 결과를 구성 메모리(140)로부터 수신한다. 그리고 나서 CGRA 제어부(210)는 파이프라인 매핑 결과에 따라 중첩 루프문이 실행되도록 CGRA(100)를 제어한다(S70).
이하에서는 각 구성요소의 기능 및 동작을 좀 더 상세히 설명하도록 한다.
파이프라이닝(파이프라이닝)은 CGRA(100)에 루프를 매핑하는 방식 중 가장 널리 사용되는 방식이다. 파이프라이닝을 통해 루프 작업은 서로 다른 처리요소(100)들로 각각 매핑되고, 각 처리요소(100)는 루프 전체를 반복하는 동안 매핑된 연산만을 수행한다. 따라서 CGRA의 정상-상태 성능은 단일 코어 프로세서 또는 멀티 코어 프로세서보다 몇 배 이상 높을 수 있다. 메인 프로세서(150)는 일반적으로 순차 코드 실행을 처리할 뿐만 아니라 입력/출력 데이터 준비 및 파이프라인 셋업 측면에서도 CGRA를 관리한다. 본 발명에서는 프로세서(150)와 CGRA(100) 코프로세서 간의 통신을 고려하여 중첩된 루프문(nested loop)에서의 순차 계산(sequential computation)의 오버헤드를 평가하고, 오버헤드를 줄일 수 있는 방식을 제안한다.
도 6(a) 내지 도 6(d)는 단일 루프의 파이프라이닝 과정을 예시한 도면이다.
그림 6(b)에서의 데이터 흐름그래프(data flow graph, DFG)로 표현된 작업들을 가지는 루프문을 매핑하고 실행하는 방법을 고려해보자. 본 예시에서, 도 6(a)는 예시에 이용된 CGRA의 PE 어레이(120)를 나타낸다. 루프의 반복 횟수(trip count)는 4로 설정되어 있으며, 처리요소(PE)는 한 사이클에서 어떠한 작업을 실행한다고 추정된다.
도 6(c)는 DFG를 PE 어레이(120)에 매핑한 것을 도시하고 있는데, 파이프라이닝이 없다면 루프를 반복하는데 4 사이클이 소요된다. 그러나 파이프라이닝을 수행하면, 도 6(e)에서처럼 한 사이클의 입력 간격(initiation interval, II)이 달성될 수 있다.
그러나 이러한 파이프라이닝은 복잡한 제어를 필요로 한다. 파이프라이닝에서 어려운 문제는 프롤로그(prolog)와 에필로그(epilog)를 정확하게 처리하는 것이다. 여기서 프롤로그와 에필로그는 각각 파이프라인이 가득 차지 않은 상태에서의 최초 반복 및 최후 반복을 의미한다.
프롤로그/에필로그 코드는 컴파일 도중에 커널 코드와 독립하여 생성될 수 있지만, 코드의 크기 또는 구성의 개수를 늘릴 가능성이 높다. 따라서 CGRA가 제한된 개수의 로컬 구성만을 가지는 경우, 파이프라이닝은 CGRA에게 유리하지 않다.
CGRA 스스로 런타임시 커널 구성으로부터 프롤로그/에필로그 구성을 생성할 수 있다면, 하드웨어적인 추가 구성이 필요하지 않다. 따라서 런타임시 프롤로그/에필로그 구성을 자동으로 생성하기 위해, 본 발명의 일 구성요소인 프레디킷 레지스터(predicate register, 230))가 필요하다.
프레디킷 레지스터(230)는 p0, p1, ..., pn으로 표시될 수 있는 복수 개의 레지스터로 구성된다. 프레디킷 레지스터(230)는 p0의 값을 p1으로 시프팅하고, p1의 값을 p2로 시프팅하고, p(n-1)의 값을 p(n)으로 시프팅하는 등, 즉 매 사이클이 종료되면 다음에 위치하는 레지스터로 자신의 레지스터 값을 자동으로 시프팅하는 시프트 레지스터(shift register)와 유사하다. 이러한 시프트 작업은 매 입력 간격(II) 사이클마다 수행된다.
이를 위해 CGRA 제어부(210)는 입력 간격(II) 파라미터를 잘 알고 있어야 한다. 한편 CGRA 제어부(210)가 알아야 하는 다른 파라미터는 루프 카운트(LC), 에필로그 카운트(EC), 시작 구성 번호(SCN, Start Configuration Number), 및 아우터루프 카운트(LC2, 아우터루프 반복 횟수) 중의 적어도 하나를 포함한다.
CGRA 제어부(210)는 에필로그 카운트 레지스터(EC-R, 212), 루프 카운트 레지스터(LC-R, 213), 및 아우터루프 반복 횟수 레지스터(LC2-R, 214)를 포함하며, 각각의 레지스터에 그에 해당하는 파라미터를 저장한다.
도 7은 CGRA 제어부의 레지스터와 프레디킷 레지스터를 이용하여 런타임 시에 프롤로그와 에필로그를 생성하는 과정을 예시하는 도면이다. 도 7의 알고리즘 1에서 시작 구성 번호(SCN, Start Configuration Number)는 사용될 구성의 시작 주소를 의미한다.
파이프라이닝 예제에 대한 프레디킷 레지스터의 구성은 도 6(d)에 제시되어 있는데, 그림 2(d)는 구성의 각 부분과 연관된 프레디킷 레지스터를 나타낸다.
프레디킷 레지스터는 다음과 같이 동작할 수 있다: i번 째 스텝에 스케쥴되는 처리요소(PE)에 대응하는 구성 부분은 p(i-1)로 서술된다. 따라서, 도 6(e)를 참조하면, 파이프라인 제어가 p0를 '1'로 쓰기 시작하는 순간, 프롤로그의 최초 단계에 대응하는 구성 부분이 활성화된다. 그리고 나서, 커널에 도달할 때까지, 매 입력 간격(II) 사이클 후, 다수의 구성이 활성화된다. 유사한 방식으로, 커널이 종료된 후에는 p0를 '0'으로 기재함으로써 에필로그 구성이 자동으로 생성될 수 있다. 이러한 알고리즘은 CGRA 제어부(210)의 한 부분으로서, 유한 한정 머신(FSM, Finite-state Machine, 211)을 이용하여 구현될 수 있다.
루프문을 실행하면 파이프라인이 시작되기 전에 다양한 "초기화" 과정이 수행될 수 있다. 그러나 도 1(a)에서처럼, 프로세서(150)와 CGRA 코프로세서(100)로 구성된 하이브리드 아키텍처에서는 더 많은 것이 필요하다.
루프 불변 코드의 실행 및 파이프라인이 시작되면, 프로세서(150)는 파이프라인 셋업 파라미터를 CGRA(100)로 전달해야 한다. 또한 대량의 데이터가 주변장치(170)들을 통해 사전에 전송될 수 있다고 하여도, 입력 배열의 기본 주소와 같은 다른 파라미터가 전송되어야 할 수도 있다. 이러한 작업을 위한 메인 프로세서의 코드를 프리헤더(preheader)라고 한다. 프리헤더 코드의 존재는, 루프문이 완벽하게 아우터루프(outerloop)로 중첩되어 있다고 하더라도, 아우터루프가 반복되는 횟수만큼 반복되는 이너루프(innerloop)의 파이프라인 실행이 함께 이뤄질 수 없다는 것을 의미한다. 이러한 격차는 프로세서(150)와 CGRA(100) 간의 통신 지연으로 인해 CGRA에게는 중요한 문제이다.
단일 루프(single loop) 파이프라이닝은 이너모스트 루프(innermost loop, 최내각 루프)만을 위한 파이프라인을 생성할 수 있다. 따라서 단일 루프 파이프라이닝은 이너루프 파이프라이닝(Inner Loop Pipelining, ILP)이다
CGRA(100)를 이용한 중첩 루프문에 대한 종래의 접근법은 프로세서(150)에서 소프트웨어로 구현된 아우터루프로 이너루프를 파이프라이닝 하는 것이다. 우리는 이러한 방식을 소프트웨어 아우터루프(SW Outerloop)라고 부를 수 있다. 이러한 접근법은 하이브리드 아키텍처에서는 통신으로 인한 심각한 성능 오버헤드로 고생할 뿐만 아니라 아우터루프 파이프라이닝의 이점을 누릴 수 없다.
이너루프 파이프라닝은 프리헤더 단계, 프롤로그 단계, 커널 단계, 및 에필로그 단계로 구성되는 4 단계 프로세스를 가진다.
루프 불변 코드를 실행하는 단계뿐 아니라 C_PipeSetup 및 C_Run 같은 일부 파이프라인 관련 명령어를 발급하는 단계를 포함하는 프리헤더 단계는, 주로 프로세서(150)에 의해 수행된다. 그러나 다른 단계, 즉 프롤로그 단계, 커널 단계, 및 에필로그 단계는 CGRA(100)에 의해 자율적으로 수행된다.
이너루프 파이프라인이 아우터루프로 둘러싸이면, 아우터루프에 의해 추가되는 것은 반복자 업데이트(iterator update), 조건 체크(condition check), 및 루프 백(loop back), 그리고 아우터루프 프리헤더와 같은 익스트라 코드, 및 불완전 중첩 루프문을 위한 프리 이너루프(pre-innerloop)와 포스트 이너루프(post-innerloop) 문장들을 포함하는 시퀀셜 구성(sequential confoguration)이다.
기존 방법(baseline)에서의 통신 오버헤드를 줄이기 위해, 본 발명에서는 다음과 같은 방식을 이용한다.
우선, FSM(211) 및 제어 레지스터(control register, 212~214)를 포함하는 CGRA 제어부(210)는 새로 추가된 시퀀셜 구성뿐 아니라 아우터루프의 루핑까지 확장되어야 한다.
아우터루프 루핑(outer-loop looping)은 LC2 레지스터(LC2-R, 214)를 추가하고, FSM(211)에 몇 문장을 추가함으로써 간단하게 수행될 수 있다. CGRA 제어부(210)가 파라미터의 존재를 알아차리면, 4 개의 새로운 시퀀셜 구성은 CGRA에 의해 수행된다.
시퀀셜 구성을 CGRA(100)에 매핑하면, 매 사이클마다 소수의 처리요소(PE)들만이 이용될 가능성이 높으며, 이는 대부분의 처리요소가 낭비되는 것을 의미한다. 따라서, 프레디킷 레지스터(230)를 이용하면, 매 사이클마다 구성에서 상이한 부분을 실행함으로써 구성의 재사용을 최대화할 수 있다.
도 8은 본 발명의 일 실시예에 따라 CGRA에서 중첩 루프문을 실행하는 과정을 예시한 도면이다.
일반적으로, 2 개의 연속적인 이너루프 파이프라인 사이에는 4 가지 타입의 구성이 있다. 포스트 이너루프 문장(post-innerloop statements), 반복자 업데이트(iterator update), 프리 이너루프 문장(pre-innerloop statements), 그리고 이너루프 프리헤더(innerloop 프리헤더). 이들을 간략하게 시퀀셜 구성(sequential configuration)이라고 한다. 하드웨어 아우터루프를 통한 중첩 루프문 실행은 시퀀셜 구성, 프롤로그(prolog), 커널(kernel), 및 에필로그(epilog) 구성을 반복할 때 볼 수 있다.
첫째로, 에필로그와 그 다음의 프롤로그 사이에 시퀀셜 구성이 전혀 없다면, 도 8의 중첩 루프문 실행은 쉽게 압축될 수 있다.
둘째로, 만일 에필로그와 프롤로그 구성이 통합되면, 프롤로그와 에필로그 구성이 서로 통합된 구성은 이상적으로 커널 구성과 동일하다. 왜냐하면 프롤로그와 에필로그는 서로 대칭적이기 때문이다. 따라서, 중첩 루프문 파이프라이닝은 이너루프 커널을 여러 번 수행함으로써 간단하게 달성될 수 있다.
본 발명은 시퀀셜 구성을 분할하고 분할된 시퀀셜 구성을 리스케쥴링한다. 즉, 본 발명은 시퀀셜 구성을 에필로그 독립적 구성(Epilog-Independent Configurations, EIC)과 프롤로그 독립적 구성(Prolog-Independent Configurations, PIC)의 2 부분으로 분할하고, EIC를 이전의 에필로그 위로 보내고 PIC를 다음의 프롤로그 아래로 보낸다.
결론적으로 에필로그-프롤로그 쌍(=에필로그 및 다음에 나오는 프롤로그)은 커널과 동일한 것으로 통합된다. 여기서, 시퀀셜 구성은 다른 어딘가로 리스케쥴되므로, 에필로그와 프롤로그는 이음매없이 하나로 통합될 수 있다.
도 9는 시퀀셜 구성이 통합된 후의 중첩 루프문의 파이프라이닝 실행을 나타낸 도면이다. 통합된 후의 중첩 루프문 파이프라이닝은 3개 부분으로 분할된다.
첫 번째 부분은 시작에서부터 최초 프롤로그가 처음으로 출현할 때까지의 부분으로서, 아우터루프 프롤로그(outerloop prolog)라고 불릴 수 있다.
두 번째 부분은 커널에서부터 마지막 커널 바로 직전에 위치하는 마지막 PIC까지의 부분으로서, 아우터루프 커널(outerloop kernel)이라고 불릴 수 있다. 이 부분은 주기적이며, 커널-EIC-커널-PIC 패턴을 NC2-1 번 반복한다. 여기서, NC2는 아우터루프의 반복 횟수(trip count)를 의미한다.
마지막 부분은 아우터루프 에필로그(outerloop epilog)라고 불릴 수 있다.
CGRA(100)는 최초 프롤로그, 마지막 커널, 마지막 에필로그에 더하여 아우터루프 커널을 자율적으로 실행할 수 있다. 그 외 나머지 부분은 프로세서(100)에서 소프트웨어로 실행될 수 있다.
에필로그와 다음 프롤로그 사이에는 많은 시퀀셜 구성이 존재할 수 있는데, 이러한 시퀀셜 구성은 EIC 및 PIC로 분할될 수 있다.
시퀀셜 구성이 EIC 및 PIC로 성공적으로 분할되면, EIC 및 PIC는 리스케쥴링되어 이음매없이 성공적으로 통합될 수 있다. 만일 시퀀셜 구성이 EIC 및 PIC로 성공적으로 분할되지 못하면, 아우터루프 파이프라이닝은 그러한 중첩 루프문에 적용될 수 없다.
시퀀셜 구성을 분할하기 위해 시퀀셜 구성에 대한 DFG(data flow graph, 데이터 흐름 그래프) 표현이 사용되는데, 이는 단일의 연결된 DFG 라기보다는 단절된 DFG의 셋트로서 존재하는 경우가 많다. 본 발명에서 각각의 연결된 DFG는 분할(partitioning) 과정에서 단일한 엘리먼트로 취급된다.
예를 들어, 전체 DFG에서 에필로그에 의존적인 노드가 없는지를 체크하고, 만일 에필로그에 의존적인 흐름이 없는 경우 그 노드는 에필로그를 통과하여 이동될 수 있다.
그러나 DFG에서 에필로그에 의존적인 단 하나의 노드가 있는 경우에는, DFG를 끊어서는 안된다. DFG를 끊는 것은 에필로그와 프롤로그가 결합된 커널 피리어드 위에 데이터 흐름 엣지를 초래하여, 다수 사이클 동안 많은 레지스터를 필요로 하기 때문이다. 전체 DFG가 이동되면, 부가적인 레지스터가 필요하지 않다. 게다가, 완전한 루프 안에서는 때때로 전체의 시퀀셜 구성은 EIC가 될 수 있다.
분할 과정은 다음에서처럼 매우 간단하다.
EIC는 이전의 에필로그에 대한 흐름 의존성(flow dependency)이 없는 노드를 가지는 DFG들의 셋트이다. 그리고 PIC는 이전의 에필로그에 대한 흐름 의존성(flow dependency)이 있는 동시에 다음의 프롤로그에 대한 흐름 의존성(flow dependency)이 없는 DFG들의 셋트이다. 만일 이전 에필로그에 대해 흐름 의존성을 가지고 다음 프롤로그에 대해서도 흐름 의존성을 가진 노드가 있다면, 중첩 루프문에서 에필로그와 프롤로그를 통합해선 안된다.
EIC와 PIC를 추출한 후에, 각 그룹에서의 DFG는 CGRA로 스케쥴된다.
한편 아우터루프 파이프라이닝을 제대로 수행하려면 레지스터 백업을 수행해야 한다. EIC가 이동되어 커널과 에필로그 사이로 삽입될 때, 커널과 에필로그 사이에는 많은 데이터 흐름이 있을 수 있다.
EIC 및 PIC를 이동시킨 후에도 데이터 흐름을 보존하기 위해, PE(110)들의 출력 레지스터(114)를 백업해야 한다. 이를 위해 각각의 PE(110)는 내부에 출력 레지스터(114)를 백업하는 백업 레지스터(116)를 더 포함할 수 있다. 출력 레지스터에 대한 그림자 레지스터를 추가하는 것과 유사하다. 즉 출력 레지스터(114)와 백업 레지스터(116)가 커널에서 EIC로 전환될 때마다 또는 PIC에서 커널로 전환될 때마다 유지되다가 스위치된다. 또한, EIC와 PIC는 백업될 때까지는 프레디킷 레지스터(230)와 같은 구문 정보(state information)를 폐기시켜서는 안된다.
또한 도면에 도시되지는 않았지만, 프레디킷 레지스터(230)도 상기 PE(100)의 백업 레지스터(116)와 동일하게 작동하는 백업 레지스터(미도시)를 더 포함할 수 있다. 동일한 방식으로 프레디킷 레지스터(predicate register)는 쉽게 백업할 수 있으며, 루프 내의 조건문이 이용되면 쉽게 재구축될 수 있다.
의존성 분석 과정을 통해 생존해있는 변수가 폐기되는 것이 회피되기 때문에, PE 레지스터(110) 및 지역 메모리(130)와 같은 저장 요소(storage element)들은 백업할 필요가 없다.
본 발명에 따르면, 전체 중첩 루프문이 CGRA에서 자율적으로 실행되기 때문에 통신 오버헤드가 줄어들고, 시퀀셜 구성이 리소스가 풍부한 CGRA에서 실행되기 때문에 프로세서에서보다 더 빠르게 중첩 루프문이 수행될 수 있다.
본 발명의 상기 방법은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
이상에서는 도면에 도시된 구체적인 실시예를 참고하여 본 발명을 설명하였으나 이는 예시적인 것에 불과하므로, 본 발명이 속하는 기술 분야에서 통상의 기술을 가진 자라면 이로부터 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명의 보호 범위는 후술하는 특허청구범위에 의하여 해석되어야 하고, 그와 동등 및 균등한 범위 내에 있는 모든 기술적 사상은 본 발명의 보호 범위에 포함되는 것으로 해석되어야 할 것이다.
100, CGRA 150, 프로세서
110, 처리요소 120, PE 어레이
130, 지역 메모리 140, 구성 메모리
200, 파이프라인 매핑부

Claims (8)

  1. 코어스 그레인드 재구성 어레이(coarse-grained reconfigurable array, CGRA)에서 실행될 중첩 루프문 내에서 반복될 각 작업연산을 CGRA 내의 각 처리요소로 매핑하되, 상기 각 작업연산이 CGRA의 각 처리요소에서 병렬적으로 처리되도록 파이프라인 매핑을 수행하고, 파이프라인 매핑 결과를 CGRA의 구성 메모리로 전달하는 파이프라인 매핑부;
    메인 프로세서로부터 CGRA에서 실행될 중첩 루프문과 관련된 셋업 파라미터를 획득하여 상기 파이프라인 매핑부로 제공하고, 상기 CGRA의 구성 메모리로부터 상기 파이프라인 매핑 결과를 수신하여 상기 파이프라인 매핑 결과에 따라 중첩 루프문을 실행하도록 CGRA를 제어하는 CGRA 제어부; 및
    CGRA의 각 처리요소를 모니터링하여, 작업 사이클마다 상기 중첩 루프문 내의 각 작업연산의 실행 여부를 CGRA의 각 처리요소별로 저장하는 프레디킷 레지스터를 포함하며,
    상기 중첩 루프문은 내부의 이너루프와 상기 이너루프의 외부에 있는 아우터루프를 포함하는 루프문인 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치.
  2. 제1항에 있어서, 상기 파이프라인 매핑부는,
    상기 프레디킷 레지스터를 참조하여 상기 이너루프 및 상기 아우터루프에 대한 파이프라인 매핑을 수행하되, 상기 중첩 루프문에 대하여 파이프라인이 가득 찬 구성인 커널, 커널의 앞에 위치하고 파이프라인이 가득 차지 않은 구성인 프롤로그, 커널의 뒤에 위치하고 파이프라인이 가득 차지 않은 구성인 에필로그, 및 에필로그의 뒤에 위치하는 시퀀셜 구성을 각각 생성하는 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치.
  3. 제2항에 있어서, 상기 파이프라인 매핑부는,
    상기 시퀀셜 구성을 분석하여, 상기 시퀀셜 구성을 에필로그에 독립적인 에필로그 독립적 구성 및 프롤로그에 독립적인 프롤로그 독립적 구성으로 각각 분할하는 시퀀셜 분할부; 및
    상기 분할된 에필로그 독립적 구성을 (시퀀셜 구성의) 앞에 위치한 커널과 에필로그 사이로 이동시키고, 상기 분할된 프롤로그 독립적 구성을 (시퀀셜 구성의) 뒤에 위치하는 프롤로그와 커널 사이로 이동시켜 파이프라인 매핑을 재수행하는 시퀀셜 통합부를 더 포함하는 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치.
  4. 제3항에 있어서, 상기 CGRA의 각 처리요소와 상기 프레디킷 레지스터는,
    상기 이동된 에필로그 독립적 구성 또는 상기 이동된 프롤로그 독립적 구성이 실행되기 전의 출력값을 저장하여 유지하되, 상기 이동된 에필로그 독립적 구성 또는 상기 이동된 프롤로그 독립적 구성이 실행되고 나면 상기 저장하여 유지된 출력값으로 출력값을 복원하는 백업 레지스터를 포함하는 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치.
  5. (a) 파이프라인 매핑부가 코어스 그레인드 재구성 어레이(coarse-grained reconfigurable array, CGRA)에서 실행될 중첩 루프문 내에서 반복될 각 작업연산이 CGRA의 각 처리요소에서 병렬적으로 처리되도록 파이프라인 매핑을 수행하는 단계;
    (b) 상기 파이프라인 매핑부가 파이프라인 매핑 결과를 CGRA의 구성 메모리로 전달하는 단계; 및
    (c) CGRA 제어부가 상기 CGRA의 구성 메모리로부터 상기 파이프라인 매핑 결과를 수신하고, 상기 수신한 파이프라인 매핑 결과에 기초하여 중첩 루프문을 실행하도록 CGRA를 제어하는 단계를 포함하고,
    상기 중첩 루프문은 내부의 이너루프와 상기 이너루프의 외부에 있는 아우터루프를 포함하는 루프문인 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 방법.
  6. 제5항에 있어서, 상기 (a) 단계는
    (a1) 상기 파이프라인 매핑부가 작업 사이클마다 상기 중첩 루프문 내의 각 작업연산의 실행 여부를 CGRA의 각 처리요소별로 저장하는 프레디킷 레지스터를 참조하여 상기 이너루프 및 상기 아우터루프에 대한 파이프라인 매핑을 수행하는 단계; 및
    (a2) 상기 중첩 루프문에 대하여 파이프라인이 가득 찬 구성인 커널, 커널의 앞에 위치하고 파이프라인이 가득 차지 않은 구성인 프롤로그, 커널의 뒤에 위치하고 파이프라인이 가득 차지 않은 구성인 에필로그, 및 에필로그의 뒤에 위치하는 시퀀셜 구성을 각각 생성하는 단계를 포함하는 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 방법.
  7. 제6항에 있어서, 상기 방법은,
    상기 시퀀셜 구성을 분석하여, 상기 시퀀셜 구성을 에필로그에 독립적인 에필로그 독립적 구성 및 프롤로그에 독립적인 프롤로그 독립적 구성으로 각각 분할하는 단계;
    상기 분할된 에필로그 독립적 구성을 (시퀀셜 구성의) 앞에 위치한 커널과 에필로그 사이로 이동시키고, 상기 분할된 프롤로그 독립적 구성을 (시퀀셜 구성의) 뒤에 위치하는 프롤로그와 커널 사이로 이동시키는 단계; 및
    상기 이동된 에필로그 독립적 구성과 프롤로그 독립적 구성을 기초로 파이프라인 매핑을 재수행하는 단계를 더 포함하는 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 방법.
  8. 제7항에 있어서, 상기 (c) 단계는,
    상기 CGRA의 각 처리요소와 상기 프레디킷 레지스터가, 상기 이동된 에필로그 독립적 구성 또는 상기 이동된 프롤로그 독립적 구성이 실행되기 전의 출력값을 백업 레지스터에 저장하여 유지하는 단계; 및
    상기 백업 레지스터가, 상기 이동된 에필로그 독립적 구성 또는 상기 이동된 프롤로그 독립적 구성이 실행되고 나면 상기 CGRA의 각 처리요소와 상기 프레디킷 레지스터의 출력값을 상기 저장하여 유지된 출력값으로 복원하는 단계를 더 포함하는 것을 특징으로 하는, 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 방법.
KR1020120018327A 2012-02-23 2012-02-23 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법 KR101293701B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020120018327A KR101293701B1 (ko) 2012-02-23 2012-02-23 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120018327A KR101293701B1 (ko) 2012-02-23 2012-02-23 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법

Publications (1)

Publication Number Publication Date
KR101293701B1 true KR101293701B1 (ko) 2013-08-06

Family

ID=49219976

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120018327A KR101293701B1 (ko) 2012-02-23 2012-02-23 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법

Country Status (1)

Country Link
KR (1) KR101293701B1 (ko)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150051083A (ko) * 2013-11-01 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20150051115A (ko) * 2014-02-04 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20150051116A (ko) * 2014-02-04 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20150051114A (ko) * 2014-02-04 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
WO2016064158A1 (ko) * 2014-10-21 2016-04-28 삼성전자 주식회사 재구성 가능 프로세서 및 그 동작 방법
CN109144702A (zh) * 2018-09-06 2019-01-04 陈彦楠 一种用于行列并行粗粒度可重构阵列多目标优化自动映射调度方法
CN112631610A (zh) * 2020-11-30 2021-04-09 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
CN114064560A (zh) * 2021-11-17 2022-02-18 上海交通大学 一种面向粗粒度可重构阵列的可配置便笺式缓存设计方法
CN114064560B (zh) * 2021-11-17 2024-06-04 上海交通大学 一种面向粗粒度可重构阵列的可配置便笺式缓存设计方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20110104330A (ko) * 2010-03-16 2011-09-22 서울대학교산학협력단 코어스 그레인 재구성 어레이에서의 메모리 중심 통신 장치
KR20110121313A (ko) * 2010-04-30 2011-11-07 서울대학교산학협력단 코어스 그레인드 재구성 어레이에서의 애플리케이션 매핑 최적화 방법 및 그 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20110104330A (ko) * 2010-03-16 2011-09-22 서울대학교산학협력단 코어스 그레인 재구성 어레이에서의 메모리 중심 통신 장치
KR20110121313A (ko) * 2010-04-30 2011-11-07 서울대학교산학협력단 코어스 그레인드 재구성 어레이에서의 애플리케이션 매핑 최적화 방법 및 그 장치

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150051083A (ko) * 2013-11-01 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102174335B1 (ko) * 2013-11-01 2020-11-04 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102168175B1 (ko) * 2014-02-04 2020-10-20 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20150051115A (ko) * 2014-02-04 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20150051116A (ko) * 2014-02-04 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20150051114A (ko) * 2014-02-04 2015-05-11 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102197071B1 (ko) * 2014-02-04 2020-12-30 삼성전자 주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102185280B1 (ko) * 2014-02-04 2020-12-01 삼성전자 주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
WO2016064158A1 (ko) * 2014-10-21 2016-04-28 삼성전자 주식회사 재구성 가능 프로세서 및 그 동작 방법
US10396797B2 (en) 2014-10-21 2019-08-27 Samsung Electronics Co., Ltd. Reconfigurable processor and operation method therefor
KR20160046623A (ko) * 2014-10-21 2016-04-29 삼성전자주식회사 재구성 가능 프로세서 및 그 동작 방법
KR102277439B1 (ko) * 2014-10-21 2021-07-14 삼성전자주식회사 재구성 가능 프로세서 및 그 동작 방법
CN109144702A (zh) * 2018-09-06 2019-01-04 陈彦楠 一种用于行列并行粗粒度可重构阵列多目标优化自动映射调度方法
CN112631610A (zh) * 2020-11-30 2021-04-09 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
CN112631610B (zh) * 2020-11-30 2022-04-26 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
CN114064560A (zh) * 2021-11-17 2022-02-18 上海交通大学 一种面向粗粒度可重构阵列的可配置便笺式缓存设计方法
CN114064560B (zh) * 2021-11-17 2024-06-04 上海交通大学 一种面向粗粒度可重构阵列的可配置便笺式缓存设计方法

Similar Documents

Publication Publication Date Title
KR101293701B1 (ko) 코어스 그레인드 재구성 어레이에서의 중첩 루프문 수행 장치 및 그 방법
Hannig et al. Invasive tightly-coupled processor arrays: A domain-specific architecture/compiler co-design approach
Waidyasooriya et al. OpenCL-based FPGA-platform for stencil computation and its optimization methodology
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
US20030056202A1 (en) Method for translating programs for reconfigurable architectures
JPH01108638A (ja) 並列化コンパイル方式
Membarth et al. Code generation for embedded heterogeneous architectures on Android
Kim et al. Improving performance of nested loops on reconfigurable array processors
Filgueras et al. Ompss@ zynq all-programmable soc ecosystem
Bhagyanath et al. Optimal compilation for exposed datapath architectures with buffered processing units by SAT solvers
US9841957B2 (en) Apparatus and method for handling registers in pipeline processing
Jesshope μ TC–an intermediate language for programming chip multiprocessors
EP2799986A1 (en) Apparatus and method for translating multithread program code
Kiessling An introduction to parallel programming with OpenMP
Paulino et al. Transparent acceleration of program execution using reconfigurable hardware
Planas et al. AMA: Asynchronous management of accelerators for task-based programming models
JP2005508029A (ja) リコンフィギュアラブルアーキテクチャのためのプログラム変換方法
Kazi et al. Coarse-grained thread pipelining: A speculative parallel execution model for shared-memory multiprocessors
Andon et al. Programming high-performance parallel computations: formal models and graphics processing units
Bernard et al. Resource-agnostic programming for many-core microgrids
Agathos et al. Adaptive openmp runtime system for embedded multicores
Starke et al. Evaluating the design of a VLIW processor for real-time systems
Ohno et al. Dynamic Task Scheduling Scheme for a GPGPU Programming Framework
Misra et al. Exploratory study of techniques for exploiting instruction-level parallelism
Sura et al. Using multiple threads to accelerate single thread performance

Legal Events

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

Payment date: 20160818

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170707

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190828

Year of fee payment: 7