KR100681199B1 - 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 - Google Patents
코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 Download PDFInfo
- Publication number
- KR100681199B1 KR100681199B1 KR1020060003018A KR20060003018A KR100681199B1 KR 100681199 B1 KR100681199 B1 KR 100681199B1 KR 1020060003018 A KR1020060003018 A KR 1020060003018A KR 20060003018 A KR20060003018 A KR 20060003018A KR 100681199 B1 KR100681199 B1 KR 100681199B1
- Authority
- KR
- South Korea
- Prior art keywords
- loop
- sub
- interrupt request
- configuration
- execution
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/22—Microcontrol or microprogram arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
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
본 발명은 코어스 그레인 어레이(CGA: coarse grained array)에서 루프를 수행하는 중 인터럽트가 발생한 경우 상기 인터럽트를 효율적으로 처리하는 방법 및 프로세서에 관한 것으로, 본 발명의 프로세서는 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고, 상기 코어스 그레인 어레이에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)하고, 상기 코어스 그레인 어레이에서 상기 서브 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리한다.
코어스 그레인 어레이(coarse grained array), 재구성 아키텍처{reconfigurable architecture}, 인터럽트{interrupt}
Description
도 1은 재구성 아키텍처(reconfigurable architecture)를 설명하기 위한 도면이다.
도 2는 코어스 그레인 어레이(coarse grained array)의 일례를 도시한 도면이다.
도 3은 루프(loop)가 포함된 프로그램의 일례를 도시한 도면이다.
도 4는 본 발명에 따라 코어스 그레인 어레이를 포함하는 프로세서를 도시한 도면이다.
도 5는 도 3의 루프를 서브 루프로 분할(split)한 일례를 도시한 도면이다.
도 6은 본 발명에 따라 코어스 그레인 어레이에서 인터럽트를 처리하는 순서를 도시한 흐름도이다.
도 7은 본 발명에 따라, 루프를 서브 루프로 분할한 경우, 각 서브 루프의 코어스 그레인 어레이에서의 입출력의 일례를 도시한 도면이다.
도 8은 본 발명에 따라, 서브 루프들 각각에 대하여 프롤로그 파트, 바디 파트, 에필로그 파트로 구분한 일례를 도시한 도면이다.
도 9는 본 발명에 따라 서브 루프들에 대한 구성(configuration)을 저장한 구성 메모리(configuration memory)의 일례를 도시한 도면이다.
<도면의 주요 부분에 대한 부호의 설명>
410: 코어스 그레인 어레이(CGA: coarse grained array)
411: 프로세싱 엘리먼트(PE: processing element)
420: 구성 메모리(configuration memory)
430: 데이터 메모리(data memory)
440: 인스트럭션 메모리(instruction memory)
470: 중앙 레지스터 파일(central register file)
본 발명은 재구성 아키텍처(reconfigurable architecture)에 관한 것으로, 더욱 상세하게는 코어스 그레인 어레이(CGA: coarse grained array)에서 루프를 수행하는 중 인터럽트가 발생한 경우 상기 인터럽트를 효율적으로 처리하는 방법 및 프로세서에 관한 것이다.
전통적으로, 어떤 작업을 수행하는 장치는 하드웨어 또는 소프트웨어에 의하여 구현되었다. 예를 들어, 네트워크 인터페이스를 수행하는 네트워크 콘트롤러를 컴퓨터 칩 상에 구현한 경우, 상기 네트워크 콘트롤러는 공장에서 생산될 때 정의된 네트워크 인터페이스 기능만을 수행하였다. 일단, 공장에서 네트워크 콘트롤러가 생산된 후, 상기 네트워크 콘트롤러의 기능(function)을 바꾸는 것은 불가능하 였다. 이것이 하드웨어의 예이다. 또 다른 방법으로는 소프트웨어를 이용하는 방법이 있다. 예를 들어 자신이 원하는 기능을 수행하는 프로그램을 짜고, 상기 프로그램을 범용 프로세서(general purpose processor)에서 수행시킴으로써, 사용자의 목적이 만족되었다. 소프트웨어에 의한 방법은 하드웨어가 공장에서 생산된 후에도, 소프트웨어만 변경함으로써 새로운 기능을 수행하는 것이 가능하다. 소프트웨어를 이용하는 경우에는 주어진 하드웨어를 이용하여 다양한 기능을 수행할 수 있지만, 하드웨어 구현 방법에 의한 것보다 속도가 떨어지는 단점이 있다.
위와 같은 하드웨어 및 소프트웨어에 의한 방법의 문제점을 극복하기 위하여 제안된 아키텍처가 재구성 아키텍처(reconfigurable architecture)이다. 재구성 아키텍처는 장치의 조립 후에도 어떤 문제의 해결을 위하여 커스토마이징 될 수 있고(can be customized to solve any problem after device fabrication), 또한 계산의 수행을 위해 공간적으로 커스토마이징된 계산을 이용할 수 있다(can exploit a large degree of spatially customized computation in order to perform their computation)는 특징이 있다.
도 1에 재구성 아키텍처(reconfigurable architecture)의 일례가 도시되어 있다. 도 1에서, 도면 부호 101, 102, 103, 104, 105는 산술 논리 장치(ALU: arithmetic and logic unit)이다. 이와 같은 복수 개의 산술 논리 장치(ALU)를 연결하는 라인들(106)로 구성된 장치로 FPGA(field programmable gate array)가 있다. 도 1은 "A*x*x + B*X + C"를 계산할 수 있도록 커스토마이징된 FPGA이다. 계산 중에 "A*x*x + B*X + C"라는 연산이 매우 자주 발생하면, 상기 연산을 위하여 FPGA를 도 1과 같이 구성해 두면, 상기 연산은 소프트웨어에 의한 방법보다 훨씬 빨리 수행될 수 있다. 또한, ALU들을 연결하는 라인들은 일정한 전류를 인가함으로써, 그 구성이 변경될 수 있고, 따라서 이를 이용하여 다른 연산을 계산하는 구성을 가지도록 할 수 있다. 이와 같이, 팹 후(after fabrication)에 하드웨어적 구성을 변경하여 새로운 연산을 수행할 수 있도록 하는 아키텍처를 재구성 아키텍처라고 한다.
도 1에서 ALU에 입력되는 데이터는 1비트이다. 이러한 재구성 아키텍처는 파인 그레인 어레이(fine grained array)라고 불린다. 하나의 프로세싱 엘리먼트(array element)에 입력되는 데이터의 크기가 워드(word) 단위인 재구성 아키텍처를 우리는 코어스 그레인 어레이(CGA: coarse grained array)라고 부른다.
도 2에 코어스 그레인 어레이(coarse grained array)의 일례가 도시되어 있다.
코어스 그레인 어레이(210)는 복수 개의 프로세싱 엘리먼트(211)를 포함한다. 하나의 프로세싱 엘리먼트(211)는 계산 유닛(function unit)(212) 및 레지스터 파일(register file)(213)을 포함한다. 계산 유닛(212)은 계산(computation)을 수행하는 유닛이고, 레지스터 파일(213)은 레지스터들의 집합으로 계산 유닛(212)에서 사용되는 데이터를 임시로(temporarily) 저장한다. 구성 메모리(configuration memory)(220)는 코어스 그레인 어레이(210)의 구성에 관한 정보를 저장한다. 구성 메모리(220)에 저장된 구성(configuration)에 따라, 코어스 그레인 어레이(210)는 자신에 포함된 프로세싱 엘리먼트들 사이의 연결 상태를 변경한 다. 데이터 메모리(230)는 코어스 그레인 어레이(210)의 외부에 위치하여 데이터를 저장한다.
도 3은 루프(loop)가 포함된 프로그램의 일례를 도시한 도면이다. 도 3과 같은 루프의 경우는 동일한 계산이 반복되기 때문에, 상기의 루프를 코어스 그레인 어레이에서 수행하면 그만큼 전체 프로세싱 효율이 높아지게 된다.
그런데, 이렇게 코어스 그레인 어레이에서 루프 연산을 수행하던 중, 인터럽트가 발생하는 경우 이를 어떻게 처리할 것인지가 문제된다. 통상의 컴퓨터 아키텍처에서는 인터럽트가 발생하면, 레지스터들에 현재 저장된 값을 포함한 현재의 문맥(context)을 메모리에 저장시킨 후, 상기 인터럽트에 따른 처리를 수행한 후, 다시 상기 메모리에 저장되었던 문맥 값들을 복구(restore)하여, 원래 수행하였던 작업을 재개한다. 즉, 인터럽트가 발생하면 문맥 교환(context switch)을 수행하여야 하는 경우가 있다. 문맥(context)은 시스템의 현재 상태, 조건 등을 나타내는 정보로, 레지스터들에 저장된 값들을 포함할 수 있다.
그런데, 도 2에 도시된 바와 같이, 코어스 그레인 어레이는 매우 많은 수의 레지스터 파일들을 포함하기 때문에, 이러한 레지스터 파일들에 저장된 값들을 메모리에 저장하는 것은 매우 큰 오버헤드가 된다. 즉, 매우 많은 수의 레지스터 파일에 저장된 값들을 메모리로 저장하여야 하므로, 시간이 오래 걸린다. 또한 상기 레지스터 파일들 모두에 대해 데이터 메모리와의 연결선을 구비하여야 하므로, 전체적인 설계도 매우 복잡해지게 된다. 이와 같이, 문맥 교환을 필요로 하는 인터럽트를 처리하기 위해서는 CGA에 상당한 오버헤드가 발생하기 때문에, 종래에는 이 에 대하여 아무런 해결책이 제시되지 아니하였다. 특히, 인터럽트 요청에 의하여 처리될 프로세스가 실시간 제한(real-time constraint)이 있는 경우 더욱 문제가 된다.
따라서, CGA를 포함한 프로세서에서 인터럽트가 발생한 경우, 이를 효율적으로 처리하는 방법이 요구되고 있다.
따라서, 본 발명은 상술한 본 발명의 문제점을 해결하기 위한 것으로서, CGA를 포함한 프로세서에서 인터럽트가 발생한 경우, 이를 효율적으로 처리하는 방법 및 장치를 제공하는 것을 목적으로 한다.
또한, 본 발명은 CGA에서 루프를 수행하는 중 인터럽트가 발생한 경우에도, 상기 인터럽트에 대한 처리가 실시간 제한(real-time constraint)을 만족하면서 수행될 수 있도록 하는 것을 목적으로 한다.
또한, 본 발명은 상기 인터럽트가 문맥 교환을 필요로 하는 인터럽트인 경우에도 적은 양의 데이터만을 메모리에 저장하도록 함으로써, CGA를 포함한 프로세서에서 문맥 교환 시의 오버헤드를 줄이는 것을 목적으로 한다.
또한 본 발명은 CGA의 크기가 커지더라도, 문맥 교환 시 저장하여야 하는 데이터의 양은 작게 유지하는 것을 목적으로 한다.
또한, 본 발명은 CGA에서 수행하는 루프를 복수 개의 서브 루프로 분할(split)함으로 인하여 증가하게 되는 구성들(configurations)의 크기(size)를 줄임으로써, 상기 서브 루프의 구성들을 저장하기 위하여 추가로 필요한 구성 메모리의 크기를 줄이는(minimize) 것을 목적으로 한다.
상기와 같은 본 발명의 목적을 달성하기 위한 본 발명에 따른 프로세서는 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함한다. 이때, 상기 프로세서는 상기 코어스 그레인 어레이에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)한다. 상기 프로세서는 상기 코어스 그레인 어레이에서 상기 서브 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리한다.
본 발명의 일측에 따르면, 상기 프로세서는 상기 코어스 그레인 어레이의 외부에 위치하고, 상기 서브 루프의 수행이 끝난 후, 서브 루프의 수행의 결과 값을 저장하는 저장 장치를 더 포함할 수 있다. 상기 저장 장치로는 본 발명의 실시예로 설명되는 중앙 레지스터 파일(central register file)이 사용될 수도 있고, 메모리 또는 버퍼 등과 같은 다양한 형태의 저장 장치가 이용될 수도 있다.
또한, 상기 인터럽트 요청의 처리를 위하여 문맥 교환(context switching)이 필요하면, 상기 서브 루프의 수행이 끝난 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이의 외부에 위치하는 메모리(memory)에 저장하고, 상기 인터럽트 요청을 처리할 수도 있다.
본 발명의 일측에 따르면, 상기 프로세서는 상기 코어스 그레인 어레이의 설정(configuration)에 관한 정보를 저장하는 구성 메모리(configuration memory)를 더 포함한다. 상기 구성 메모리는 상기 복수 개의 서브 루프를 상기 코어스 그레이 어레이에서 수행할 수 있도록 상기 복수 개의 서브 루프를 수행하기 위한 구성들(configurations)을 저장할 수 있다. 여기서, 하나의 서브 루프를 수행하기 위한 구성(configuration)은 적어도 하나 이상의 서브 구성(sub configuration)을 포함할 수 있는데, 이 경우 상기 복수 개의 서브 루프 각각에 대한 구성 중 공통되는 서브 구성은 상기 구성 메모리의 동일한 위치에 저장될 수 있다.
본 발명의 일측에 따르는 프로세서는 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고, 상기 코어스 그레인 어레이에서 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)가 소정의 기준 이하이면 상기 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리한다.
본 발명의 일측에 따르는 프로세서는 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고, 상기 코어스 그레인 어레이에서 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)가 소정의 기준 이상이면 상기 루프의 수행을 중단하고 상기 인터럽트 요청을 처리한다.
본 발명의 일측에 따른 코어스 그레인 어레이에서의 인터럽트 처리 방법은, 코어스 그레인 어레이에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서 브 루프로 분할(split)하는 단계, 및 상기 서브 루프의 수행 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 단계를 포함한다.
본 발명의 일측에 따르면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 단계는, 상기 서브 루프의 수행을 종료한 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이의 외부에 위치하는 중앙 레지스터 파일(central register file)에 저장하고, 상기 인터럽트 요청을 처리한다.
이하 첨부 도면들 및 첨부 도면들에 기재된 내용들을 참조하여 본 발명의 바람직한 실시예를 상세하게 설명하지만, 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조부호는 동일한 부재를 나타낸다.
CGA에서 인터럽트가 발생한 경우, 우선 생각해 볼 수 있는 방안은 현재까지 수행되었던 CGA 연산들을 모두 무효화하고, 인터럽트 처리를 끝낸 후, 상기 CGA 연산들을 다시 처음부터 수행하는 것이다. 예를 들어, 도 3의 루프 중 i=50이 될 때까지의 루프 연산을 CGA가 수행했을 때 인터럽트가 걸린 경우, 그냥 인터럽트를 처리하고, 다시 i=0부터 루프 연산을 수행하는 것이다. 이 방법에 따르면, 인터럽트 요청을 빠르게 수행할 수 있으므로, 인터럽트 요청에 의하여 처리될 프로세스의 실시간 제한을 만족시키지만, CGA가 이미 많은 루프를 수행한 경우, 이러한 루프 연산의 결과를 모두 무효화하므로, 컴퓨팅 파워(computing power)를 낭비한다는 문제 점과 함께, 수행 중 무효화된 프로세스가 실시간 제한이 있는 경우, 그 제한을 만족시키지 못 할 수 있는 문제점도 안고 있다.
또 다른 방법으로는, CGA에서 인터럽트가 발생한 경우, 현재 수행하고 있는 CGA 연산의 수행이 끝날 때까지 상기 인터럽트에 대한 처리를 블로킹(blocking)하는 것이다. 예를 들어, 도 3의 루프 중 i=50이 될 때까지의 루프 연산을 CGA가 수행했을 때 인터럽트가 걸린 경우, i=99가 될 때까지 루프 연산을 계속 수행하여 루프 연산을 마무리하고, 상기 인터럽트를 처리하는 것이다. 이 방법에 따르면, CGA가 지금까지 수행했던 연산 작업의 결과를 무효화시키지 않으므로, 컴퓨팅 파워를 효율적으로 사용하지만, 루프 연산 시간이 길어지게 되면, 인터럽트 요청에 의하여 처리될 프로세스의 실시간 제한을 만족시키지 못하는 문제점이 있다. 특히, 인터럽트 요청에 의하여 새롭게 수행되어야 할 태스크가 동영상 재생과 같은 실시간 응용이라면, 본 방법은 사용자들에게 큰 불편을 주게 될 것이다.
따라서, 본 발명의 일실시예에 따르는 프로세서는, 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고, 상기 코어스 그레인 어레이에서 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)가 소정의 기준 이하이면 상기 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리한다. 예를 들어, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)를 모두 수행하여도 인터럽트 요청에 의하여 처리될 프로세스의 실시간 제한을 만족하는 경우에 본 실시예가 채택될 수 있다.
본 발명의 일측에 따르는 프로세서는 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고, 상기 코어스 그레인 어레이에서 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)가 소정의 기준 이상이면 상기 루프의 수행을 중단하고 상기 인터럽트 요청을 처리한다. 예를 들어, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)를 모두 수행하면 인터럽트 요청에 의하여 처리될 프로세스의 실시간 제한을 만족시키지 못하는 경우에 본 실시예가 채택될 수 있다.
도 4는 본 발명에 따라 코어스 그레인 어레이를 포함하는 프로세서를 도시한 도면이다.
도 4에서 코어스 그레인 어레이(410)는 복수 개의 프로세싱 엘리먼트(processing element)(411)를 포함한다. 하나의 프로세싱 엘리먼트(411)는 계산 유닛(function unit) 및 레지스터 파일(register file)을 포함한다. 계산 유닛은 계산(computation)을 수행하는 유닛이고, 레지스터 파일은 레지스터들의 집합으로 계산 유닛에서 사용되는 데이터를 임시로(temporarily) 저장한다.
구성 메모리(configuration memory)(420)는 코어스 그레인 어레이(410)의 구성(configuration)에 관한 정보를 저장한다. 구성 메모리(420)에 저장된 구성(configuration)에 따라, 코어스 그레인 어레이(410)는 자신에 포함된 프로세싱 엘리먼트들 사이의 데이터 경로 (Datapath)를 변경한다. 또한, 본 발명의 일실시예에 따르면, 구성 메모리(420)에 저장된 구성(configuration)에 따라, 코어스 그레 인 어레이(410)은 자신에 포함된 프로세싱 엘리먼트들 사이의 데이터 경로 (Datapath)뿐 아니라, 현재 상태에서 프로세싱 엘리먼트가 수행할 기능(function)을 정의한다. 예를 들어, 프로세싱 엘리먼트(411)에 포함된 계산 유닛에 대해 덧셈 연산을 수행하는 계산 유닛으로 설정하였다가 곱셈 연산을 수행하는 계산 유닛으로 변경할 수 있다.
루프 연산의 경우에는 동일한 계산을 반복하기 때문에, 구성 메모리(420)에 저장된 하나의 설정을 통해 CGA(410)의 구성을 변경한 후, 루프 연산을 반복 수행한다. 상기 루프 연산의 종료된 후 새로운 루프 연산을 수행하여야 하는 경우에는, 상기 새로운 루프 연산의 수행을 위한 설정으로 CGA(410)의 구성(configuration)을 변경한다. 이와 같이, CGA(410)의 구성에 관한 정보를 저장하는 메모리가 구성 메모리(420)이다.
데이터 메모리(430)는 코어스 그레인 어레이(410)의 외부에 위치하여 데이터를 저장하고, 인스트럭션 메모리(440)은 코어스 그레인 어레이(410)의 외부에 위치하여 인스트럭션을 저장한다.
중앙 레지스터 파일(central register file)(470)은 코어스 그레인 어레이(410)의 외부에 위치하고, CGA(410)에서 계산된 결과 값 및 호스트 프로세서의 중간 결과 값들을 저장하기 위해 사용된다.
코어스 그레인 어레이를 이용하는 프로세서의 경우, 프로세싱 유닛으로 코어스 그레인 어레이 및 다른 호스트 프로세서를 포함할 수 있다(도시되지 않음). 이 경우, 통상의 인스트럭션들은 호스트 프로세서에서 수행하고, 루프와 같이 반복 수 행이 필요한 인스트럭션들은 코어스 그레인 어레이에서 수행할 수 있다. 이와 같이 코어스 그레인 어레이와 호스트 프로세서가 분리된 구성을 약결합(loosely-coupled)이라고 부를 수 있을 것이다.
한편, 도 4에 도시된 프로세서는 코어스 그레인 어레이(410)의 프로세싱 엘리먼트들 중 일부의 프로세싱 엘리먼트(480)를 호스트 프로세서 역할을 하도록 할 수 있다. 따라서, 통상의 인스트럭션들은 코어스 그레인 어레이(410) 중 선택된 일부의 프로세싱 엘리먼트(480)에서 수행되고, 루프와 같이 반복 수행이 필요한 인스트럭션들은 상기 프로세싱 엘리먼트(480)를 포함한 전체 코어스 그레인 어레이(410)에서 수행된다. 이와 같이 코어스 그레인 어레이의 프로세싱 엘리먼트들 중 일부의 프로세싱 엘리먼트를 호스트 프로세서 역할을 하도록 하는 구성을 강결합(tightly-coupled)이라고 부를 수 있다. 강결합 구성에서는 하나의 프로세서 안에서, 어레이 모드(array mode) 및 인스트럭션 셋 프로세서 모드(instruction set processor mode) 두 가지로 모두 사용할 수 있다. 어레이 모드에서는 구성 메모리(420)에 저장된 구성(configuration)에 따라 코어스 그레인 어레이(410)의 계산 유닛들을 수행시킨다. 따라서, 어레이 모드에서 상기 프로세싱 엘리먼트들(480)은 CGA의 일부로 동작한다. 인스트럭션 셋 프로세서 모드에서는 상기 코어스 그레인 어레이(410)의 계산 유닛들 중 미리 선정된 계산 유닛들을 수행시킨다. 예를 들어, 인스트럭션 셋 프로세서 모드에서는 상기 코어스 그레인 어레이(410)에서 상기 프로세싱 엘리먼트들(480)만 동작하고, 나머지 프로세싱 엘리먼트들은 동작하지 않는다.
이러한 강결합 구성을 이용하면, 코어스 그레인 어레이에서 사용하는 프로세싱 엘리먼트들 중 일부를 호스트 프로세서로 이용하기 때문에, 별도로 호스트 프로세서를 채용할 필요가 없으므로, 프로세서의 크기가 줄어들 뿐 아니라 프로세서 간의 데이터 이동(Data Transfer)에 따른 오버헤드를 최소화 시킬 수 있다.
또한, 코어스 그레인 어레이(410) 중 일부의 프로세싱 엘리먼트(480)를 호스트 프로세서로 사용할 때 VLIW(very long instruction word) 아키텍처를 이용할 수도 있다. 이 경우, 인스트럭션 페치/디코더(instruction fetch/decoder)(460), 중앙 레지스터 파일(470) 및 일부의 프로세싱 엘리먼트들(480)이 VLIW 아키텍처(450)를 구성한다.
본 발명에서는 CGA를 이용한 강결합 구성을 중심으로 설명하지만, 본 발명은 CGA를 이용한 약결합 구성은 물론, 다른 형태의 재구성 아키텍처(reconfigurable architecture)에도 적용 가능하다.
본 발명에 따른 프로세서는 코어스 그레인 어레이(410)에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)하고, 상기 코어스 그레인 어레이(410)에서 상기 서브 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리한다.
도 5는 도 3의 루프를 서브 루프로 분할(split)한 일례를 도시한 도면이다. 도 3의 루프는 i가 0부터 99번까지의 루프를 수행하는 것인데, 도 5는 도 3의 루프를 i가 0부터 49까지 수행하는 첫 번째 서브 루프(first sub loop)(501)와 루프를 i가 50부터 99까지 수행하는 두 번째 서브 루프(second sub loop)(502)로 분할 (split)한다. 도 5는 도 3의 루프를 2개의 서브 루프로 분할하였지만, 수행되는 결과값은 같다. 따라서, 도 5와 같이 루프를 수행하는 것을 도 3과 같이 수행할 수 있으며, 이와 같이 하나의 루프를 N개의 서브 루프로 분할하는 것을 루프 반복 분할(loop iteration split)이라고 한다.
커다란 하나의 루프를 CGA(410)에서 수행하던 중, 인터럽트가 발생하면, 아직 수행되지 않은 남아 있는 연산들을 처리한 후 인터럽트를 처리하는 것은 상기 인터럽트 요청에 의하여 처리될 프로세스의 실시간 제한을 만족시키지 못할 가능성이 크다. 마찬가지로 이미 수행된 연산들의 수도 많기 때문에, 지금까지 수행하였던 연산들을 무효화시키는 것도 컴퓨팅 파워를 낭비하게 된다는 점에서 바람직하지 못하다.
이러한 문제점을 해결하기 위하여, 본 발명은 코어스 그레인 어레이(410)에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)한다. 이때, 상기 서브 루프의 수행에 필요한 시간이 상기 인터럽트 요청의 발생으로부터 상기 인터럽트 요청의 처리에까지 요구되는 시간보다 크지 않도록 상기 분할되는 서브 루프의 크기(size)를 결정한다. 즉, 루프 분할에 의하여 생성되는 서브 루프의 전체 수행 시간 동안 인터럽트 요청을 블로킹하여도 상기 인터럽트 요청의 실시간 제한을 만족할 수 있을 정도의 크기로 상기 루프를 분할하는 것이다. 이 외에도 서브 루프의 수행시간, 인터럽트 요청에 대한 허용 가능한 블로킹 시간(blocking time) 등을 이용하여 상기 서브 루프의 크기를 결정할 수 있다. 보다 간단한 방법으로는 상기 서브 루프의 반복 회수(iteration count)를 충분히 작은 값, 예를 들어 500을 사용할 수도 있다. 뒤에서 설명하는 바와 같이 본 발명에 따르면, 루프 분할로 인하여 증가하는 구성(configuration)의 수가 그렇게 많지 않기 때문에, 서브 루프의 수가 증가함으로 인한 오버헤드는 매우 작다.
이렇게 루프를 분할하여 CGA에서 수행하면, 코어스 그레인 어레이(410)에서 서브 루프를 수행하는 중 인터럽트 요청이 발생한 경우, 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하여도, 상기 인터럽트 요청의 실시간 제한을 만족시킬 수 있다. 또한, 그 동안 수행된 루프 연산들도 무효화되지 않기 때문에, 컴퓨팅 파워의 낭비도 방지하게 된다.
도 6은 본 발명에 따라 코어스 그레인 어레이에서 인터럽트를 처리하는 순서를 도시한 흐름도이다.
먼저 전처리(preprocessing) 단계에서, 프로세서는 루프를 서브 루프로 분리하고(단계 601), 상기 서브 루프에 대한 구성을 구성 메모리(420)에 저장한다. 단계(610)에서 입력된 프로그램을 해석하여 코어스 그레인 어레이에서 수행될 루프가 존재하는 경우, 프로세서는 상기 루프를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)한다. 단계(610)는 상기 프로그램의 컴파일링 단계에서 컴파일러에 의하여 수행될 수도 있다.
단계(602)에서 프로세서는 상기 복수 개의 서브 루프를 상기 코어스 그레이 어레이(410)에서 수행할 수 있도록 상기 복수 개의 서브 루프를 수행하기 위한 구성들(configurations)을 구성 메모리(420)에 저장한다. 서브 루프들에 대한 구성을 구성 메모리(420)에 저장할 때, 루프 분할로 인하여 증가하는 구성 (configuration)의 수가 많지 않도록 하기 위한 방법이 추가로 채택될 수 있는데, 이는 도 7 내지 도 8을 참조하여 뒤에서 상세히 설명하기로 한다.
단계(603)에서 코어스 그레인 어레이(410)는 서브 루프를 수행한다. 만약 서브 루프의 수행이 종료될 때까지 인터럽트 요청이 없었다면(단계 604), CGA에서의 서브 루프 수행은 종료된다(단계 605).
단계(606)에서 코어스 그레인 어레이(410)에서 서브 루프를 수행하던 중 인터럽트 요청이 있는지를 판단한다. 만약 코어스 그레인 어레이(410)에서 서브 루프를 수행하던 중 인터럽트 요청이 발생하였다면, 코어스 그레인 어레이(410)은 우선 상기 서브 루프를 끝까지 수행한다(단계 607).
즉, 본 발명에 따른 프로세서는 코어스 그레인 어레이(410)에서 서브 루프를 수행하던 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리한다. 이때, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 단계는, 상기 서브 루프의 수행을 종료한 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이의 외부에 위치하는 중앙 레지스터 파일(central register file)에 저장하고, 상기 인터럽트 요청을 처리한다.
단계(608)에서 상기 서브 루프의 수행을 종료한 후, 상기 서브 루프의 수행의 결과 값(CGA_Out)을 상기 코어스 그레인 어레이(410)의 외부에 위치하는 중앙 레지스터 파일(470)에 저장한다. 즉, 서브 루프의 수행을 끝마친 후, 상기 코어스 그레인 어레이(410)의 프로세싱 엘리먼트들의 레지스터 파일에 저장된 값들을 모두 저장하는 것이 아니다. 그 대신, 본 발명은 상기 서브 루프의 수행 후 수행될 다른 서브 루프에서 사용될 값들만 중앙 레지스터 파일(470)에 저장한다. 따라서, 본 발명에 따르면, 하나의 서브 루프의 종료 후 그 다음 서브 루프에서 사용될 값만을 저장하기 때문에, 루프 분할에 따른 오버헤드를 줄이고, 또한 문맥 교환을 필요로 하지 않는 인터럽트 요청인 경우 오버헤드를 최소화하여 상기 인터럽트 요청을 처리할 수 있다.
단계(609)에서 상기 인터럽트 요청의 처리를 위하여 문맥 교환(context switching)이 필요한지를 판단한다. 예를 들어, 상기 인터럽트 요청의 처리를 위하여, 새로운 태스크(task)가 수행되어야 하고, 상기 태스크도 코어스 그레인 어레이(410)를 사용하여 수행되어야 하는 경우, 문맥 교환이 필요하다.
단계(609)의 판단 결과 상기 인터럽트 요청의 처리를 위하여 문맥 교환(context switching)이 필요하면, 상기 서브 루프의 수행을 종료한 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이(410)의 외부에 위치하는 데이터 메모리(430)에 저장한다(단계 610). 본 발명에 따르면, CGA(410)에서 루프를 수행하던 중 인터럽트 요청이 발생하여도, 현재 수행중인 루프를 끝까지 수행하고, 그 결과값(CGA_Out)만 중앙 레지스터 파일에 저장해 두기 때문에, 문맥 교환을 하여야 하는 경우에도, CGA(410)의 프로세싱 엘리먼트들의 레지스터 파일들 전부의 데이터를 저장할 필요가 없고, 단지 서브 루프 수행의 결과값만을 메모리에 저장하면 된다. 단계(608)에서 서브 루프 수행의 결과값은 중앙 레지스터 파일(470)에 저장되므로, 문맥 교환이 발생한 경우에도 중앙 레지스터 파일(470)에 저장된 서브 루프 수행의 결과값만 저장하면 된다. 따라서, 본 발명에 따르면, 문맥 교환을 필요로 하는 인터럽트 요청이 발생한 경우에도, 문맥 교환의 오버헤드가 그렇게 크지 않다.
단계(610)에서 서브 루프의 수행의 결과 값(CGA_Out)을 코어스 그레인 어레이(410)의 외부에 위치하는 데이터 메모리(430)에 저장하였으면, 단계(611)에서 상기 인터럽트 요청에 대한 서비스를 수행한다.
단계(609)의 판단 결과 인터럽트 요청의 처리를 위하여 문맥 교환이 필요하지 않으면, 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이(410)의 외부에 위치하는 데이터 메모리(430)에 저장하지 않고, 단계(611)에서 상기 인터럽트 요청에 대한 서비스를 수행한다.
본 발명의 일실시예에 따르면, 단계(606)에서 코어스 그레인 어레이(410)에서 서브 루프를 수행하던 중 인터럽트 요청이 발생한 경우, 단계(608)의 전에 단계(609)를 수행할 수 있다. 단계(609)에서 문맥 교환이 필요하다고 판단되면, 단계(610)에서 서브 루프의 수행의 결과 값(CGA_Out)을 바로 메모리로 저장하고, 문맥 교환이 필요하지 않으면, 단계(608)에서 서브 루프의 수행의 결과 값(CGA_Out)을 중앙 레지스터 파일(470)로 저장한다.
도 7은 본 발명에 따라, 루프를 서브 루프로 분할한 경우, 각 서브 루프의 코어스 그레인 어레이에서의 입출력의 일례를 도시한 도면이다.
도 7의 (a)는 원래의 루프를 도시한 것이다. 원래의 루프는 코어스 그레인 어레이에 {r1, r2, r3}를 입력으로 하여 루프를 수행한 후, {r10}을 출력한다. 결 국, 도 7의 (a)의 루프를 수행한 후 최종적으로 사용하는 값은 CGA_Out={r10}이다. 도 7의 (a)를 N개의 서브 루프로 분할한 것이 도 7의 (b) 내지 (d)이다. 도 7의 (b)는 첫 번째 서브 루프이고, 도 7의 (c)는 두 번째 서브 루프이고, 도 7의 (d)는 N번째 서브 루프이다. N번째 서브 루프가 마지막 서브 루프이다.
도 7에서 보는 바와 같이, 마지막 서브 루프가 아닌 서브 루프들(즉 첫 번째 서브 루프로부터 N-1번째 서브 루프까지)은 모두 서브 루프에 대한 입력으로 {r1, r2, r3}를 가지고, 출력으로 {r1, r2, r3}를 가지도록 할 수 있다. 마지막이 아닌 서브 루프들에 대해서는 출력 값을 저장하는 레지스터를 입력 값을 저장하는 레지스터와 동일한 레지스터를 사용하도록 하는 것이다. 또한 상기 서브 루프들은 동일한 루프를 분할한 것이기 때문에, 루프 바디(loop body) 내에서의 동작은 모든 서브 루프들 내에서 동일하다.
본 발명에서, 루프 분할된 서브 루프들을 코어스 그레인 어레이에서 수행할 수 있도록 하기 위하여, 상기 서브 루프들에 대한 구성들(configurations)이 구성 메모리(configuration memory)에 저장된다. 그런데, 마지막 서브 루프가 아닌 서브 루프들(첫 번째 서브 루프로부터 N-1번째 서브 루프까지)은 동일한 구성(configuration)을 사용하기 때문에, 상기 공통된 서브 루프들에 대한 구성은 서로 다른 루프들에서 공유될 수 있다.
따라서, 위와 같이 본 발명에 따르면, 루프 분할을 수행하더라도, 루프의 마지막 서브 루프가 아닌 서브 루프들에 대해서는 동일한 구성(configuration)이 이용될 수 있다. 따라서, 루프의 마지막 서브 루프가 아닌 서브 루프들에 대하여 동 일한 구성을 이용할 수 있기 때문에, 루프 분할 후 생성되는 서브 루프의 수가 많아지더라도, 상기 서브 루프의 수행을 위한 구성(configuration)의 수는 크게 증가하지 않는다. 따라서, 본 발명에 따른 루프 분할을 수행하더라도, 서브 루프의 구성을 저장하기 위한 구성 메모리의 크기가 크게 증가하지는 않는다.
한편, 도 7의 (d)에 도시된 마지막 서브 루프는 출력이 {r10}이어야 하므로, 다른 서브 루프들과 동일한 구성(configuration)을 이용할 수 없다. 따라서, 본 발명에 따르면, 루프를 서브 루프들로 분할한 경우, 마지막 서브 루프에 대한 구성(configuration)와 마지막 서브 루프가 아닌 서브 루프들에 대한 구성의 2가지 구성만을 저장하면 되므로, 서브 루프들의 수가 많아진다고 하여도 구성 메모리에 저장하여야 할 구성의 수가 증가하지는 않는다.
도 8은 본 발명에 따라, 서브 루프들 각각에 대하여 프롤로그 파트, 바디 파트, 에필로그 파트로 구분한 일례를 도시한 도면이다.
도 8의 (a)에 도시된 바와 같은 하나의 루프(810)를 수행하는 경우에도, 처음부터 동일한 동작이 반복되는 것은 아니고, 앞부분(811)에는 반복된 동작의 수행을 위하여 데이터를 로드(load)하는 동작 등과 같이 처리되는 부분이 있고, 뒷부분(813)에서는 루프 작업의 결과 값을 기록하는 동작 등과 같은 것이 수행되어야 한다. 이와 같이 하나의 루프 동작을 구분하여, 반복되는 루프 작업(loop work)이 수행되는 부분을 바디 파트(812)라고 하고, 바디 파트(812)의 앞에서 수행되는 부분을 프롤로그 파트(811), 바디 파트(812)의 다음에서 수행되는 부분을 에필로그 파트(813)라고 한다. 프롤로그 파트(811) 및 에필로그 파트(813)는 반복되는 동작 이 수행되지 않는 부분이다.
도 8의 (a)의 루프를 분할한 서브 루프들이 도 8의 (b)에 도시되어 있다. 서브 루프(820)는 마지막 서브 루프가 아닌 서브 루프이고, 서브 루프(830)는 마지막 서브 루프이다. 서브 루프들(820, 830)도, 원래의 루프(810)와 마찬가지로, 에필로그 파트, 바디 파트 및 에필로그 파트로 구분될 수 있다. 서브 루프(820)는 에필로그 파트(821), 바디 파트(822) 및 에필로그 파트(823)를 가진다. 서브 루프(830)는 에필로그 파트(831), 바디 파트(832) 및 에필로그 파트(833)를 가진다.
따라서, 서브 루프(820)를 수행하기 위한 구성은 프롤로그 파트(821)를 수행하기 위한 서브 구성(sub-configuration), 바디 파트(822)를 수행하기 위한 서브 구성 및 에필로그 파트(823)를 수행하기 위한 서브 구성으로 구성된다. 즉, 하나의 서브 루프를 수행하기 위한 구성(configuration)은 적어도 하나 이상의 서브 구성(sub configuration)을 포함한다. 서브 루프(820)는 마지막 서브 루프가 아닌 서브 루프 중 하나이고, 마지막 서브 루프가 아닌 서브 루프들(첫 번째 서브 루프로부터 N-1번째 서브 루프까지)은 서브 루프(820)와 동일한 구성(configuration)을 사용한다.
본 발명에서, 하나의 서브 루프를 수행하기 위한 구성(configuration)은 적어도 하나 이상의 서브 구성(sub configuration)을 포함하고, 상기 복수 개의 서브 루프 각각에 대한 구성 중 공통되는 서브 구성은 상기 구성 메모리의 동일한 위치에 저장된다. 즉, 첫 번째 서브 루프의 서브 구성들과 두 번째 서브 루프의 서브 구성들이 공통되면, 상기 서브 구성들은 구성 메모리의 동일한 위치에 저장되는 것 이다.
서브 루프(830)는 마지막 서브 루프이다. 따라서, 서브 루프(830)는 마지막이 아닌 서브 루프들과 그 구성이 다르게 된다. 도 8의 (b)에 도시된 바와 같이, 마지막 서브 루프(830)의 에필로그 파트(833)는 다른 서브 루프들의 에필로그 파트(823)와 다르다. 그러나, 도 8의 (b)에 도시된 바와 같이, 마지막 서브 루프(830)의 프롤로그 파트(831) 및 바디 파트(832)는 다른 서브 루프들의 프롤로그 파트(821) 및 바디 파트(831)와 동일하다. 따라서, 마지막 서브 루프(830)를 위한 구성의 경우에도, 루프의 마지막 서브 루프의 프롤로그 파트 및 바디 파트에 대한 구성은 상기 루프의 마지막 서브 루프가 아닌 서브 루프의 프롤로그 파트 및 바디 파트에 대한 서브 구성을 공유할 수 있다.
도 9는 본 발명에 따라 서브 루프들에 대한 구성(configuration)을 저장한 구성 메모리(configuration memory)의 일례를 도시한 도면이다.
서브 루프 1(910) 및 서브 루프2(920)는 마지막 서브 루프가 아닌 서브 루프이다. 서브 루프 3(930)은 마지막 서브 루프이다. 서브 루프 1(910)을 수행하기 위한 구성(configuration)에 대한 포인터(pointer)가 프롤로그 파트 1(911), 바디 파트 1(912), 에필로그 파트 1(913)에 기록된다. 프롤로그 파트 1(911)은 프롤로그 파트 1의 구성(940)을 가리키고(point), 바디 파트 1(912)은 바디 파트 1의 구성(950)을 가리키고, 에필로그 파트 1(913)은 에필로그 파트 1의 구성(960)을 가리킨다. 서브 루프 2(920)를 수행하기 위한 구성(configuration)에 대한 포인터(pointer)가 프롤로그 파트 2(921), 바디 파트 2(922), 에필로그 파트 2(923)에 기 록된다. 프롤로그 파트 2(921)은 프롤로그 파트 1의 구성(940)을 가리키고(point), 바디 파트 2(922)는 바디 파트 1의 구성(950)을 가리키고, 에필로그 파트 2(923)는 에필로그 파트 1의 구성(960)을 가리킨다. 즉, 마지막이 아닌 서브 루프들(910, 920)은 동일한 구성(configuration)을 공유(share)하는 것을 알 수 있다.
마지막 서브 루프인 서브 루프 3(930)을 수행하기 위한 구성(configuration)에 대한 포인터(pointer)가 프롤로그 파트 3(931), 바디 파트 3(932), 에필로그 파트 3(933)에 기록된다. 프롤로그 파트 3(931)은 프롤로그 파트 1의 구성(940)을 가리키고(point), 바디 파트 3(932)는 바디 파트 1의 구성(950)을 가리키고, 에필로그 파트 3(933)는 에필로그 파트 3의 구성(970)을 가리킨다. 즉, 마지막 서브 루프(930)는 마지막이 아닌 서브 루프들(910, 920)과 에필로그 파트의 구성은 공유하지 못하지만, 프롤로그 파트 및 바디 파트의 구성은 공유하는 것을 알 수 있다. 이와 같이, 본 발명에 따르면, 루프 분할로 인하여 증가하는 구성들(configurations)에 대하여 공통된 구성들을 공유할 수 있도록 함으로써, 필요한 구성 메모리의 양이 그렇게 증가하지 않는다.
이상에서 본 발명은 코어스 그레인 어레이가 강결합(tightly-coupled)되어 있는 경우를 중심으로 설명하였으나, 본 발명은 강결합이 아닌 약결합(loosely-coupled)의 경우에도 적용가능하고, 코어스 그레인 어레이를 포함한 다른 형태의 재구성 아키텍처(reconfigurable architecture)에도 적용가능하다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
상술한 바와 같이 본 발명에 따른 코어스 그레인 어레이를 포함한 프로세서는, CGA에서 루프를 수행하는 중 인터럽트가 발생한 경우에도, 상기 인터럽트 요청에 의하여 처리될 프로세스의 실시간 제한(real-time constraint)을 만족시키면서 상기 인터럽트 요청을 처리할 수 있다.
또한 본 발명에 따르면, 상기 인터럽트가 문맥 교환을 필요로 하는 인터럽트인 경우에도 적은 양의 데이터만을 메모리에 저장하도록 함으로써, CGA를 포함한 프로세서에서 문맥 교환을 하더라도 상기 문맥 교환에 소요되는 시간을 줄일 수 있다.
또한 본 발명에 따르면, 문맥 교환 시 저장하여야 하는 데이터의 양을 작게 유지함으로써, 코어스 그레인 어레이의 크기와 관계없이 문맥 교환 시의 오버헤드를 일정 수준으로 유지 할 수 있다.
또한 본 발명에 따르면, CGA에서 수행하는 루프를 복수 개의 서브 루프로 분할(split)함으로 인하여 증가하게 되는 구성들(configurations)의 크기(size)를 줄임으로써, 상기 서브 루프의 구성들을 저장하기 위하여 추가로 필요한 구성 메모리의 크기를 줄인다.
또한 본 발명에 따르면, 루프 분할로 인하여 증가하는 구성(configuration)의 수가 그렇게 많지 않기 때문에, 서브 루프의 수가 증가함으로 인한 오버헤드는 매우 작게 된다.
또한 본 발명에 따르면, 루프 분할을 통하여, 코어스 그레인 어레이에서 서브 루프를 수행하는 중 인터럽트 요청이 발생한 경우, 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하여도, 상기 인터럽트 요청의 실시간 제한을 만족시킬 수 있다. 또한, 그 동안 수행된 루프 연산들도 무효화되지 않기 때문에, 컴퓨팅 파워의 낭비도 방지하게 된다.
또한 본 발명에 따르면, 루프 분할로 인하여 증가하는 구성들(configurations)에 대하여 공통된 구성들을 공유할 수 있도록 함으로써, 필요한 구성 메모리의 양이 그렇게 증가하지 않는다.
Claims (20)
- 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고,상기 코어스 그레인 어레이에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)하고, 상기 코어스 그레인 어레이에서 상기 서브 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 것을 특징으로 하는 프로세서.
- 제1항에 있어서,상기 코어스 그레인 어레이의 외부에 위치하고, 상기 서브 루프의 수행이 끝난 후, 서브 루프의 수행의 결과 값을 저장하는 저장 장치를 포함하는 것을 특징으로 하는 프로세서.
- 제1항에 있어서,상기 인터럽트 요청의 처리를 위하여 문맥 교환(context switching)이 필요하면, 상기 서브 루프의 수행이 끝난 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이의 외부에 위치하는 메모리(memory)에 저장하고, 상기 인터럽트 요청을 처리하는 것을 특징으로 하는 프로세서.
- 제1항에 있어서,상기 코어스 그레인 어레이의 설정(configuration)에 관한 정보를 저장하는 구성 메모리(configuration memory)를 더 포함하는 것을 특징으로 하는 프로세서.
- 제4항에 있어서, 상기 구성 메모리는,상기 복수 개의 서브 루프를 상기 코어스 그레인 어레이에서 수행할 수 있도록 상기 복수 개의 서브 루프를 수행하기 위한 구성들(configurations)을 저장하는 것을 특징으로 하는 프로세서.
- 제5항에 있어서,하나의 서브 루프를 수행하기 위한 구성(configuration)은 적어도 하나 이상의 서브 구성(sub configuration)을 포함하고,상기 복수 개의 서브 루프 각각에 대한 구성 중 공통되는 서브 구성은 상기 구성 메모리의 동일한 위치에 저장되는 것을 특징으로 하는 프로세서.
- 제5항에 있어서,상기 루프의 마지막 서브 루프가 아닌 서브 루프들에 대해서는 동일한 구성(configuration)이 이용되는 것을 특징으로 하는 프로세서.
- 제7항에 있어서,상기 복수 개의 서브 루프를 반복되는 루프 작업(loop work)이 수행되는 바디 파트(body part), 상기 바디 파트의 앞에서 수행되는 프롤로그 파트, 및 상기 바디 파트의 다음에서 수행되는 에필로그 파트로 분할(divide)하고,상기 루프의 마지막 서브 루프의 프롤로그 파트 및 바디 파트에 대한 구성은 상기 루프의 마지막 서브 루프가 아닌 서브 루프의 프롤로그 파트 및 바디 파트에 대한 구성을 공유하는 것을 특징으로 하는 프로세서.
- 제4항에 있어서,어레이 모드에서는 상기 구성 메모리에 따라 상기 코어스 그레인 어레이의 계산 유닛들을 수행시키고, 인스트럭션 셋 프로세서 모드에서는 상기 코어스 그레인 어레이의 계산 유닛들 중 미리 선정된 계산 유닛들을 수행시키는 것을 특징으로 하는 프로세서.
- 제1항에 있어서,상기 서브 루프의 수행에 필요한 시간이 상기 인터럽트 요청의 발생으로부터 상기 인터럽트 요청의 처리에까지 요구되는 시간보다 크지 않도록 상기 분할되는 서브 루프의 크기(size)가 결정되는 것을 특징으로 하는 프로세서.
- 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고,상기 코어스 그레인 어레이에서 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)가 소정의 기준 이하이면 상기 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 것을 특징으로 하는 프로세서.
- 복수 개의 계산 유닛들(function unit) 및 복수 개의 레지스터 파일들(register file)을 포함한 코어스 그레인 어레이(coarse grained array)를 포함하고,상기 코어스 그레인 어레이에서 루프를 수행하는 중 인터럽트 요청이 발생하면, 상기 루프의 종료까지 남아 있는 반복 회수(iteration count)가 소정의 기준 이상이면 상기 루프의 수행을 중단하고 상기 인터럽트 요청을 처리하는 것을 특징으로 하는 프로세서.
- 코어스 그레인 어레이에서 수행될 루프(loop)를 소정의 기준에 따라 복수 개의 서브 루프로 분할(split)하는 단계; 및상기 서브 루프의 수행 중 인터럽트 요청이 발생하면, 상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 단계를 포함하는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
- 제13항에 있어서,상기 서브 루프의 수행이 끝나기를 기다린 후 상기 인터럽트 요청을 처리하는 단계는,상기 서브 루프의 수행을 종료한 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이의 외부에 위치하는 중앙 레지스터 파일(central register file)에 저장하고, 상기 인터럽트 요청을 처리하는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
- 제13항에 있어서,상기 서브 루프의 수행을 종료한 후 상기 인터럽트 요청을 처리하는 단계는,상기 인터럽트 요청의 처리를 위하여 문맥 교환(context switching)이 필요한지를 판단하는 단계; 및상기 인터럽트 요청의 처리를 위하여 문맥 교환(context switching)이 필요하면, 상기 서브 루프의 수행을 종료한 후, 상기 서브 루프의 수행의 결과 값을 상기 코어스 그레인 어레이의 외부에 위치하는 메모리(memory)에 저장하고, 상기 인터럽트 요청을 처리하는 단계를 포함하는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
- 제13항에 있어서,상기 서브 루프의 수행 시간 동안 상기 인터럽트 요청을 블로킹하여도 상기 인터럽트 요청의 실시간 제한을 만족할 수 있도록 상기 분할되는 서브 루프의 크기(size)가 결정되는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
- 제13항에 있어서,상기 복수 개의 서브 루프를 상기 코어스 그레이 어레이에서 수행할 수 있도록 상기 복수 개의 서브 루프를 수행하기 위한 구성들(configurations)을 구성 메모리(configuration memory)에 저장하는 단계를 더 포함하는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
- 제17항에 있어서,하나의 서브 루프를 수행하기 위한 구성(configuration)은 적어도 하나 이상의 서브 구성(sub configuration)을 포함하고,상기 복수 개의 서브 루프 각각에 대한 구성 중 공통되는 서브 구성은 상기 구성 메모리의 동일한 위치에 저장되는 것을 특징으로 하는 코어스 그레인 어레이 에서의 인터럽트 처리 방법.
- 제17항에 있어서,상기 루프의 마지막 서브 루프가 아닌 서브 루프들에 대해서는 상기 구성 메모리에 저장된 동일한 구성(configuration)을 공유하는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
- 제19항에 있어서,상기 복수 개의 서브 루프를 데이터를 로드하는 프롤로그 파트(prolog part), 루프 작업(loop work)을 수행하는 바디 파트(body part), 및 상기 루프 작업의 결과 값을 기록하는 에필로그 파트(epilog part)로 분할하고,상기 루프의 마지막 서브 루프의 프롤로그 파트 및 바디 파트에 대한 구성은 상기 루프의 마지막 서브 루프가 아닌 서브 루프의 프롤로그 파트 및 바디 파트에 대한 구성을 공유하는 것을 특징으로 하는 코어스 그레인 어레이에서의 인터럽트 처리 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020060003018A KR100681199B1 (ko) | 2006-01-11 | 2006-01-11 | 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 |
US11/519,858 US7529917B2 (en) | 2006-01-11 | 2006-09-13 | Method and apparatus for interrupt handling during loop processing in reconfigurable coarse grained array |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020060003018A KR100681199B1 (ko) | 2006-01-11 | 2006-01-11 | 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR100681199B1 true KR100681199B1 (ko) | 2007-02-09 |
Family
ID=38106058
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020060003018A KR100681199B1 (ko) | 2006-01-11 | 2006-01-11 | 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7529917B2 (ko) |
KR (1) | KR100681199B1 (ko) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7870364B2 (en) | 2008-01-30 | 2011-01-11 | Samsung Electronics Co., Ltd. | Reconfigurable apparatus and method for providing multiple modes |
US8417918B2 (en) | 2009-04-22 | 2013-04-09 | Samsung Electronics Co., Ltd. | Reconfigurable processor with designated processing elements and reserved portion of register file for interrupt processing |
US8869129B2 (en) | 2009-01-19 | 2014-10-21 | Samsung Electronics Co., Ltd. | Apparatus and method for scheduling instruction |
US9164769B2 (en) | 2010-03-23 | 2015-10-20 | Samsung Electronics Co., Ltd. | Analyzing data flow graph to detect data for copying from central register file to local register file used in different execution modes in reconfigurable processing array |
KR101571882B1 (ko) | 2009-02-03 | 2015-11-26 | 삼성전자 주식회사 | 재구성 가능 어레이의 인터럽트 핸들링을 위한 컴퓨팅 장치및 방법 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8370442B2 (en) * | 2008-08-29 | 2013-02-05 | Commvault Systems, Inc. | Method and system for leveraging identified changes to a mail server |
JP5141151B2 (ja) * | 2007-09-20 | 2013-02-13 | 富士通セミコンダクター株式会社 | 動的再構成回路およびループ処理制御方法 |
KR101335001B1 (ko) * | 2007-11-07 | 2013-12-02 | 삼성전자주식회사 | 프로세서 및 인스트럭션 스케줄링 방법 |
JP4911022B2 (ja) * | 2007-12-27 | 2012-04-04 | 富士通セミコンダクター株式会社 | カウンタ制御回路、動的再構成回路およびループ処理制御方法 |
US9063735B2 (en) * | 2010-10-19 | 2015-06-23 | Samsung Electronics Co., Ltd. | Reconfigurable processor and method for processing loop having memory dependency |
US10776233B2 (en) | 2011-10-28 | 2020-09-15 | Teradyne, Inc. | Programmable test instrument |
US9759772B2 (en) | 2011-10-28 | 2017-09-12 | Teradyne, Inc. | Programmable test instrument |
US9470759B2 (en) * | 2011-10-28 | 2016-10-18 | Teradyne, Inc. | Test instrument having a configurable interface |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR960038592A (ko) * | 1995-04-17 | 1996-11-21 | 켄지 히루마 | 스캐러블, 패러렐, 동적 재구성가능 계산시스템 및 방법 |
KR970076254A (ko) * | 1996-05-28 | 1997-12-12 | 클라크 3세 존 엠 | 신호 프로세싱 응용에 사용하는 재구성가능한 컴퓨터 구조 |
US5987601A (en) * | 1997-02-14 | 1999-11-16 | Xyron Corporation | Zero overhead computer interrupts with task switching |
KR20010020545A (ko) * | 1997-06-27 | 2001-03-15 | 카멜레온 시스템즈, 인크 | 재구성 가능한 컴퓨팅을 위한 집적 프로세서 및프로그래머블 데이터 경로 칩 |
KR20010042690A (ko) * | 1999-02-15 | 2001-05-25 | 롤페스 요하네스 게라투스 알베르투스 | 구성가능 기능 유닛을 가진 데이터 프로세서 및 이러한데이터 프로세서를 사용한 방법 |
KR20010055463A (ko) * | 1999-12-10 | 2001-07-04 | 서평원 | 하드와이어드 태스크 스케쥴러 및 그 태스크 스케쥴러의스케쥴링 방법 |
US6779065B2 (en) * | 2001-08-31 | 2004-08-17 | Intel Corporation | Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads |
JP2005050208A (ja) * | 2003-07-30 | 2005-02-24 | Matsushita Electric Ind Co Ltd | マルチタスクシステムにおけるメモリ管理方式およびタスク制御装置 |
KR20050106591A (ko) * | 2003-01-24 | 2005-11-10 | 미슬토우 테크놀로지즈, 인코포레이티드 | 재구성가능 의미처리기 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4553203A (en) * | 1982-09-28 | 1985-11-12 | Trw Inc. | Easily schedulable horizontal computer |
CA1319757C (en) * | 1988-07-29 | 1993-06-29 | Digital Equipment Corporation | Echelon method for execution of nested loops in multiple processor computers |
DE69837138T2 (de) * | 1997-12-31 | 2007-08-16 | Texas Instruments Inc., Dallas | Unterbrechbare mehrfache Ausfuehrungseinheitverarbeitung waehrend mehrfacher Zuweisung von Register verwendenden Operationen |
US6378022B1 (en) * | 1999-06-17 | 2002-04-23 | Motorola, Inc. | Method and apparatus for processing interruptible, multi-cycle instructions |
-
2006
- 2006-01-11 KR KR1020060003018A patent/KR100681199B1/ko active IP Right Grant
- 2006-09-13 US US11/519,858 patent/US7529917B2/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR960038592A (ko) * | 1995-04-17 | 1996-11-21 | 켄지 히루마 | 스캐러블, 패러렐, 동적 재구성가능 계산시스템 및 방법 |
KR970076254A (ko) * | 1996-05-28 | 1997-12-12 | 클라크 3세 존 엠 | 신호 프로세싱 응용에 사용하는 재구성가능한 컴퓨터 구조 |
US5987601A (en) * | 1997-02-14 | 1999-11-16 | Xyron Corporation | Zero overhead computer interrupts with task switching |
KR20010020545A (ko) * | 1997-06-27 | 2001-03-15 | 카멜레온 시스템즈, 인크 | 재구성 가능한 컴퓨팅을 위한 집적 프로세서 및프로그래머블 데이터 경로 칩 |
KR20010042690A (ko) * | 1999-02-15 | 2001-05-25 | 롤페스 요하네스 게라투스 알베르투스 | 구성가능 기능 유닛을 가진 데이터 프로세서 및 이러한데이터 프로세서를 사용한 방법 |
KR20010055463A (ko) * | 1999-12-10 | 2001-07-04 | 서평원 | 하드와이어드 태스크 스케쥴러 및 그 태스크 스케쥴러의스케쥴링 방법 |
US6779065B2 (en) * | 2001-08-31 | 2004-08-17 | Intel Corporation | Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads |
KR20050106591A (ko) * | 2003-01-24 | 2005-11-10 | 미슬토우 테크놀로지즈, 인코포레이티드 | 재구성가능 의미처리기 |
JP2005050208A (ja) * | 2003-07-30 | 2005-02-24 | Matsushita Electric Ind Co Ltd | マルチタスクシステムにおけるメモリ管理方式およびタスク制御装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7870364B2 (en) | 2008-01-30 | 2011-01-11 | Samsung Electronics Co., Ltd. | Reconfigurable apparatus and method for providing multiple modes |
US8869129B2 (en) | 2009-01-19 | 2014-10-21 | Samsung Electronics Co., Ltd. | Apparatus and method for scheduling instruction |
KR101571882B1 (ko) | 2009-02-03 | 2015-11-26 | 삼성전자 주식회사 | 재구성 가능 어레이의 인터럽트 핸들링을 위한 컴퓨팅 장치및 방법 |
US8417918B2 (en) | 2009-04-22 | 2013-04-09 | Samsung Electronics Co., Ltd. | Reconfigurable processor with designated processing elements and reserved portion of register file for interrupt processing |
US9164769B2 (en) | 2010-03-23 | 2015-10-20 | Samsung Electronics Co., Ltd. | Analyzing data flow graph to detect data for copying from central register file to local register file used in different execution modes in reconfigurable processing array |
Also Published As
Publication number | Publication date |
---|---|
US20070162729A1 (en) | 2007-07-12 |
US7529917B2 (en) | 2009-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100681199B1 (ko) | 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 | |
KR102413832B1 (ko) | 벡터 곱셈 덧셈 명령 | |
CN1127687C (zh) | 带外部协处理器可访问的上下文切换寄存器组的risc处理器 | |
JP4277042B2 (ja) | 演算処理装置 | |
US7024543B2 (en) | Synchronising pipelines in a data processing apparatus | |
JP5573134B2 (ja) | ベクトル型計算機及びベクトル型計算機の命令制御方法 | |
EP0331372B1 (en) | Method of and apparatus using floating point execption signals for controlling several processors | |
KR100812346B1 (ko) | 재구성 어레이에서의 인터럽트 처리 방법 및 장치 | |
JP3120152B2 (ja) | コンピューターシステム | |
US7386646B2 (en) | System and method for interrupt distribution in a multithread processor | |
KR100852563B1 (ko) | 디지털 신호 처리 장치 및 방법 | |
US8417918B2 (en) | Reconfigurable processor with designated processing elements and reserved portion of register file for interrupt processing | |
US20060294344A1 (en) | Computer processor pipeline with shadow registers for context switching, and method | |
EP0476722B1 (en) | Data processing system | |
KR20040016829A (ko) | 파이프라인식 프로세서에서의 예외 취급 방법, 장치 및시스템 | |
JP3573506B2 (ja) | 述語、及びブール式を解くためのコンピュータ・システム、及び方法 | |
KR20190038989A (ko) | 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법 | |
KR102500357B1 (ko) | 메모리 로드 및 산술 로드 유닛 융합 | |
US11481223B2 (en) | Reducing operations of sum-of-multiply-accumulate (SOMAC) instructions | |
JP2001501001A (ja) | データ処理システムにおける入力オペランド制御 | |
JP4444305B2 (ja) | 半導体装置 | |
KR100639146B1 (ko) | 카테시안 제어기를 갖는 데이터 처리 시스템 | |
US11416261B2 (en) | Group load register of a graph streaming processor | |
JP4703735B2 (ja) | コンパイラ、コード生成方法、コード生成プログラム | |
CA3039845A1 (en) | Processor with variable n-bits architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130115 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20140124 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20150116 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20160118 Year of fee payment: 10 |
|
FPAY | Annual fee payment |
Payment date: 20200131 Year of fee payment: 14 |