KR20110044465A - 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법 - Google Patents

재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법 Download PDF

Info

Publication number
KR20110044465A
KR20110044465A KR1020090101151A KR20090101151A KR20110044465A KR 20110044465 A KR20110044465 A KR 20110044465A KR 1020090101151 A KR1020090101151 A KR 1020090101151A KR 20090101151 A KR20090101151 A KR 20090101151A KR 20110044465 A KR20110044465 A KR 20110044465A
Authority
KR
South Korea
Prior art keywords
thread
threads
divided
identification information
processor
Prior art date
Application number
KR1020090101151A
Other languages
English (en)
Other versions
KR101636377B1 (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 KR1020090101151A priority Critical patent/KR101636377B1/ko
Priority to US12/923,487 priority patent/US9043805B2/en
Publication of KR20110044465A publication Critical patent/KR20110044465A/ko
Application granted granted Critical
Publication of KR101636377B1 publication Critical patent/KR101636377B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • G06F15/7875Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS for multiple contexts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Logic Circuits (AREA)

Abstract

재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법이 제안된다.
재구성 프로세서의 메모리 영역은 복수개로 분할되며, 분할된 각 영역에는 스레드 처리에 필요한 문맥(context)이 미리 저장될 수 있다. 따라서, 하나의 스레드에서 다른 스레드로 문맥 전환시, 다른 스레드에 대응하는 영역에 저장된 정보를 이용하여 다른 스레드를 실행할 수 있다.
재구성 프로세서, CGA, 문맥 전환, 멀티 스레딩

Description

재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법 {Configuration processor, configuration control apparatus and method, and Thread modeling method}
재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법 에 관한 것이며, 메모리의 영역을 스레드에 대응되도록 분할하여 문맥전환하는 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법에 관련된 것이다.
최근, 복수의 연산 유닛들을 동시에 구동하여 연산을 수행하는 재구성 프로세서(100)에 관한 기술이 각광받고 있다. 재구성 프로세서는 반복연산과 관련된 루프를 실행하기 위하여 CGA(Coarse Grain Array) 모드로 동작한다. CGA 모드에서, 복수의 연산 유닛(Function Unit : FU)들은 해당 연산을 수행하기 위해 동시에 동작하므로, 연산 처리와 관련된 성능을 향상시킨다.
재구성 프로세서를 이용하여 연산을 수행하던 중 스톨(stall)이 발생하면, 재구성 프로세서는 스톨이 발생한 스레드를 다른 메모리에 hiding하고, 문맥 전환(Context Switching)을 이용하여 멀티 스레딩(Multi-Threading)을 구현한다. 그 러나, 스톨의 지속시간은 대략 5~100 사이클 내외인 반면, 문맥 전환에 필요한 사이클은 스톨의 지속시간을 초과하므로, 멀티 스레딩을 효율적으로 구현하지 못한다. 따라서, 스톨의 지속시간을 효과적으로 활용하기 위해서는 문맥 전환 동작에 필요한 오버헤드 사이클이 0(zero)에 가까워야 한다.
제안하는 실시예에 따른 재구성 프로세서는, 복수의 스레드에 대응하도록 영역이 분할되며, 분할된 각 영역에 상기 대응하는 스레드의 문맥정보를 저장하는 복수의 메모리와, 분할된 영역들 중 실행할 스레드에 대응하는 영역으로부터 문맥정보를 제공받아 연산을 수행하는 복수의 연산 유닛을 포함할 수 있다.
복수의 메모리는, 실행할 스레드의 식별정보를 입력받아, 식별정보에 매핑되는 영역에 대한 복수의 연산 유닛의 액세스를 허용할 수 있다.
복수의 연산 유닛은, 실행할 스레드의 식별정보를 입력받으면, 식별정보에 매핑되는 영역에 저장된 문맥정보를 이용하여 연산을 수행할 수 있다.
복수의 연산 유닛은, 다른 스레드의 식별정보를 입력받으면, 스레드의 실행을 중지하고, 다른 스레드의 식별정보에 매핑되는 영역에 저장된 문맥정보를 이용하여 상기 연산을 수행할 수 있다.
복수의 스레드에 대응하도록 영역이 분할되며, 실행중인 스레드에 대응하는 영역에서 카운팅을 수행하는 카운터와, 카운터에서 카운팅되는 결과에 따라, 스레드를 실행하는데 필요한 구성에 관한 정보를 복수의 연산 유닛에게 제공하는 구성 메모리를 더 포함할 수 있다.
복수의 메모리는, 복수의 스레드에 대응하도록 복수의 영역으로 분할되며, 실행할 스레드에 대응하는 영역에 로딩된 입력값을 복수의 연산 유닛으로 제공하는 적어도 하나의 글로벌 레지스터 파일과, 복수의 스레드에 대응하도록 복수의 영역 으로 분할되며, 복수의 연산 유닛에서 연산된 결과를 실행할 스레드에 대응하는 영역에 저장하는 복수의 로컬 레지스터 파일을 포함할 수 있다.
복수의 메모리의 영역이 분할되는 개수 및 크기는 복수의 스레드의 개수 및 크기에 따라 조정가능할 수 있다.
한편, 제안하는 실시예에 따른 재구성 제어장치는, 복수의 스레드에 대응하도록 복수의 영역으로 분할되는 복수의 메모리를 가지는 재구성 프로세서와, 복수의 스레드의 문맥정보가 분할된 복수의 영역 중 복수의 스레드에 대응하는 영역에 저장되도록 하는 제어부를 포함할 수 있다.
제어부는, 복수의 스레드 중 현재 실행할 스레드의 식별정보를 재구성 프로세서에게 제공하며, 재구성 프로세서는 분할된 복수의 영역 중 제공받은 식별정보에 대응하는 영역에 접근하고, 접근한 영역에 저장된 문맥정보를 이용하여 스레드를 실행할 수 있다.
제어부는, 현재 실행할 스레드에 대해 스톨이 발생하면, 다른 실행가능한 스레드의 문맥전환을 명령하고, 다른 스레드의 식별정보를 제공하며, 재구성 프로세서는 상기 분할된 복수의 영역 중 제공받은 다른 스레드의 식별정보에 대응하는 영역에 접근하고, 접근한 영역에 저장된 문맥정보를 이용하여 다른 스레드를 실행할 수 있다.
복수의 스레드의 상태를 저장하는 스레드 상태 레지스터를 더 포함하며, 제어부는 스톨이 발생한 스레드, 스톨이 해제된 스레드, 실행가능한 스레드, 실행 완료된 스레드의 상태를 복수의 스레드 별로 업데이트할 수 있다.
재구성 프로세서는, 복수의 스레드에 대응하도록 영역이 분할되며, 분할된 각 영역에 대응하는 스레드의 문맥정보를 저장하는 복수의 메모리와, 분할된 영역들 중 실행할 스레드에 대응하는 영역으로부터 문맥정보를 제공받아 연산을 수행하는 복수의 연산 유닛을 포함할 수 있다.
한편, 제안하는 실시예에 따른 재구성 제어 방법은, 재구성 프로세서에 구비되는 복수의 메모리의 영역을 복수의 스레드에 대응하도록 분할하는 단계와, 복수의 스레드의 문맥정보를 분할된 복수의 영역 중 복수의 스레드에 대응하는 영역에 저장하는 단계를 포함할 수 있다.
복수의 스레드 중 현재 실행할 스레드의 식별정보를 재구성 프로세서에게 제공하는 단계와, 분할된 복수의 영역 중 제공받은 식별정보에 대응하는 영역에 접근하는 단계와, 접근한 영역에 저장된 문맥정보를 이용하여 스레드를 실행하는 단계를 더 포함할 수 있다.
현재 실행할 스레드에 대해 스톨이 발생하면, 다른 실행가능한 스레드의 문맥전환을 명령하고, 다른 스레드의 식별정보를 재구성 프로세서에게 제공하는 단계와, 분할된 복수의 영역 중 제공받은 다른 스레드의 식별정보에 대응하는 영역에 접근하는 단계와, 접근한 영역에 저장된 문맥정보를 이용하여 다른 스레드를 실행하는 단계를 더 포함할 수 있다.
스톨이 발생하거나 스톨이 해제되면, 현재 실행할 스레드의 상태를 변경하는 단계를 더 포함할 수 있다.
한편, 제안하는 실시예에 따른 스레드 모델링 방법은, 복수의 커널 함수를 호출하고, 복수의 커널 함수와 커널 함수 각각에 해당하는 입력 데이터세트를 각각의 스레드로 설정하는 단계와, 각각의 스레드 중 하나의 스레드에 대해 스톨이 발생하면, 다른 스레드로 문맥전환하여 다른 스레드를 실행하는 단계를 포함할 수 있다.
한편, 제안하는 실시예에 따른 스레드 모델링 방법은, 하나의 커널 함수를 호출하고, 호출된 커널 함수에 해당하는 입력 데이터세트를 분할하는 단계와, 하나의 커널 함수와 분할된 각각의 입력 데이터세트를 각각의 스레드로 설정하는 단계와, 각각의 스레드 중 하나의 스레드에 대해 스톨이 발생하면, 다른 입력 데이트세트에 대응하는 스레드로 문맥전환하여 다른 스레드를 실행하는 단계를 포함할 수 있다.
제안하는 실시예에 따르면, 재구성 프로세서의 메모리 영역은 복수개로 분할되며, 분할된 각 영역에는 스레드 처리에 필요한 문맥(context)이 미리 저장될 수 있다. 하나의 스레드에서 다른 스레드로 문맥 전환시, 재구성 프로세서는 다른 스레드에 대응하는 영역에 저장된 정보를 이용하여 다른 스레드를 실행할 수 있다.
즉, 연산 유닛에 대한 구성 정보가 구성 메모리에 미리 로딩되고, 스레드를 실행하는데 필요한 입력값이 글로벌 레지스터의 각 영역에 미리 로딩됨으로써, 문맥 전환시 오버헤드가 발생하지 않을 수 있다. 따라서, 오버헤드 사이클이 발생하지 않는 문맥전환을 통해 멀티 스레딩을 수행할 수 있다.
또한, 제안하는 실시예에 따르면, 재구성 프로세서의 스톨 사이클동안 다른 스레드를 수행함으로써 단위 시간당 처리 능력을 향상시킬 수 있다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 제안하는 실시예에 따른 재구성 프로세서를 도시한 도면이다.
도 1에서, 재구성 프로세서(100)는 카운터(110), 구성 메모리(Configuration Memory)(120), 복수의 메모리(130, RF) 및 재구성 어레이(140)를 포함할 수 있다.
카운터(110)는 프로그램 중 루프가 시작되면 각 사이클마다 카운팅을 증가할 수 있다. 구성 메모리(120)는 카운팅이 증가하면, 해당 사이클의 데이터, 예를 들어, 인스트럭션을 해당 연산 유닛(FU)으로 제공할 수 있다.
도 2를 참조하면, 카운터(110)는 제1 내지 제n영역(CTID1, CTID2, …, CTIDn, n은 상수)으로 분할될 수 있으며, 각 영역(CTID1, CTID2, …, CTIDn)은 각각의 스레드의 ID(TID1, TID2, …, TIDn)에 매핑된다. 즉, 카운터(110)는 컴파일된 스레드의 개수만큼 분할될 수 있다. 즉, 카운터(110)의 분할된 각 영역에는 서로 다른 TID가 할당되거나, 서로 다른 TID에 매핑되는 다른 식별정보가 할당될 수 있다. 따라서, 영역이 분할된 카운터(110)는 스레드 별로 사이클을 카운팅할 수 있다. 후술할 글로벌 레지스터 파일(130)과 로컬 레지스터 파일(RF)에 대해서도 동일할 수 있다.
예를 들어, 현재 제1스레드가 연산되는 중이면, 카운터(110)는 제1스레드의 ID(identification)인 TID1에 대응하는 영역인 CTID1에서 제1스레드의 사이클을 카운 팅할 수 있다. 또한, 제2스레드의 실행 명령이 입력되거나 제2스레드의 ID(TID2)가 입력되면, 카운터(110)는 TID2에 대응하는 영역인 CTID2에서 제2스레드의 사이클을 카운팅할 수 있다.
도 1을 참조하면, 복수의 메모리(130, RF)는 글로벌 레지스터 파일(130) 및 재구성 어레이(140) 의 로컬 레지스터 파일(RF)을 포함할 수 있다. 메모리(130, RF)는 복수의 스레드에 대응하도록 영역이 분할되며, 분할된 각 영역에 상기 대응하는 스레드의 문맥정보를 저장할 수 있다. 이하에서는 메모리(130, RF)를 글로벌 레지스터 파일(130)과 로컬 레지스터 파일(RF)로 구분하여 설명한다.
구성 메모리(120)는 재구성 어레이(140)의 구성에 관한 정보를 저장할 수 있다. 구성에 관한 정보는 각 프로세싱 엘리먼트들의 연산, 동작, 상태 등을 나타내는 비트 또는 제어신호일 수 있다. 후술할 재구성 어레이의 프로세싱 엘리먼트들은 구성 메모리(120)로부터 전달되는 정보들을 이용하여 루프 연산 또는 다른 연산을 실행할 수 있다. 이러한 정보는, 컴파일러가 프로그램의 루프 문을 컴파일할 때, 사이클 별로 생성되는 인스트럭션을 포함할 수 있다. 이로써, 연산 유닛(FU)이 어떤 연산을 수행하는지는 구성 메모리(120)에 저장된 정보에 따라 결정될 수 있다.
또한, 구성 메모리(120)는 카운터(110)에서 카운팅되는 결과에 따라, 스레드를 실행하는데 필요한 정보를 해당 연산 유닛(FU)에게 제공할 수 있다. 다시 말하면, 구성 메모리(120)는 카운터(110)에서 카운팅중인 영역(CTIDn)에 대응하는 정보 를 재구성 어레이(140)에게 제공할 수 있다. 예를 들어, 카운터(110)의 CTID1이 사이클을 카운팅하면, 구성 메모리(120)는 제1스레드(TID1)에 대응하는 정보, 즉, 인스트럭션을 재구성 어레이(140)에게 제공할 수 있다.
도 3은 제안하는 실시예에 따른 구성 메모리를 도시한 도면이다.
도 3을 참조하면, 구성 메모리(120)는 제1 내지 제n영역(MTID1, MTID2, …, MTIDn)으로 분할될 수 있다. 각 영역(MTID1, MTID2, …, MTIDn)은 각각의 스레드(TID1, TID2, …, TIDn)에 매핑되도록 분할된다. 각 영역(MTID1, MTID2, …, MTIDn)에는 컴파일 후 생성되는 각 스레드에 해당하는 구성 정보가 외부 메모리(미도시)로부터 로딩되어 저장될 수 있다. 따라서, 제n스레드(TIDn)의 실행이 요청되면, TIDn에 대응하는 구성 정보가 MTIDn로부터 연산 유닛(FU)으로 제공될 수 있다.
예를 들어, 현재 제1스레드(TID1)가 연산되는 중이면, 구성 메모리(120)는 TID1에 대응하는 영역인 MTID1에서 제1스레드에 대응하는 정보를 재구성 어레이(140)에게 제공할 수 있다. 또한, 제2스레드의 ID(TID2)가 가산기(30a)를 통해 입력되어 제2스레드의 실행을 명령하면, 구성 메모리(120)는, 문맥전환에 필요한 오버헤드 사이클을 발생하지 않으면서, TID2에 대응하는 영역인 MTID2에서 제2스레드에 대응하는 정보를 제공할 수 있다.
카운터(110)가 도 2에 도시된 바와 같이 분할되지 않은 경우, 구성 메모리(120)가 도 3에 도시된 바와 같이 분할될 수 있다. 또는, 카운터(110)가 도 2에 도시된 바와 같이 분할되는 경우, 구성 메모리(120)는 분할되지 않거나 또는 분할되어 사용될 수 있다.
다시 도 1을 참조하면, 복수의 메모리 중 하나로 적용된 글로벌 레지스터 파일(130)은 후술할 제어부(620)와 재구성 어레이(140)가 상호 공유할 수 있다. 글로벌 레지스터 파일(130)은 제어부(620)로부터 입력값을 입력받아 연산 유닛(FU)으로 제공하거나, 연산 유닛(FU)에서 연산된 결과값을 입력받아 제어부(620)로 제공할 수 있다. 또한, 글로벌 레지스터 파일(130)은 실행할 스레드의 식별정보(TIDn)를 제어부(620)로부터 입력받아, 식별정보에 매핑되는 영역에 대한 연산 유닛(FU)의 액세스를 허용할 수 있다.
따라서, 제n스레드(TIDn)의 실행이 요청되면, 글로벌 레지스터 파일(130)은 TIDn에 대응하는 영역(LTIDn)에 로딩된 입력값을 복수의 연산 유닛(FU)으로 제공할 수 있다.
도 4는 제안하는 실시예에 따른 글로벌 레지스터 파일을 도시한 도면이다. 도 4를 참조하면, 글로벌 레지스터 파일(130)은 제1 내지 제n영역(GTID1, GTID2, …, GTIDn)으로 분할될 수 있다. 분할된 각 영역(GTID1, GTID2, …, GTIDn)은 각각의 스레드(TID1, TID2, …, TIDn)에 매핑된다. 각 영역(GTID1, GTID2, …, GTIDn)에는 각 스레드에 해당하는 레지스터가 구성 메모리(120)로부터 로딩되거나 외부 메모리(미도시)로부터 로딩되어 저장될 수 있다.
예를 들어, 제2스레드(TID2)의 실행 명령이 입력되거나 제2스레드의 ID(TID2)가 가산기(40a)를 통해 입력되면, 글로벌 레지스터 파일(130)은 TID2에 대응하는 영역인 GTID2에서 제2스레드(TID2)에 대응하는 입력 데이터세트, 즉, 입력값을 재구성 어레이(140)에게 제공할 수 있다.
도 1을 참조하면, 재구성 어레이(140)는 복수의 연산 유닛(FU: Function Unit) 및 복수의 로컬 레지스터 파일(RF: Register File)을 포함할 수 있다. 하나의 연산 유닛(FU)과 하나의 로컬 레지스터 파일(RF)은 페어(pair)를 이룰 수 있다. 하나의 프로세싱 엘리먼트는 연산 유닛(FU)과 로컬 레지스터 파일(RF)을 포함하거나, 또는 연산 유닛(FU)만으로 이루어질 수 있다.
재구성 어레이(140)는 자신에 포함된 프로세싱 엘리먼트들 사이의 연결 상태를 구성 메모리(120)에 저장된 정보, 또는 인스트럭션(instruction)에 따라 변경할 수 있다. 또한, 재구성 어레이(140)는 구성 메모리(120)에 저장된 구성 또는 인스트럭션에 따라, 연산 유닛(FU)의 함수(function)를 정의할 수도 있다.
연산 유닛(FU)은 도 2 내지 도 5와 같이 분할된 각 영역 중 실행할 스레드에 대응하는 영역으로부터 문맥정보를 제공받아 연산을 수행할 수 있다. 연산 유닛(FU)은 제어부(620)로부터 실행할 스레드의 식별정보(예를 들어, TID1)를 입력받으면, 식별정보에 매핑되는 영역에 저장된 문맥정보를 이용하여 연산을 수행할 수 있다.
연산 유닛(FU)은 다른 스레드의 식별정보(예를 들어, TID2)를 제어부(620)로부터 입력받으면, 스레드(TID1)의 실행을 중지하고, 다른 스레드의 식별정 보(TID2)에 매핑되는 영역에 저장된 문맥정보를 이용하여 연산을 수행할 수 있다.
로컬 레지스터 파일(RF)은 레지스터들의 집합으로, 연산 유닛(FU)에서 사용되는 데이터 또는 연산된 결과(output value)를 저장할 수 있다.
도 5는 제안하는 실시예에 따른 로컬 레지스터 파일을 도시한 도면이다.
도 5를 참조하면, 로컬 레지스터 파일(RF)은 제1 내지 제n영역(LTID1, LTID2, …, LTIDn)으로 분할될 수 있다. 각 영역(LTID1, LTID2, …, LTIDn)은 각각의 스레드(TID1, TID2, …, TIDn)에 매핑된다. 각 영역(LTID1, LTID2, …, LTIDn)에는 각 스레드에 해당하는 레지스터가 구성 메모리(120)로부터 로딩되거나, 연산 유닛(FU)의 연산 결과가 저장될 수 있다.
예를 들어, 현재 제1스레드(TID1)가 연산되는 중이면, 로컬 레지스터 파일(RF)은 TID1에 대응하는 영역인 LTID1에 제1스레드(TID1)에 대응하는 연산 결과를 저장할 수 있다. 또한, 제2스레드(TID2)의 실행 명령이 입력되거나 제2스레드의 ID(TID2)가 가산기(50a)를 통해 입력되면, 로컬 레지스터 파일(RF)은 TID2에 대응하는 영역인 LTID2에 제2스레드(TID2)에 대응하는 연산 결과를 저장할 수 있다.
도 6은 제안하는 실시예에 따른 재구성 제어 장치를 도시한 블록도이다.
도 6에 도시된 재구성 제어 장치(600)는 재구성 어레이를 갖는 장치로서, 재구성 어레이 모드로 동작할 수 있다.
먼저, 컴파일러(미도시)가 CGA 커널화가 가능한 루프(loop)를 포함하는 프 로그램 소스 코드를 컴파일하면, 적어도 하나의 스레드, Configuration code, Thread launch stub code, Instruction code, BSS data가 생성될 수 있다.
Configuration code는 재구성 어레이 모드(예를 들어, CGA 모드)를 실행하기 위하여 구성 메모리(120)에 로딩될 코드이다.
Thread launch stub code는 프로그램 실행 중 커널을 실행하기 직전에 재구성 어레이 모드에 필요한 준비 작업들을 수행하는 명령 코드이다. CGA 모드로 동작하는 경우 커널은 CGA 커널일 수 있다. Thread launch stub code는 스레드 상태 레지스터(610)와 제어부(620)의 초기화, 분할된 레지스터 파일(130, RF)의 각 영역을 각 스레드에 매핑되도록 세팅하는 작업을 수행하도록 할 수 있다.
Instruction code는 재구성 어레이 모드에서 사용되는 커널(예를 들어, CGA 커널) 이외의 부분을 실행하기 위한 명령 코드이다. BSS data는 프로그램에서 정의한 global, static 변수, 상수 데이터 등을 포함한다.
컴파일된 프로그램은 외부 메모리(미도시)에 저장될 수 있다. 컴파일 후, 프로그램의 실행을 시작하기 이전에 프로그램을 재구성 프로세서(100)에 로딩할 수 있다. 프로그램의 로딩과정은 다음과 같을 수 있다.
재구성 프로세서(100)는 외부 버스와 연결되는 인터페이스를 포함하며, 인터페이스는 재구성 프로세서(100) 내의 구성 메모리(120), 인스트럭션 메모리(미도시), 데이터 메모리(미도시)와 외부 메모리(미도시) 간의 데이터를 송수신할 수 있다.
Configuration code는 프로그램 로딩 시 인터페이스를 통해 프로세서(100) 내부의 구성 메모리(120)로 로딩될 수 있다.
Thread launch stub code와 Instruction code는 인스트럭션 메모리(미도시)가 프로세서(100)의 내부에 있는 경우 인스트럭션 메모리로 로딩된다. 반면, 인스트럭션 메모리가 프로세서(100)의 외부에 있는 경우, 별도의 로딩 과정은 수행되지 않을 수 있다.
BSS data는 프로그램 로딩 시 인터페이스를 통해 프로세서(100) 내부의 데이터 메모리로 로딩될 수 있다.
상술한 설명에 의하면, 프로그램의 로딩 과정에서는 구성 메모리(120)에만 데이터가 로딩될 수 있다.
로딩이 완료되면, 프로그램 실행을 시작하기 직전에, 즉, 재구성 어레이 모드로 진입하기 직전에 Thread launch stub code가 실행될 수 있다. 이로써, 스레드 상태 레지스터(610)와 제어부(620)는 초기화되며, 복수 영역으로 분할된 카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 각 영역은 각 스레드에 매핑되는 데이터로 세팅될 수 있다.
도 6을 참조하면, 재구성 제어 장치(600)는 스레드 상태 레지스터(610), 제어부(620) 및 재구성 프로세서(100)를 포함할 수 있다. 도 6에 도시된 재구성 프로세서(100)는 도 1을 참조하여 설명한 재구성 프로세서(100)이므로 자세한 설명은 생략한다. 다만, 재구성 프로세서(100)는 복수의 스레드에 대응하도록 복수의 영역으로 분할되는 복수의 메모리(130, RF)를 포함할 수 있다.
스레드 상태 레지스터(610)는 재구성 어레이 모드로 진입하기 이전에 초기 화되며, 재구성 어레이 모드가 시작되면, 스레드의 초기 상태 또는 변경된 상태를 저장할 수 있다. 상태는 스레드가 실행가능함을 의미하는 runnable 상태, 실행 중인 스레드에 대해 스톨(stall)이 발생하였음을 의미하는 스톨 발생 상태, 발생한 스톨이 해결되었음을 의미하는 스톨 해제 상태, 스레드가 실행완료되었음을 포함하는 상태를 포함할 수 있다.
스톨은 연산 유닛(FU)가 연산을 실행하기 위해 필요한 값이 설정되어 있지 않음으로써 발생하는 상태이다. 스톨이 발생하면, 연산 유닛(FU)는 해당 스레드를 실행하지 못하고 휴지 상태에 있게 된다.
스톨의 종류로는 DMQ 스톨(dmq_stall), Instrinsic 스톨(intrinsic_stall) 및 Instruction 스톨(I$_stall)이 있다. DMQ 스톨은 글로벌 레지스터 파일(130) 또는 로컬 레지스터 파일(RF)로부터 필요한 값을 로딩하여 저장하지 못하는 경우 발생할 수 있다. Instrinsic 스톨은 연산 유닛(FU)이 수행하는 비교적 간단한 연산보다 큰 연산이 연산 유닛(FU)으로 입력되는 경우 발생할 수 있다. Instruction 스톨은 인스트럭션 cache에 miss가 발생하는 경우 발생할 수 있다.
또한, 제어부(620)에 의해 발생하는 코어 스톨(Core_stall)은 루프 문이 아닌 일반적인 커널에서 발생할 수 있다.
제어부(620)는 컴파일시 루프가 발생하면, 카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 영역을 스레드 개수만큼 분할할 수 있다. 그리고, 제어부(620)는 분할된 레지스터 파일(130, RF)의 각 영역을 각 스레드에 매핑되도록 세팅할 수 있다. 예를 들어, 제어부(620)는 분할된 각 영역에 각 스레 드에 대응하는 ID를 할당할 수 있다. 카운터(110)의 경우, 도 2에 도시된 바와 같이 각 영역에는 제1스레드(TID1)에 대응하는 CTID1, 제2스레드(TID2)에 대응하는 CTID2 등의 ID가 할당될 수 있다. 이 때, 스레드의 개수는 컴파일 과정에서 알 수 있다.
또는, 카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 분할되는 개수는 제조단계에서 분할되어 고정되거나 또는 제어부(620)에 의해 변경될 수 있다.
제어부(620)는 재구성 어레이 모드를 시작하기 이전에, 재구성 어레이 모드에 필요한 준비 작업들을 수행할 수 있다. 즉, 제어부(620)는 각 스레드의 문맥정보를 레지스터 파일(130, RF)의 분할된 각 영역에 서로 매핑되도록 로딩/저장할 수 있다. 예를 들어, 제어부(620)는 처리할 입력 데이터세트를 글로벌 레지스터 파일(130)에 저장하거나, 해당 레지스터를 글로벌 레지스터 파일(130)에 제공하거나, 스레드를 실행하는데 필요한 구성 정보를 프로세싱 엘리먼트에게 제공할 수 있다.
제어부(620)는 재구성 어레이 모드가 시작하면 모든 스레드의 상태를 실행가능한 runnable로 설정할 수 있다. 재구성 어레이 모드로 동작하는 것은 CGA 커널을 수행하는 것을 의미할 수 있다.
제어부(620)는 재구성 어레이 모드로 동작하는 중, 스레드의 상태가 변경하면, 스레드 상태 레지스터(610)에 세팅된 해당 스레드의 상태를 변경할 수 있다. 예를 들어, 제1스레드(TID1)를 실행하는 중 스톨이 발생하면, 제어부(620)는 제1스 레드(TOD1)의 상태를 '스톨 발생'으로 설정하고, 스톨이 해제되면, '스톨 해제'로 설정할 수 있다. 또한, 제1스레드(TID1)의 실행이 완료되면, '스톨 종료'로 설정할 수 있다.
또한, 제어부(620)는 실행가능한 복수의 스레드 중 현재 실행할 스레드를 선택하여 실행을 명령하고, 선택된 스레드에 대응하는 어드레스를 가산기(40a, 50a)에게 제공할 수 있다. 또한, 이와 함께, 제어부(620)는 선택된 스레드의 ID인 TIDn을 카운터(110), 가산기(40a, 50a)에게 제공할 수 있다.
또 다른 예로, 제어부(620)는 TIDn을 도 3과 같은 구성 메모리(120)의 가산기(30a, 40a, 50a)에게 제공할 수 있다. 카운터(110)는 입력되는 TIDn에 대응하는 영역(CTIDn)에서 스레드의 사이클을 카운팅할 수 있다.
이하에서는 선택된 스레드가 제1스레드이고, 제어부(620)는 TID1을 제공하는 경우를 예로 들어 설명한다.
어드레스가 가산기(40a)로 입력될 때, TID1은 오프셋 역할을 하여, 가산기(4a)에서 어드레스와 가산된다. 따라서, 복수의 메모리(130, RF) 중 하나로 적용된 글로벌 레지스터 파일(130)은 TID1에 대응하는 영역(GTID11)을 선택한 후, 선택된 영역(GTID1)에서 해당 어드레스에 액세스하여 필요한 정보를 독출할 수 있다.
어드레스가 가산기(50a)로 입력될 때, TID1은 오프셋 역할을 하여, 가산기(50a)에서 어드레스와 가산된다. 따라서, 로컬 레지스터 파일(RF)은 TID1에 대응하는 영역(LID11)을 선택한 후, 선택된 영역(LTID1)에 연산 유닛(FU)의 연산결과를 저장할 수 있다.
다만, 제1스레드를 선택하여 실행 명령을 준 후, 스톨이 발생하면, 제어부(620)는 제1스레드의 상태를 '스톨 발생'으로 변경하여 스레드 상태 레지스터(610)에 저장할 수 있다. 그리고, 제어부(620)는 스레드 상태 레지스터(610)를 확인하여, 문맥 전환(Context Switching)을 할 수 있다. 즉, 제어부(620)는 다른 실행가능한 스레드를 선택하여 실행을 명령할 수 있다.
예를 들어, 다른 실행가능한 스레드로 제2스레드가 선택되면, 제어부(620)는 TID2를 카운터(110), 가산기(40a, 50a)로 제공함으로써, 제2스레드에 해당하는 문맥이 글로벌 레지스터 파일(130)과 로컬 레지스터 파일(RF)에 로딩되도록 할 수 있다.
이 때, 재구성 프로세서(100)는 이미 각 레지스터 파일(130, RF)에 로딩된 제2스레드의 정보를 이용하여 제2스레드를 실행하므로, 루프 가속화를 더 신속히 진행할 수 있다. 특히, 스톨이 발생한 제1스레드의 정보를 다른 메모리에 저장하고, 제2스레드의 정보를 읽어오는 과정이 불필요하므로, 사이클을 소모하지 않고 신속하게 문맥전환을 수행하는 것이 가능하다.
상기와 같은 과정에 의해 루프에 속한 모든 스레드의 실행이 완료되면, 제어부(620)는 재구성 어레이 모드를 종료할 수 있다. 즉, 제어부(620)는 CGA 커널 모드를 종료하고, VLIW와 같은 일반 동작 모드로 전환할 수 있다.
도 7은 제안되는 일 실시예에 따른 멀티플 커널을 멀티 스레딩하기 위한 스레드 모델을 설명하기 위한 도면, 도 8은 다른 실시예에 따른 싱글 커널을 멀티 스 레딩하기 위한 스레드 모델을 설명하기 위한 도면이다.
먼저, 스레드에 대해 간략히 설명하면 다음과 같다. 대량의 입력 데이터세트(dataset)가 존재하는 경우, 커널 함수는 루프 내에서 반복(iteration)적인 연산을 수행하면서 입력 데이터세트를 모두 처리할 수 있다. 이 과정에서 루프의 반복 연산을 복수의 연산 유닛(FU)에 매핑하여 병렬로 처리함으로써 루프 가속화를 수행할 수 있다. 하나의 커널 함수에 하나의 입력 데이터세트가 주어지면, 커널 함수의 호출이 일어나게 되며, 이 때 하나의 커널 인스턴스가 발생한다.
제안하는 실시예에서는 이 커널 인스턴스를 멀티 스레딩의 기본 단위인 스레드로 정의할 수 있다. 스레드는 컴파일러(미도시)가 프로그램을 재구성 프로세서(100)에서 이해할 수 있는 기계어 명령어로 컴파일하는 경우 생성되며, 복수 개 생성될 수 있다. 복수의 스레드가 생성되는 경우, 각 스레드에는 스레드 ID(TID: Thread Identification)가 할당될 수 있다. 스레드 ID는 예로 들어, TID1, TID2, …, TIDn으로 표시될 수 있다.
도 7을 참조하면, 커널은 루프를 가속으로 수행하기 위하여, 루프에 해당하는 프로그램을 재구성 어레이 모드(예를 들어, CGA 모드)로 실행하는 형태로 컴파일해 놓은 것을 의미할 수 있다. 따라서, 하나의 루프 당 하나의 커널을 할당할 수 있으며, 하나의 루프는 하나의 스레드에 대응한다. 도 7에서 dataset a와 dataset b는 각각의 루프에 대응하는 입력 데이터세트로서, 각각 커널 A 및 커널 B로 입력된다.
사용자 프로그램은 동시에 수행이 가능한 복수의 커널 함수(커널 A, 커널 B)를 동시에 론치해 둘 수 있다. 복수의 커널 함수는 비동시성(asynchronous)으로 호출되며, 호출된 커널 함수의 커널 인스턴스는 큐(미도시)에서 실제 실행을 기다린다. 즉, 재구성 프로세서(100)는 큐에 올라와 있는 복수의 커널 인스턴스 중 하나를 먼저 실행할 수 있다. 실행을 요청한 후, 또는 실행 도중, 스톨이 발생하면, 재구성 프로세서(100)는 다른 커널 인스턴스를 선택하여 문맥 전환(Context Switching)을 할 수 있다. 예를 들어, 재구성 프로세서(100)는 커널 A에서 커널 B로 문맥 전환할 수 있다.
실행이 완료된 커널 인스턴스는 다른 큐에 입력될 수 있다. 유저 어플리케이션은 원하는 시점에 상기 다른 큐를 확인하여 커널 인스턴스의 수행이 완료되었는지와, 필요한 결과를 조회할 수 있다.
상술한 멀티플 커널을 멀티 스레딩하기 위한 스레드 모델을 일 예를 들어 설명하면 다음과 같다. 컴파일된 프로그램 안에 루프가 두 개 있는 경우, 각 루프는 커널A와 커널B로 컴파일되며, 하나의 루프는 하나의 스레드로 정의될 수 있다. 즉, 도 7에 도시된 바와 같이 입력 데이터세트(dataset a)를 가지는 루프는 하나의 스레드로 정의되어 커널 A로 입력되며, 입력 데이터세트(dataset b)를 가지는 루프는 하나의 스레드로 정의되어 커널 B로 입력된다. 재구성 프로세서(100) 또는 제어부(620)는 커널 A와 커널 B에 해당하는 구성 정보, 레지스터를 구성 메모리(120), 글로벌 레지스터 파일(130) 또는 로컬 레지스터 파일(RF)의 분할된 영역 중 대응하는 영역에 로딩할 수 있다.
구성 프로세서(100)가 커널 A를 실행하도록 명령한 후 스톨이 발생하면, 재 구성 프로세서(100)는 제어부(620)는 커널 B를 실행하도록 명령한다. 즉, 제어부(620)는 커널 B의 ID, 즉, TID를 제공한다. 이로써, 재구성 프로세서(100)는 카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF) 중 TID에 매핑되는 영역을 이용하여 커널 B를 실행한다.
도 8을 참조하면, 사용자 프로그램은 한 번에 하나의 커널 함수를 호출할 수 있으며, 호출된 커널 함수가 완료될 때까지 다른 함수를 호출하지 않을 수 있다. 루프 문의 경우, 커널 함수가 호출될 때 주어지는 데이터세트의 크기에 따라 루프의 반복 횟수가 설정될 수 있다. 따라서, 제안하는 실시예에서는 컴파일러가 루프를 복수의 루프로 분할하여 컴파일하고, 컴파일된 각 루프를 서로 다른 커널 인스턴스로 설정하여 큐에 등록할 수 있다.
도 8의 경우, 입력 데이터세트는 3개의 데이터세트(dataset a1~a3)로 분할되었으나, 모두 동일한 커널 A로 입력된다. 이는 실제 루프 코드는 하나이나, 스레드를 3개로 정의하고, 각 스레드 별로 ID가 할당되는 것을 의미한다. 이와 함께, 카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)은 분할된 각 스레드의 ID에 대응되도록 분할될 수 있다.
재구성 프로세서(100)는 큐에 대기 중인 복수의 커널 인스턴스 중 하나(예를 들어, dataset a1에 대응하는 커널 인스턴스)를 실행한다. 실행 도중 스톨이 발생하면, 제어부(620)는 다른 커널 인스턴스 중 하나(예를 들어, dataset a2에 대응하는 커널 인스턴스)를 선택하여 문맥 전환할 수 있다. 이로써, 재구성 프로세서(100)는 다른 커널 인스턴스에 대응하는 스레드를 이미 각 레지스터에 로딩된 정 보를 이용하여 사이클의 추가적인 사용없이 실행할 수 있다.
카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 영역 분할은 도 7 및 도 8을 참조하여 설명한 문맥 전환을 위한 스레드 모델에 따라 다르게 분할될 수 있다.
도 9는 기분할된 영역을 이용하는 문맥 세팅을 설명하기 위한 흐름도이다.
도 9를 참조하면, 910단계에서, 컴파일러는 CGA 커널화가 가능한 루프(loop)를 포함하는 프로그램 소스 코드를 컴파일하여, 적어도 하나의 스레드, Configuration code, Thread launch stub code, Instruction code 또는 BSS data를 생성할 수 있다.
920단계에서, 컴파일 결과 루프가 발생하면, 930단계에서, 제어부(620)는 구성 메모리(120)에 Configuration code와 같은 데이터, 즉, 구성에 관한 정보를 로딩할 수 있다.
940단계에서, 제어부(620)는 Thread launch stub code와 같은 코드를 실행하여 스레드 상태 레지스터(610)를 초기화할 수 있다.
950단계에서, 제어부(620)는 Thread launch stub code와 같은 코드를 실행하여, 제조단계에서 미리 분할된 각 영역에 해당 스레드의 문맥을 세팅할 수 있다. 즉, 제어부(620)는 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 분할된 각 영역 별로 하나의 스레드에 해당하는 문맥을 세팅할 수 있다. 예를 들어, 제어부(620)는 각 스레드에서 사용하는 loop variable과 레지스터값을 각 스레드의 시작값으로 레지스터 파일(130, RF)에 설정할 수 있다.
960단계에서, 제어부(620)는 재구성 어레이 모드, 예를 들어, CGA 커널을 실행하는 CGA 커널 모드를 시작할 수 있다.
도 10은 생성되는 스레드에 따라 영역을 분할한 후 문맥 세팅하는 과정을 설명하기 위한 흐름도이다.
도 10을 참조하면, 1010단계에서, 컴파일러는 CGA 커널화가 가능한 루프(loop)를 포함하는 프로그램 소스 코드를 컴파일하여, 적어도 하나의 스레드, Configuration code, Thread launch stub code, Instruction code 또는 BSS data를 생성할 수 있다.
1020단계에서, 컴파일 결과 루프가 발생하면, 1030단계에서, 제어부(620)는 카운터(110), 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 영역을 스레드 개수만큼 분할할 수 있다. 이 때, 제어부(620)는 각 스레드의 크기에 비례하도록 각 영역을 분할할 수 있다.
1040단계에서, 제어부(620)는 구성 메모리(120)에 Configuration code와 같은 데이터, 즉, 구성에 관한 정보를 로딩할 수 있다.
1050단계에서, 제어부(620)는 Thread launch stub code와 같은 코드를 실행하여 스레드 상태 레지스터(610)를 초기화할 수 있다.
1060단계에서, 제어부(620)는 Thread launch stub code와 같은 코드를 실행하여, 1030단계에서 분할된 각 영역을 각 스레드에 매핑되도록 세팅할 수 있다. 즉, 제어부(620)는 글로벌 레지스터 파일(130) 및 로컬 레지스터 파일(RF)의 분할된 각 영역 별로 하나의 스레드에 해당하는 문맥정보를 로딩하고, 각 스레드에 대 응하는 ID를 할당할 수 있다.
1070단계에서, 제어부(620)는 재구성 어레이 모드, 예를 들어, CGA 커널을 실행하는 CGA 커널 모드를 시작할 수 있다.
도 11은 제안하는 실시예에 따른 데이터 처리 방법을 설명하기 위한 흐름도이다.
도 11은 도 9의 960단계 또는 도 10의 1070단계에 의해 재구성 어레이 모드에서의 데이터 처리 방법을 보여준다. 재구성 어레이 모드가 시작하면, 1105단계에서, 제어부(620)는 모든 스레드의 상태를 실행가능한 runnable로 설정할 수 있다.
1110단계에서, 제어부(620)는 실행가능한 복수의 스레드 중 현재 실행할 스레드가 선택되어 실행을 명령할 수 있다. 즉, 제어부(620)는 현재 실행할 스레드의 식별정보를 재구성 프로세서(100)에게 제공할 수 있다.
1115단계에서, 선택된 스레드가 실행되는 중, 또는 실행되기 전에 스톨이 발생하면, 1120단계에서, 제어부(620)는 스레드 상태 레지스터(610)에 설정된 현재 스레드의 상태를 '스톨 발생'으로 변경할 수 있다.
1125단계에서, 제어부(620)는 스레드 상태 레지스터(610)를 확인하여 'runnable'로 설정된 실행가능한 스레드 중 다른 스레드를 확인하고, 확인된 스레드의 ID를 카운터(110), 가산기(40a, 50a)로 출력할 수 있다.
1130단계에서, 제어부(620)는 1125단계에서 확인된 다른 스레드로의 문맥전환을 명령하고, 다른 스레드의 식별정보를 재구성 프로세서(100)에게 제공할 수 있다.
1135단계에서, 재구성 프로세서(100)는 분할된 각 영역 중, 다른 스레드에 매핑하는 각 영역에 접근하고, 접근한 영역에 저장된 문맥정보를 이용하여 다른 스레드를 실행할 수 있다. 예를 들어, 1125단계에서 확인된 스레드가 제2스레드이면, 재구성 프로세서(100)의 카운터(110)는 TID2에 대응하는 CTID2의 카운터에서 사이클을 카운팅할 수 있다. 또한, 글로벌 레지스터 파일(130)은 TID2에 대응하는 영역(LTID2)에 접근하고, 접근한 영역(LTID2)에 미리 로딩되어 있는 문맥정보를 재구성 어레이(140)에게 제공할 수 있다. 또한, 연산 유닛(FU)는 제2스레드에 대응하는 문맥정보를 이용하여 제2스레드를 실행하고, 로컬 레지스터 파일(RF)은 TID2에 대응하는 영역(LTID2)에 제2스레드의 실행 결과를 저장할 수 있다.
1140단계에서, 1115단계에서 발생한 스톨이 해결되면, 1145단계에서, 제어부(620)는 스톨이 발생한 현재 스레드를 재실행하도록 재구성 프로세서(100)를 제어할 수 있다. 현재 스레드의 재실행이 완료되면, 제어부(620)는 현재 스레드의 상태를 '실행 완료'로 변경하여 스레드 상태 레지스터(610)에 업데이트할 수 있다.
1150단계에서, 제어부(620)는 스레드 상태 레지스터(610)를 확인하여 실행할 스레드가 남아 있는지 확인할 수 있다. 제어부(620)는 상태가 'runnable'인 스레드는 실행할 스레드인 것으로 판단할 수 있다.
1155단계에서, 제어부(620)는 실행할 다음 스레드를 현재 스레드로 설정하고, 1110단계로 진입할 수 있다.
한편, 1115단계에서, 현재 스레드에 대해 스톨이 발생하지 않으면, 1160단 계에서, 제어부(620)는 현재 스레드를 실행하여 완료할 수 있다.
1165단계에서, 제어부(620)는 실행이 완료된 현재 스레드의 상태를 '실행 완료'로 변경하고, 1150단계로 진입할 수 있다.
또한, 1150단계에서, 론칭된 모든 스레드의 실행이 완료되면, 제어부(620)는 재구성 어레이 모드를 종료할 수 있다.
도 12는 제안하는 실시예에 따른 멀티 스레딩을 위한 스레드 모델링 방법을 설명하기 위한 흐름도이다.
도 7 및 도 12를 참조하면, 1210단계에서, 사용자 프로그램은 컴파일된 적어도 두 개의 커널 함수를 각각 호출할 수 있다.
1220단계에서, 복수의 커널 함수와 복수의 커널 함수 각각에 해당하는 입력 데이터세트는 각각의 스레드로 설정될 수 있다. 이로써 복수의 스레드가 생성될 수 있다. 루프 문으로 구성되는 각 입력 데이터세트는 컴파일러에 의해 각 스레드로 설정될 수 있다.
1230단계에서, 복수의 스레드 중 실행할 스톨 또는 실행 중인 스레드에 스톨이 발생하면, 1240단계에서 재구성 프로세서(100)는 다른 스레드로 문맥전환하여 다른 스레드를 실행할 수 있다.
도 13은 제안하는 다른 실시예에 따른 멀티 스레딩을 위한 스레드 모델링 방법을 설명하기 위한 흐름도이다.
도 8 및 도 13을 참조하면, 1310단계에서, 사용자 프로그램은 컴파일된 복수의 커널 함수 중 하나의 커널 함수를 호출할 수 있다.
1320단계에서, 하나의 커널 함수에 해당하는 입력 데이터세트는 다수개로 분할될 수 있다.
1330단계에서, 분할되어 생성되는 복수의 입력 데이터세트는 각각 스레드로 설정될 수 있다. 루프 문으로 구성되는 각 입력 데이터세트는 컴파일러에 의해 각 스레드로 설정될 수 있다.
1340단계에서, 복수의 스레드 중 실행할 스톨 또는 실행 중인 스레드에 스톨이 발생하면, 1350단계에서 재구성 프로세서(100)는 다른 스레드로 문맥전환하고, 1360단계에서 다른 스레드를 실행할 수 있다.
본 발명의 실시 예에 따른 방법들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
도 1은 제안하는 실시예에 따른 재구성 프로세서를 도시한 도면,
도 2는 제안하는 실시예에 따른 카운터를 도시한 도면,
도 3은 제안하는 실시예에 따른 구성 메모리를 도시한 도면,
도 4는 제안하는 실시예에 따른 글로벌 레지스터 파일을 도시한 도면,
도 5는 제안하는 실시예에 따른 로컬 레지스터 파일을 도시한 도면,
도 6은 제안하는 실시예에 따른 재구성 제어 장치를 도시한 블록도,
도 7은 제안되는 일 실시예에 따른 멀티플 커널을 멀티 스레딩하기 위한 스레드 모델을 설명하기 위한 도면,
도 8은 다른 실시예에 따른 싱글 커널을 멀티 스레딩하기 위한 스레드 모델을 설명하기 위한 도면,
도 9는 기분할된 영역을 이용하는 문맥 세팅을 설명하기 위한 흐름도,
도 10은 생성되는 스레드에 따라 영역을 분할한 후 문맥 세팅하는 과정을 설명하기 위한 흐름도,
도 11은 제안하는 실시예에 따른 데이터 처리 방법을 설명하기 위한 흐름도, 그리고,
도 12 및 도 13은 제안하는 실시예에 따른 멀티 스레딩을 위한 스레드 모델링 방법을 설명하기 위한 흐름도이다.
<도면의 주요 부분에 대한 부호의 설명>
100 : 재구성 프로세서 110 : 카운터
120 : 구성 메모리 130 : 글로벌 레지스터 파일
140 : 재구성 어레이 600 : 재구성 제어 장치
610 : 스레드 상태 레지스터 620 : 제어부

Claims (19)

  1. 복수의 스레드에 대응하도록 영역이 분할되며, 상기 분할된 각 영역에 상기 대응하는 스레드의 문맥정보를 저장하는 복수의 메모리; 및
    상기 분할된 영역들 중 실행할 스레드에 대응하는 영역으로부터 문맥정보를 제공받아 연산을 수행하는 복수의 연산 유닛
    을 포함하는 재구성 프로세서.
  2. 제 1항에 있어서,
    상기 복수의 메모리는, 상기 실행할 스레드의 식별정보를 입력받아, 상기 식별정보에 매핑되는 영역에 대한 상기 복수의 연산 유닛의 액세스를 허용하는 재구성 프로세서.
  3. 제 2항에 있어서,
    상기 복수의 연산 유닛은, 상기 실행할 스레드의 식별정보를 입력받으면, 상기 식별정보에 매핑되는 영역에 저장된 문맥정보를 이용하여 상기 연산을 수행하는 재구성 프로세서.
  4. 제 2항에 있어서,
    상기 복수의 연산 유닛은, 다른 스레드의 식별정보를 입력받으면, 상기 스레 드의 실행을 중지하고, 상기 다른 스레드의 식별정보에 매핑되는 영역에 저장된 문맥정보를 이용하여 상기 연산을 수행하는 재구성 프로세서.
  5. 제 1항에 있어서,
    상기 복수의 스레드에 대응하도록 영역이 분할되며, 실행중인 스레드에 대응하는 영역에서 카운팅을 수행하는 카운터; 및
    상기 카운터에서 카운팅되는 결과에 따라, 상기 스레드를 실행하는데 필요한 구성에 관한 정보를 상기 복수의 연산 유닛에게 제공하는 구성 메모리
    를 더 포함하는 재구성 프로세서.
  6. 제 1항에 있어서,
    상기 복수의 메모리는,
    상기 복수의 스레드에 대응하도록 복수의 영역으로 분할되며, 상기 실행할 스레드에 대응하는 영역에 로딩된 입력값을 상기 복수의 연산 유닛으로 제공하는 적어도 하나의 글로벌 레지스터 파일; 및
    상기 복수의 스레드에 대응하도록 복수의 영역으로 분할되며, 상기 복수의 연산 유닛에서 연산된 결과를 상기 실행할 스레드에 대응하는 영역에 저장하는 복수의 로컬 레지스터 파일
    을 포함하는 재구성 프로세서.
  7. 제 1항에 있어서,
    상기 복수의 메모리의 영역이 분할되는 개수 및 크기는 상기 복수의 스레드의 개수 및 크기에 따라 조정가능한 재구성 프로세서.
  8. 복수의 스레드에 대응하도록 복수의 영역으로 분할되는 복수의 메모리를 가지는 재구성 프로세서; 및
    상기 복수의 스레드의 문맥정보가 상기 분할된 복수의 영역 중 상기 복수의 스레드에 대응하는 영역에 저장되도록 하는 제어부
    를 포함하는 재구성 제어 장치.
  9. 제 8항에 있어서,
    상기 제어부는, 상기 복수의 스레드 중 현재 실행할 스레드의 식별정보를 상기 재구성 프로세서에게 제공하며,
    상기 재구성 프로세서는 상기 분할된 복수의 영역 중 상기 제공받은 식별정보에 대응하는 영역에 접근하고, 상기 접근한 영역에 저장된 문맥정보를 이용하여 상기 스레드를 실행하는 재구성 제어 장치.
  10. 제 9항에 있어서,
    상기 제어부는, 상기 현재 실행할 스레드에 대해 스톨이 발생하면, 다른 실행가능한 스레드의 문맥전환을 명령하고, 상기 다른 스레드의 식별정보를 제공하 며,
    상기 재구성 프로세서는 상기 분할된 복수의 영역 중 상기 제공받은 다른 스레드의 식별정보에 대응하는 영역에 접근하고, 상기 접근한 영역에 저장된 문맥정보를 이용하여 상기 다른 스레드를 실행하는 재구성 제어 장치.
  11. 제 8항에 있어서,
    상기 복수의 스레드의 상태를 저장하는 스레드 상태 레지스터
    를 더 포함하며,
    상기 제어부는 스톨이 발생한 스레드, 스톨이 해제된 스레드, 실행가능한 스레드 및 실행 완료된 스레드의 상태를 상기 복수의 스레드 별로 업데이트하는 재구성 제어 장치.
  12. 제 8항에 있어서,
    상기 재구성 프로세서는,
    상기 복수의 스레드에 대응하도록 영역이 분할되며, 상기 분할된 각 영역에 상기 대응하는 스레드의 문맥정보를 저장하는 복수의 메모리; 및
    상기 분할된 영역들 중 실행할 스레드에 대응하는 영역으로부터 문맥정보를 제공받아 연산을 수행하는 복수의 연산 유닛
    을 포함하는 재구성 제어 장치.
  13. 재구성 프로세서에 구비되는 복수의 메모리의 영역을 복수의 스레드에 대응하도록 분할하는 단계; 및
    상기 복수의 스레드의 문맥정보를 상기 분할된 복수의 영역 중 상기 복수의 스레드에 대응하는 영역에 저장하는 단계
    를 포함하는 재구성 제어 방법.
  14. 제 13항에 있어서,
    상기 복수의 스레드 중 현재 실행할 스레드의 식별정보를 상기 재구성 프로세서에게 제공하는 단계;
    상기 분할된 복수의 영역 중 상기 제공받은 식별정보에 대응하는 영역에 접근하는 단계; 및
    상기 접근한 영역에 저장된 문맥정보를 이용하여 상기 스레드를 실행하는 단계
    를 더 포함하는 재구성 제어 방법.
  15. 제 14항에 있어서,
    상기 현재 실행할 스레드에 대해 스톨이 발생하면, 다른 실행가능한 스레드의 문맥전환을 명령하고, 상기 다른 스레드의 식별정보를 상기 재구성 프로세서에게 제공하는 단계;
    상기 분할된 복수의 영역 중 상기 제공받은 다른 스레드의 식별정보에 대응 하는 영역에 접근하는 단계; 및
    상기 접근한 영역에 저장된 문맥정보를 이용하여 상기 다른 스레드를 실행하는 단계
    를 더 포함하는 재구성 제어 방법.
  16. 제 15항에 있어서,
    상기 스톨이 발생하거나 상기 스톨이 해제되면, 상기 현재 실행할 스레드의 상태를 변경하는 단계
    를 더 포함하는 재구성 제어 방법.
  17. 복수의 커널 함수를 호출하고, 상기 복수의 커널 함수 각각에 해당하는 입력 데이터세트를 각각의 스레드로 설정하는 단계; 및
    상기 각각의 스레드 중 하나의 스레드에 대해 스톨이 발생하면, 다른 스레드로 문맥전환하여 상기 다른 스레드를 실행하는 단계
    를 포함하는 스레드 모델링 방법.
  18. 하나의 커널 함수를 호출하고, 상기 호출된 커널 함수에 해당하는 입력 데이터세트를 분할하는 단계;
    상기 하나의 커널 함수와 상기 분할된 각각의 입력 데이터세트를 각각의 스레드로 설정하는 단계; 및
    상기 각각의 스레드 중 하나의 스레드에 대해 스톨이 발생하면, 다른 입력 데이트세트에 대응하는 스레드로 문맥전환하여 상기 다른 스레드를 실행하는 단계
    를 포함하는 스레드 모델링 방법.
  19. 제 13항 내지 제 18항 중 어느 한 항의 방법을 컴퓨터에서 실행하기 위한 프로그램을 기록하는 컴퓨터 판독 가능한 기록 매체.
KR1020090101151A 2009-10-23 2009-10-23 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법 KR101636377B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020090101151A KR101636377B1 (ko) 2009-10-23 2009-10-23 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법
US12/923,487 US9043805B2 (en) 2009-10-23 2010-09-23 Reconfigurable processor and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020090101151A KR101636377B1 (ko) 2009-10-23 2009-10-23 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법

Publications (2)

Publication Number Publication Date
KR20110044465A true KR20110044465A (ko) 2011-04-29
KR101636377B1 KR101636377B1 (ko) 2016-07-06

Family

ID=43899489

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090101151A KR101636377B1 (ko) 2009-10-23 2009-10-23 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법

Country Status (2)

Country Link
US (1) US9043805B2 (ko)
KR (1) KR101636377B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130066400A (ko) * 2011-12-12 2013-06-20 삼성전자주식회사 재구성가능 프로세서 및 재구성가능 프로세서의 미니 코어
KR20130105182A (ko) * 2012-03-16 2013-09-25 삼성전자주식회사 미니 코어 기반의 재구성가능 프로세서, 이를 위한 스케줄 장치 및 방법
KR20130126555A (ko) * 2012-05-11 2013-11-20 삼성전자주식회사 재구성가능 프로세서 및 재구성가능 프로세서의 코드 압축해제 방법
KR20140070308A (ko) * 2012-11-29 2014-06-10 삼성전자주식회사 병렬 처리를 위한 재구성형 프로세서 및 재구성형 프로세서의 동작 방법
KR20200139741A (ko) * 2018-03-31 2020-12-14 마이크론 테크놀로지, 인크. 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 다수의 유형의 스레드 식별자

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101754203B1 (ko) * 2011-01-19 2017-07-07 삼성전자주식회사 파워 게이팅 기반의 재구성가능 프로세서, 이를 위한 컴파일 장치 및 방법
CN102207851B (zh) * 2011-05-27 2013-07-17 清华大学 一种动态可重构处理器内调用立即数的方法
CN102207850B (zh) * 2011-05-27 2013-07-17 清华大学 一种动态可重构处理器中层次化执行配置流的方法
KR101978409B1 (ko) * 2012-02-28 2019-05-14 삼성전자 주식회사 재구성가능 프로세서, 이를 위한 코드 변환 장치 및 방법
KR101910934B1 (ko) * 2012-03-26 2018-12-28 삼성전자 주식회사 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법
US9558003B2 (en) * 2012-11-29 2017-01-31 Samsung Electronics Co., Ltd. Reconfigurable processor for parallel processing and operation method of the reconfigurable processor
US9569223B2 (en) * 2013-02-13 2017-02-14 Red Hat Israel, Ltd. Mixed shared/non-shared memory transport for virtual machines
CN114168526B (zh) * 2017-03-14 2024-01-12 珠海市芯动力科技有限公司 可重构并行处理
US10423415B2 (en) * 2017-04-01 2019-09-24 Intel Corporation Hierarchical general register file (GRF) for execution block
US10922098B2 (en) 2017-10-05 2021-02-16 Micron Technology, Inc. DSP execution slice array to provide operands to multiple logic units
US11061674B2 (en) * 2017-10-05 2021-07-13 Micron Technology, Inc. DSP slice configured to forward operands to associated DSP slices

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675191B1 (en) * 1999-05-24 2004-01-06 Nec Corporation Method of starting execution of threads simultaneously at a plurality of processors and device therefor
US20070002163A1 (en) * 2005-06-29 2007-01-04 Dariusz Madej Imager settings
KR20070011854A (ko) * 2005-07-21 2007-01-25 손경식 생토를 이용한 온열 매트 및 그 제조방법
US20090094437A1 (en) * 2007-10-07 2009-04-09 Masahiro Fukuda Method And Device For Controlling Multicore Processor

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8200249B2 (en) 1999-08-27 2012-06-12 Lipovski Gerald John Jack System for enabling or restricting certain cellular telephone device capabilities in certain zones
US6823189B2 (en) 2001-01-24 2004-11-23 Lucent Technologies Inc. System and method for identifying mobile communication apparatuses proximal with an identification locus
US6799052B2 (en) 2001-02-08 2004-09-28 Michael K. Agness Hand-held cellular telephone system with location transmission inhibit
US7120784B2 (en) * 2003-04-28 2006-10-10 International Business Machines Corporation Thread-specific branch prediction by logically splitting branch history tables and predicted target address cache in a simultaneous multithreading processing environment
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7814487B2 (en) 2005-04-26 2010-10-12 Qualcomm Incorporated System and method of executing program threads in a multi-threaded processor
US20060252432A1 (en) 2005-05-09 2006-11-09 Sbc Knowledge Ventures, L.P. Method and system for enabling venues to selectively block incoming calls to cellular phones present in venue premises
US7734315B2 (en) 2005-06-17 2010-06-08 Rathus Spencer A Wireless communication device management
KR100731976B1 (ko) 2005-06-30 2007-06-25 전자부품연구원 재구성 가능 프로세서의 효율적인 재구성 방법
KR100893527B1 (ko) 2007-02-02 2009-04-17 삼성전자주식회사 재구성 가능 멀티 프로세서 시스템에서의 매핑 및 스케줄링방법
KR100888675B1 (ko) 2007-02-15 2009-03-13 고려대학교 산학협력단 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법
US7647483B2 (en) * 2007-02-20 2010-01-12 Sony Computer Entertainment Inc. Multi-threaded parallel processor methods and apparatus
KR101360191B1 (ko) 2007-08-24 2014-02-07 삼성전자주식회사 코어스 그레인 어레이를 공유하는 방법 및 그 방법을이용한 프로세서
JP2009098819A (ja) * 2007-10-15 2009-05-07 Elpida Memory Inc メモリシステム、メモリシステムの制御方法、及びコンピュータシステム
KR101390974B1 (ko) 2008-01-30 2014-05-02 삼성전자주식회사 다중 모드를 제공하는 재구성 가능한 장치 및 방법
JP5040773B2 (ja) * 2008-03-31 2012-10-03 富士通株式会社 メモリバッファ割当装置およびプログラム
TWI390403B (zh) * 2008-11-06 2013-03-21 Univ Nat Taiwan 串流處理架構中可重組式記憶體方法及裝置
KR101164194B1 (ko) * 2008-12-11 2012-07-10 한국전자통신연구원 멀티 쓰레드 기반의 정적 스택 할당 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675191B1 (en) * 1999-05-24 2004-01-06 Nec Corporation Method of starting execution of threads simultaneously at a plurality of processors and device therefor
US20070002163A1 (en) * 2005-06-29 2007-01-04 Dariusz Madej Imager settings
KR20070011854A (ko) * 2005-07-21 2007-01-25 손경식 생토를 이용한 온열 매트 및 그 제조방법
US20090094437A1 (en) * 2007-10-07 2009-04-09 Masahiro Fukuda Method And Device For Controlling Multicore Processor

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130066400A (ko) * 2011-12-12 2013-06-20 삼성전자주식회사 재구성가능 프로세서 및 재구성가능 프로세서의 미니 코어
KR20130105182A (ko) * 2012-03-16 2013-09-25 삼성전자주식회사 미니 코어 기반의 재구성가능 프로세서, 이를 위한 스케줄 장치 및 방법
KR20130126555A (ko) * 2012-05-11 2013-11-20 삼성전자주식회사 재구성가능 프로세서 및 재구성가능 프로세서의 코드 압축해제 방법
KR20140070308A (ko) * 2012-11-29 2014-06-10 삼성전자주식회사 병렬 처리를 위한 재구성형 프로세서 및 재구성형 프로세서의 동작 방법
KR20200139741A (ko) * 2018-03-31 2020-12-14 마이크론 테크놀로지, 인크. 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 다수의 유형의 스레드 식별자

Also Published As

Publication number Publication date
KR101636377B1 (ko) 2016-07-06
US9043805B2 (en) 2015-05-26
US20110099555A1 (en) 2011-04-28

Similar Documents

Publication Publication Date Title
KR101636377B1 (ko) 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법
JP5711853B2 (ja) 異種コアの自動カーネル移行
KR101839544B1 (ko) 이종 코어의 자동 부하 균형
US10430190B2 (en) Systems and methods for selectively controlling multithreaded execution of executable code segments
US9244883B2 (en) Reconfigurable processor and method of reconfiguring the same
US8615770B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
JP2011086298A (ja) プログラム・フロー制御
US20080126747A1 (en) Methods and apparatus to implement high-performance computing
US9268601B2 (en) API for launching work on a processor
US10146736B2 (en) Presenting pipelines of multicore processors as separate processor cores to a programming framework
US8959497B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
US20120221830A1 (en) Configurable vector length computer processor
KR100498486B1 (ko) 쓰레드 바이너리 컴파일러에 의하여 프로그램에서 여러개의 쓰레드를 다이내믹하게 추출하는 컴퓨터 시스템 및그 동시 다중 쓰레딩 방법
JP2022535736A (ja) Gpuでのソフトウェア制御の可変ウェーブフロントサイズの実行
Li et al. Operating system support for shared-isa asymmetric multi-core architectures
US20150363227A1 (en) Data processing unit and method for operating a data processing unit
JP2021515929A (ja) データ処理
GB2540944A (en) Vector operand bitsize control
KR102665338B1 (ko) 노후 평균화를 위한 부팅시 의사 랜덤 논리 대 물리 코어 할당
DB et al. HDL Programming and Sequential Circuitry for Multi-Core RISC-V Processor
Mytkowicz et al. Waiting for Godot? the right language abstractions for parallel programming should be here soon: the multicore transformation (Ubiquity symposium)
Manzano et al. Opell and pm: A case study on porting shared memory programming models to accelerators architectures
KR20200090912A (ko) 노후 평균화를 위한 부팅시 의사 랜덤 논리 대 물리 코어 할당
Manzano et al. Code Partition and Overlays: A reintroduction to High Performance Computing
Mytkowicz The Multicore Transformation

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190520

Year of fee payment: 4