KR20110112810A - 데이터 처리 방법 및 장치 - Google Patents
데이터 처리 방법 및 장치 Download PDFInfo
- Publication number
- KR20110112810A KR20110112810A KR1020117014902A KR20117014902A KR20110112810A KR 20110112810 A KR20110112810 A KR 20110112810A KR 1020117014902 A KR1020117014902 A KR 1020117014902A KR 20117014902 A KR20117014902 A KR 20117014902A KR 20110112810 A KR20110112810 A KR 20110112810A
- Authority
- KR
- South Korea
- Prior art keywords
- processor
- core
- data
- memory
- configurable
- Prior art date
Links
- 238000003672 processing method Methods 0.000 title claims description 13
- 230000015654 memory Effects 0.000 claims abstract description 424
- 238000000034 method Methods 0.000 claims description 64
- 230000006870 function Effects 0.000 claims description 40
- 238000012360 testing method Methods 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 16
- 230000005540 biological transmission Effects 0.000 claims description 11
- 238000011084 recovery Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 8
- 238000003860 storage Methods 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 3
- 230000001360 synchronised effect Effects 0.000 claims description 3
- 238000004519 manufacturing process Methods 0.000 claims description 2
- 238000012546 transfer Methods 0.000 description 23
- 239000011159 matrix material Substances 0.000 description 15
- 238000004590 computer program Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 6
- 230000002457 bidirectional effect Effects 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000012356 Product development Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
- G06F9/3828—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
-
- 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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Logic Circuits (AREA)
- Advance Control (AREA)
- Microcomputers (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
프로그램을 실행하기 위한 구성 가능한 멀티-코어 구조물이 개시된다. 구성 가능한 멀티-코어 구조물은 복수의 프로세서 코어들 및 이들과 연관된 구성 가능한 로컬 메모리들을 포함한다. 구성 가능한 멀티-코어 구조물은 복수의 프로세서 코어들을 직렬로 상호 연결하기 위한 복수의 구성 가능한 상호 연결 구조물들을 더 포함한다. 또한, 각 프로세서 코어는 프로그램의 세그먼트를 순차적으로 실행하도록 구성되고, 직렬로 상호 연결된 프로세서 코어들은 파이프라인 방식으로 전체 프로그램을 실행한다. 게다가, 하나의 프로세서 코어에 대한 프로그램의 세그먼트는, 이 프로세서 코어로부터의 또는 이 프로세서 코어로의 동작 데이터와 함께, 이 프로세서 코어와 연관된 구성 가능한 로컬 메모리에 저장된다.
Description
본 발명은 집적 회로(IC) 설계 분야와 관련된다.
무어의 법칙에 따라, 트랜지스터의 특징 사이즈는 65nm, 45nm, 32nm……의 방향으로 점차 축소되고 있으며, 단일 칩에 집적되는 트랜지스터들의 수는 이미 10억 개를 초과하였다. 그러나 후단(back-end) IC 설계의 생산성을 향상시킨 로직 합성, 배치 및 배선 도구(logic synthesize, place and route tool)가 지난 세기 80년대에 출시된 이래로 지난 20여 년간 EDA 도구에 대한 본질적인 돌파구(breakthrough)가 없었다. 이로 인하여, 전단 IC 설계, 특히 검증에서 칩 스케일의 증가에 대응하기 어렵게 되었다. 이에 따라, 설계 회사들은 칩 성능을 향상시키면서 용이한 칩 설계 및 검증을 위하여 멀티 코어 프로세서, 즉 상대적으로 단순한 코어들을 다수 포함하는 칩을 연구하고 있다.
종래의 멀티-코어 프로세서들은 칩 성능을 향상시키도록 다수의 프로세서 코어들을 집적함으로써 프로그램을 병렬로 실행한다. 이러한 종래의 멀티-코어 프로세서에서는, 처리 자원의 충분한 이용을 위하여 병렬 프로그래밍이 요구된다. 하지만 운영 시스템(Operating System; OS)은 자원 분배와 관리에 대한 본질적인 변화 없이, 일반적으로, 대칭 방식으로 균등하게 자원을 할당한다. 따라서, 다수의 프로세서 코어들이 병렬 컴퓨팅을 수행할 수 있다 하더라도, 종래의 멀티-코어 프로세서 구조에서 하나의 프로그램 스레드는 그 직렬 실행 특성에 의해 진정한 파이프라인 방식으로 실행될 수 없다. 또한, 현재의 소프트웨어는 여전히 직렬 실행이 필요한 다량의 프로시저를 포함한다. 그러므로, 프로세서 코어의 수가 일정 수준 이상인 경우, 프로세서 코어의 수를 증가시키는 것만으로는 칩 성능 향상을 기대할 수 없다. 게다가, 반도체 제조 공정의 지속적인 발전에 따라, 멀티-코어 프로세서 내부의 구동 주파수는 외부 메모리의 구동 주파수보다 크게 높아졌다. 다수의 프로세서 코어들에 의한 메모리 동시 접근은 병목 현상을 유발하여 칩 성능을 제한하고, 프로그램을 병렬로 실행하는 멀티-코어 구조물은 프로그램의 직렬 특성에 의해 칩 성능을 향상시키기 어렵다.
본 발명은, 기존 기술의 한계를 고려하여, 직렬로 실행되는 프로그램의 고속 실행이 가능하여 처리량(throughput)을 증가시킬 수 있는 데이터 처리 방법 및 장치를 제공한다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치는, 일 규칙에 따라 프로그램 코드를 세그먼트들로 분할한다. 상기 규칙은, 코어들 사이에서 작업량을 조절(load balancing)하도록, 직렬-연결된 멀티-코어 구조물에 포함된 각각의 프로세서 코어들의 코드 세그먼트들의 실행 시간들이 거의 동일하게 하는 것을 포함한다. 상기 직렬-연결된 멀티-코어 구조물은 복수의 프로세서 코어들을 포함한다. 여기서, 프로세서 코어는 명령(instruction) 실행을 통하여 연산 수행하고 데이터 판독/기입을 수행할 수 있는 임의의 적당한 처리 유닛일 수 있다. 상기 프로세서 코어는, 이에 한정되지 않으나, 중앙 처리 장치(CPU) 및 디지털 신호 처리기(DSP)를 포함할 수 있다.
본 발명의 실시예들에 따른 멀티-코어 구조물에서, 프로세서 코어들은 서로 직렬로 연결되어 직렬 멀티-이슈(in serial multi-issue)를 형성한다. 단위 시간 내에, 상기 직렬로 연결된 멀티-코어 구조물에 포함된 각 코어는 하나 또는 복수의 명령들을 이슈(issue)할 수 있고, 서로 직렬로 연결된 복수의 코어들은 단위 시간 내에 더욱 큰 규모의 명령들을 이슈할 수 있으며, 이는 직렬 멀티-이슈로 일컬어질 수 있다.
본 발명의 실시예들에서, 직렬-연결 멀티-코어 구조물을 통하여 파이프라인 계층(pipeline hierarchy)이 형성되고, 상기 계층 구조의 첫 번째 레벨은 상기 직렬-연결 멀티-코어 구조물의 각 코어의 내부 파이프라인이고, 상기 계층 구조의 두 번째 레벨은 상기 각 코어를 스테이지로 이용한 매크로 파이프라인이다. 이에 유추하여 더욱 높은 레벨의 계층이 형성될 수 있다. 예를 들어, 상기 직렬-연결 멀티-코어 구조물이 하나의 파이프라인 스테이지로 취급됨으로써 더욱 높은 레벨 파이프라인의 세 번째 레벨을 구성할 수 있다.
상기 직렬-연결 멀티-코어 구조물에 포함된 코어들에서 사용되는 하나 또는 복수의 코드 세그먼트들은 프리-컴파일(pre-compile), 컴파일 및 포스트-컴파일(post-compile)의 3개의 단계들을 부분적으로 또는 전체적으로 채용하여 생성될 수 있다. 여기서, 프로그램은, 이에 한정되지 않으나, 고급 언어 프로그램 및 어셈블리 언어 프로그램을 포함할 수 있다.
여기서, 컴파일은, 일반적으로, 컴퓨터 프로그램의 소스 코드(source code)를 목적 코드(object code)로 변환하는 것을 의미한다.
프리-컴파일 동안, 상기 컴퓨터 프로그램의 상기 소스 코드는 후속될 컴파일을 위하여 전-처리될 수 있다. 상기 프리-컴파일 동안, “호출(call)” 문장은, 상기 호출 문장 자체가 호출되는 코드 부분으로 대체되도록, 확장되어, 프리-컴파일 후 프로그램 코드는 상기 호출 문장을 포함하지 않을 수 있다. 여기서, 이러한 호출은, 이에 한정되지 않으나, 함수 호출을 포함할 수 있다.
포스트-컴파일 동안, 각 프로세서 코어의 종류 및 연산 작업량에 따라 상기 목적 코드가 복수의 코드 세그먼트들로 분할될 수 있다. 상기 코드 세그먼트들은 상응하는 프로세서 코어들에 할당될 수 있다. 이러한 방법은, 이에 한정되지 않으나, 다음과 같은 단계들을 포함할 수 있다.
(a) 전단 코드 스트림을 생성하도록 실행 가능한 프로그램 코드를 분석한다.
(b) 동작 모델에서 구동되는 상기 전단 코드 스트림이, 실행 사이클들, 점프/가지(branch) 여부, 점프/가지 어드레스 등 통계 정보를 획득하도록, 탐색될 수 있다. 이러한 통계 정보 및/또는 다른 정보를 분석하여 분할 정보가 결정될 수 있다. 또한, 이와 달리, 상기 분할 정보는, 상기 전단 코드 스트림의 탐색 없이, 미리 설정된 정보에 따라 결정될 수 있다. 여기서, 상기 동작 모델은, 이에 한정되지 않으나, 상호 연결된 프로세서 코어들 및/또는 멀티-코어 프로세서의 행위 모델을 포함할 수 있다.
(c) 상기 분할 정보에 기초하여, 상기 코드가, 상기 직렬-연결 멀티-코어 구조물의 각각의 코어들에 상응하는 코드 세그먼트들로 파싱(parsing)된다.
여기서, 상기 프리-컴파일은, 상기 소스 코드의 컴파일 전에 수행되거나, 상기 소스 코드의 컴파일의 일부로서 컴파일러에 의해 수행되거나, 또는 상기 직렬로 연결된 프로세서 코어들 또는 상기 멀티-코어 프로세서의 구동 중 상기 멀티-코어 프로세서의 OS, 드라이버, 또는 어플리케이션 프로그램에 의해 실시간으로 수행될 수 있는 것으로 이해될 것이다.
또한, 상기 포스트-컴파일은, 상기 소스 코드의 컴파일 후 수행되거나, 상기 소스 코드의 상기 컴파일의 일부로서 컴파일러에 의해 수행되거나, 또는 상기 직렬로 연결된 프로세서 코어들 또는 상기 멀티-코어 프로세서의 구동 중 상기 멀티-코어 프로세서의 OS, 드라이버, 또는 어플리케이션 프로그램에 의해 실시간으로 수행될 수 있다. 상기 포스트-컴파일이 실시간으로 수행되는 경우, 상기 멀티-코어 프로세서의 작업량 또는 고정된 구성 정보에 기초하여 상기 분할 정보가 프로그램에 의해 결정될 수 있다.
서로 다른 코드 세그먼트들은 서로 다른 프로세서 코어들에 할당될 수 있고, 동시에 실행될 수 있다. 따라서, 소프트웨어 호환성이 유지되면서, 상기 멀티-코어 프로세서의 성능이 향상될 수 있다. 또한, 이는 종래의 멀티-코어 프로세서들의 어플리케이션 프로그램 실행에 있어서 저 효율 문제를 효과적으로 해결할 수 있다.
상기 포스트-컴파일 동안, 상기 구성 정보는, 이에 한정되지 않으나, 명령 실행 사이클들 또는 시간, 및/또는 명령들의 수를 포함하는 정보에 기초하여 결정될 수 있다. 상기 명령 실행 사이클들 또는 시간에 기초하여, 상기 목적 코드가 동일 또는 유사한 실행 사이클들 또는 시간을 가지는 복수의 코드 세그먼트들로 분할될 수 있다. 또는, 상기 명령들의 수에 기초하여, 상기 목적 코드가 동일 또는 유사한 수의 명령들을 가지는 복수의 코드 세그먼트들로 분할 될 수 있다.
상기 포스트-컴파일 동안, 프로그램 루프들을 분할하는 것을 피하는 것, 즉 각 루프의 전체가 단일한 코드 세그먼트에 포함되는 것이 바람직하다. 다만, 어떤 상황에서는 상기 프로그램 루프의 분할이 불가피할 수 있다. 하나의 코드 세그먼트가 루프를 포함하고, 상기 루프의 명령 실행 사이클이 상기 코드 세그먼트의 가용 실행 사이클보다 큰 경우, 상기 루프는 복수의 작은 크기의 서브-루프들로 분할될 수 있다. 상기 서브-루프들은 같거나 다른 코드들을 포함할 수 있다. 여기서, 상기 서브-루프는, 이에 한정되지 않으나, 보다 적은 명령 수 및/또는 보다 적은 실행 사이클들을 포함하는 특징을 가질 수 있다.
특정한 프로세서 코어에 할당된 각 세그먼트는, 명령 수, 세그먼트 경계에 대한 특정 표시들, 코드 세그먼트의 시작 정보에 대한 리스트 테이블 등과 같은 세그먼트 정보에 의해 정의될 수 있다.
예를 들어, 상기 멀티-코어 프로세서가 1000개의 프로세서 코어들을 포함하는 경우, 상기 프로세서 코어들의 최대 수에 기초하여 1000개의 항목(entry)들을 가지는 테이블이 생성될 수 있다. 각 항목은 상응하는 코드 세그먼트의 위치 정보, 즉 원시 미분할 코드 스트림에서의 상기 코드 세그먼트의 위치를 포함할 수 있다. 상기 위치는 시작 위치 또는 종료 위치일 수 있고, 두 위치들 사이의 코드 세그먼트는 특정한 프로세서 코어에 대한 것일 수 있다. 상기 1000개의 프로세서 코어들이 모두 구동 중인 경우, 각 프로세서 코어는 상기 코드 스트림의 두 위치들 사이의 코드 세그먼트를 실행할 수 있다. N개의 프로세서 코어들(N<1000)이 구동 중인 경우, 상기 N개의 프로세서 코어들 각각은, 상기 테이블에서 상응하는 위치 정보에 의해 정의되어, 상응하는 1000/N 개의 구간 세그먼트를 실행할 수 있다.
각 코드 세그먼트는 추가적인 코드를 포함할 수 있다. 상기 추가적인 코드는, 서로 다른 프로세서 코어들에서 실행되는 명령들 사이의 순조로운 천이(transition)를 위하여, 상기 코드 세그먼트의 앞 또는 뒤에 확장된 것일 수 있다. 예를 들어, 상기 코드 세그먼트의 뒤에, 레지스터 파일의 모든 값들을 데이터 메모리의 특정 위치에 저장하기 위한 확장 코드가 추가될 수 있다. 또한, 상기 코드 세그먼트의 앞에, 상기 데이터 메모리의 상기 특정 위치로부터 레지스터 파일로 상기 저장된 값들을 독출하는 확장 코드가 추가될 수 있다. 이에 따라, 서로 다른 프로세서 코어들의 레지스터 파일들의 값들이 하나의 프로세서 코어에서 다른 프로세서 코어로 전송되어 정확한 코드 실행을 보장할 수 있다. 프로세서 코어가 상응하는 코드 세그먼트의 끝을 실행한 후, 동일한 코드 세그먼트의 처음부터 다시 실행될 수 있다.
본 발명의 실시예들에 따른 프로그램을 직렬 멀티-이슈 및 파이프라인 방식으로 실행하는 구성 가능한 멀티-코어 구조물이 개시된다. 상기 구성 가능한 멀티-코어 구조물은 복수의 프로세서 코어(Processor Core)들, 상기 복수의 프로세서 코어들과 각각 연관된 복수의 구성 가능한 로컬 메모리(configurable local memory)들, 및 상기 복수의 프로세서 코어들을 직렬로 상호 연결하기 위한 복수의 구성 가능한 상호 연결 구조물(configurable interconnect structure)들을 포함한다.
여기서, 상기 프로세서 코어는 명령 실행을 통하여 연산 및 데이터 판독/기입을 수행하도록 구성될 수 있다.
상기 구성 가능한 로컬 메모리는 명령 및 데이터를 저장하고, 프로세서 코어들 사이의 데이터 교환을 수행하도록 구성될 수 있다.
상기 구성 가능한 상호 연결 모듈들은 상기 복수의 프로세서 코어들을 서로 다른 구성들 또는 그룹들로 상호 연결하도록 구성될 수 있다.
게다가, 다른 구성요소들 또한 본 발명의 다양한 적용을 위하여 상기 구성 가능한 상호 연결 구조물들에 포함될 수 있다. 예를 들어, 상기 구성 가능한 상호 연결 구조물들의 일부 또는 전부는, 이에 한정되지 않으나, 다음과 같은 구성요소들:
상기 구성 가능한 로컬 메모리의 오버플로우가 발생한 경우 데이터를 저장하고, 상기 프로세서 코어들 사이의 공유된 데이터를 전송하기 위한 공유 메모리(shared memory);
상기 프로세서 코어들 외에 다른 모듈들에 의한 상기 구성 가능한 로컬메모리로의 접근을 위한 직접 메모리 접근(DMA) 컨트롤러; 및
프로세서 코어들 및 구성 가능한 로컬 메모리의 예외 처리를 위한 예외 처리(exception handling) 모듈들; 을 포함할 수 있다.
각 프로세서 코어는 하나 이상의 실행 유닛들, 프로그램 카운터, 및 레지스터 파일과 같은 다른 구성 요소들을 포함한다. 상기 프로세서 코어는, 산술 명령, 논리 명령, 조건 가지(branch) 및 점프 명령, 예외 수집(trap) 및 반환 명령 등과 같은 다양한 종류의 명령들을 실행할 수 있다. 상기 산술 명령 및 상기 로직 명령은 승산(multiplication), 가감(addition/subtraction), 승산-가감(multiplication- addition/subtraction), 누산(accumulating), 쉬프팅(shifting), 추출(extracting), 교환(exchanging) 등과 같은 임의의 산술적 및/또는 논리적 연산들에 대한 명령들, 및 고정 소수점 및 부동 소수점 연산들을 포함한다. 상기 직렬 또는 병렬로 상호 연결된 프로세서 코어들에 포함된 프로세서 코어들의 수는 실시예 또는 이들의 적용에 따라 다양할 수 있다.
각 프로세서 코어는, 데이터뿐만 아니라 특정한 프로세서 코어에 할당된 코드 세그먼트들을 저장하기 위한 명령 메모리 및 구성 가능한 데이터 메모리를 포함하는 구성 가능한 로컬 메모리와 연관된다.
동일한 구성 가능한 로컬 메모리에서, 명령 메모리와 구성 가능한 데이터 메모리 사이의 경계는 구성 정보에 기초하여 변경될 수 있다. 또한, 상기 구성 가능한 데이터 메모리는, 상기 구성 정보에 따라 사이즈 및 경계가 결정되어, 복수의 서브-모듈들로 분할될 수 있다.
동일한 구성 가능한 로컬 메모리에서, 상기 구성 정보에 기초하여, 상기 데이터 서브-모듈들의 경계가 변경될 수 있다. 상기 데이터 서브-모듈들은 상기 멀티-코어 프로세서의 전체 주소들에 매핑될 수 있다. 여기서, 매핑 방법은, 이에 한정되지 않으나, 룩업 데이터 변환 방식, 및/또는 내용 주소화 메모리(CAM) 변환 방식을 포함할 수 있다.
상기 데이터 서브-모듈에서, 모든 항목은 데이터 및 플래그 정보를 포함한다. 상기 플래그 정보는, 이에 한정되지 않으나, 유효 비트, 및 상기 멀티-코어 구조물의 전체 어드레스 공간에서의 위치를 나타내는 어드레스 정보를 포함한다.
직렬-이슈 및 파이프라인 계층 구조에 기초한 구성 가능한 멀티-코어 구조물에서, 상기 구성 가능한 상호 연결 모듈들은 구성에 따라 내부 모듈들 및 외부 모듈들을 연결하도록 사용된다. 상기 구성 가능한 상호 연결 모듈들은, 이에 한정되지 않으나, 프로세서 코어들과 그들에 인접한 구성 가능한 로컬 메모리들 사이의 연결, 프로세서 코어들과 공유 메모리 사이의 연결, 프로세서 코어들과 DMA 사이의 연결, 구성 가능한 로컬 메모리들과 공유 메모리 사이의 연결, 구성 가능한 로컬 메모리들과 DMA 사이의 연결, 구성 가능한 로컬 메모리들과 외부 모듈들 사이의 연결, 및 공유 메모리와 외부 모듈들 사이의 연결을 포함할 수 있다.
구성 정보에 기초하여, 2개의 프로세서 코어들은, 연관된 로컬 메모리들과 함께, 이전 스테이지 및 현재 스테이지를 구성할 수 있다. 예를 들어, 이에 한정되지 않으나, 상기 이전 스테이지의 프로세서 코어와 연관된 상기 구성 가능한 로컬 메모리로부터 상기 현재 스테이지의 프로세서 코어와 연관된 구성 가능한 로컬 메모리로 데이터가 전송될 수 있다.
어플리케이션 프로그램의 요구에 따라, 프로세서 코어들 및 연관된 로컬 메모리들의 일부 또는 전부는 구성 가능한 상호 연결 모듈들을 통하여 하나 또는 복수의 직렬 연결 구조물을 구성할 수 있다. 복수의 직렬 연결 구조물들은 서로 독립적이거나, 직렬, 병렬 또는 직병렬 혼합 방식으로 프로그램들을 실행하도록 서로 부분적 또는 전체적으로 연관될 수 있다. 어플리케이션 프로그램의 필요에 따라, 명령 실행은, 이에 한정되지 않으나, 동기(synchronous) 방식의 제어 하에서, 서로 다른 직렬-연결 구조물들이 멀티-스레드 방식으로 서로 다른 프로그램 세그먼트들을 실행하거나, 서로 다른 직렬-연결 구조물들이 많은 연산을 실행하기 위하여 단일 명령 다중 데이터 스트림(single instruction multiple data stream; SIMD) 방식으로 동일한 프로그램 세그먼트를 서로 다른 데이터 입력들로 실행할 수 있다.
본 발명의 실시예들에 따른 직렬-이슈 및 파이프라인 계층 구조의 구성 가능한 멀티-코어 구조물에서, 상기 직렬-연결 구조물의 프로세서 코어들은 특정한 판독 규칙(read policy) 및 기입 규칙(write policy)을 가질 수 있다.
상기 직렬-연결 구조물에 포함된 제1 프로세서 코어의 데이터 입력 소스, 즉 데이터 판독 정책은, 이에 한정되지 않으나, 연관된 구성 가능한 데이터 메모리, 공유 메모리 및 상기 멀티-코어 구조물의 외부 모듈들을 포함할 수 있다. 다른 프로세서 코어들의 데이터 입력 소스들은, 이에 한정되지 않으나, 상기 제1 구성 가능한 로컬 메모리 및 이전 스테이지 프로세서 코어의 구성 가능한 로컬 메모리 중 하나를 포함할 수 있다. 이와 유사하게, 상기 이전 스테이지 프로세서 코어로부터 출력되는 데이터의 제2 목적지는, 이에 한정되지 않으나, 다른 구성 가능한 로컬 메모리 및 상기 공유 메모리를 포함할 수 있다. 상기 구조물에 확장 메모리가 존재하는 경우, 상기 데이터의 목적지는 상기 확장 메모리를 포함할 수 있다.
상기 직렬-연결 구조물에 포함된 상기 제1 프로세서 코어와 연관된 상기 구성 가능한 데이터 메모리의 데이터 입력 소스인 데이터 기입 정책은, 이에 한정되지 않으나, 상기 연관된 구성 가능한 데이터 메모리, 상기 공유 메모리 및 상기 멀티-코어 구조물의 외부 모듈들을 포함할 수 있다. 다른 프로세서 코어들과 연관된 구성 가능한 데이터 메모리들의 데이터 입력 소스들은, 이에 한정되지 않으나, 구성 가능한 로컬 메모리들, 이전 스테이지 프로세서 코어의 구성 가능한 로컬 메모리, 및 상기 공유 메모리들 중 하나를 포함할 수 있다. 복수의 멀티플렉서들은 상기 프로세서 코어들 및 연관된 구성 가능한 메모리들로의 데이터 입력에 대한 상기 제1 및 제2 소스들을 선택할 수 있다.
구성 가능한 데이터 메모리는 매크로 파이프라인의 두 스테이지들인 프로세서 코어들에 의해 접근될 수 있고, 서로 다른 프로세서 코어들이 상기 구성 가능한 데이터 메모리의 서로 다른 서브-모듈들을 접근할 수 있다. 이러한 접근은 서로 다른 프로세서 코어들에 의한 서로 다른 접근을 정의하는 특정한 규칙에 의해 수행될 수 있다. 예를 들어, 상기 특정한 규칙은 상기 구성 가능한 데이터 메모리의 서브-모듈들을 핑-퐁 버퍼(ping-pong buffer)로서 정의하고, 상기 서브-모듈들이 2개의 서로 다른 프로세서 코어들에 의해 접근되며, 상기 프로세서 코어들이 접근을 완료한 후 핑-퐁 버퍼 교환이 수행될 수 있다. 상기 핑-퐁 버퍼 교환은, 이전 스테이지 프로세서 코어에 의해 접근된 서브 모듈이 현재 스테이지 프로세서 코어에 접근되도록 표시되고, 현재 스테이지 프로세서 코어에 의해 접근된 서브 모듈이 이전 스테이지 프로세서 코어에 의해 다시 접근될 수 있도록 무효로 표시됨으로써 수행될 수 있다.
프로세서 코어들 각각은 레지스터 파일을 포함하고, 이전 스테이지 프로세서 코어의 레지스터 파일에 포함된 레지스터들의 값들은, 구동 중, 현재 스테이지 프로세서 코어의 레지스터 파일에 포함된 상응하는 레지스터들에 전송될 수 있다. 상기 레지스터의 값들은, 이에 한정되지 않으나, 프로세서 코어들의 레지스터 파일의 레지스터 값들을 포함할 수 있다. 레지스터 데이터의 전송 경로는, 이에 한정되지 않으나, 구성 가능한 상호 연결 구조물들을 통한 전송, 공유 메모리를 통한 직접 전송, 프로세서 코어의 연관된 구성 가능한 데이터 메모리를 통한 직접 전송, 특정 명령에 기초한 공유 메모리를 통한 전송, 및 특정 명령에 기초한 프로세서 코어의 연관된 구성 가능한 데이터 메모리를 통한 전송을 포함할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물에서, 계층적 파이프라인의 제2 레벨은 매크로 파이프라인의 두 인접한 스테이지들 사이에서 전송되는 백-프레셔(back-pressure) 신호에 의해 제어되고, 상기 백-프레셔 신호는 이전 스테이지의 프로세서 코어에서, 이전 스테이지의 정지(stall) 여부를 결정하도록 전송되고, 구동 조건에 따라, 현재 스테이지 파이프라인의 정지 여부가 결정됨으로써, 매크로 파이프라인의 동작이 제어될 수 있다.
본 발명의 실시예들에 따른 멀티-코어 구조물에서, 상기 멀티-코어 구조물은 프로세서 코어들과 연관된 데이터 메모리에서 데이터 오버플로우가 발생한 경우 데이터를 저장하고, 복수의 프로세서 코어들 사이에서 공유된 데이터를 전송하기 위한 공유 메모리를 포함할 수 있다. 또한, 상기 멀티-코어 구조물은 프로세서 코어들 및 구성 가능한 로컬 메모리의 예외 처리를 위한 예외 처리 모듈들을 더 포함할 수 있다.
상기 멀티-코어 구조물이 공유 메모리를 가지고, 상기 구성 가능한 데이터 메모리에 데이터를 저장할 때 데이터 오버플로우가 발생한 경우, 예외가 생성되고 데이터는 공유 메모리에 저장될 수 있다. 서브-모듈의 모든 항목에 포함된 플래그 정보는, 이에 한정되지 않으나, 연관된 항목의 저장된 데이터의 유효 여부를 나타내는 유효 비트, 및 상기 멀티-코어 구조물의 전체 어드레스 공간에서의 위치를 나타내는 어드레스 정보 및 데이터 태그를 포함할 수 있다.
프로세서 코어들에 의해 생성되는 모든 예외 정보는 예외 처리 모듈에 전송되어 처리될 수 있다. 상기 예외 처리 모듈은 상기 멀티-코어 구조물에 포함된 프로세서 코어들 및 추가적인 모듈들로 구성될 수 있다. 상기 예외 정보는, 이에 한정되지 않으나, 예외 발생 프로세서 코어의 수 및 예외의 종류를 포함할 수 있다. 프로세서 코어들 및 로컬 메모리들의 예외 처리는, 이에 한정되지 않으나, 상기 직렬-연결 구조물의 프로세서 코어들로 백-프레셔 신호를 통한 파이프라인 정지 정보의 전송을 포함할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물에서, 프로세서 코어들, 구성 가능한 로컬 메모리들 및 구성 가능한 상호 연결 구조물은 어플리케이션 프로그램의 요구에 기초하여 구성될 수 있다. 구성 정보는, 이에 한정되지 않으나, 프로세서 코어들의 전원 인가 및 차단, 로컬 메모리의 명령 메모리 및 데이터 서브-메모리의 사이즈/경계 및 내용 구성, 및 상호 연결 구조물의 구성을 포함할 수 있다.
상기 구성 정보의 소스는 상기 구성 가능한 멀티-코어 구조물의 내부 및/또는 외부에 위치할 수 있다. 어플리케이션 프로그램의 요구에 따라, 상기 구성은 프로그램 실행 중 임의의 시점에서 조정될 수 있다. 구성 방법은, 이에 한정되지 않으나, 프로세서 코어들 및 CPU 코어들을 직접 구성하는 것, 프로세서 코어들 또는 CPU 코어들에 의해 DMA를 통하여 구성하는 것, 및 외부 요청에 의해 DMA를 통하여 구성하는 것을 포함할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물은 세 레벨의 저전력 소모 기술을 가진다. 상기 세 레벨의 저전력 소모 기술은 구성 레벨 전력 관리, 명령 레벨 전력 관리 및 어플리케이션 레벨 전력 관리를 포함할 수 있다.
상기 구성 레벨 전력 관리는, 프로세서 코어가 사용되지 않을 때 이를 저전력 상태에 놓는 것이다. 상기 저전력 상태는, 이에 한정되지 않으나, 프로세서 클록 주파수를 감소시키는 것 또는 상기 프로세서 코어로의 전원을 차단하는 것을 포함할 수 있다.
상기 명령 레벨 전력 관리는, 프로세서 코어가 데이터를 판독하는 명령을 실행할 때, 상기 데이터가 준비될 때까지 상기 프로세서 코어를 저전력 상태에 놓는 것이다. 데이터가 준비되지 않은 것은, 이에 한정되지 않으나, 이전 스테이지 프로세서 코어가 현재 스테이지 프로세서 코어에 의해 요구되는 데이터를 특정 데이터 메모리에 기입하지 않은 것을 포함할 수 있다. 이 때, 상기 현재 스테이지 프로세서 코어는 저전력 상태에 놓일 수 있고, 예를 들어, 프로세서 클록 주파수가 감소되거나, 프로세서 코어로의 전력이 차단될 수 있다.
어플리케이션 레벨 전력 관리는, 프로세서 코어의 현재 이용률을 결정하기 위한 아이들 태스크 특징 매칭(idle task feature matching)을 사용할 수 있다. 상기 이용률이 표준 이용률과 비교되어 저전력 상태로의 진입 또는 저전력 상태로부터의 복귀가 결정될 수 있다. 상기 표준 이용률은 고정되거나, 재구성되거나, 또는 구동 중 적응적으로 학습될 수 있다. 예를 들어, 상기 표준 이용률은 칩 내부에 고정되거나, 스타트-업 시 프로세서 코어에 기입되거나, 또는 소프트웨어 프로그램에 의해 기입될 수 있다. 상기 아이들 태스크의 내용은 칩 내부에 고정되거나, 스타트-업 시 기입되거나, 소프트웨어 프로그램에 의해 기입되거나, 구동 중 적응적으로 학습될 수 있다. 상기 기입 모드는 단일 기입 동작 또는 복수의 기입 동작들을 포함할 수 있다. 또한, 그 저장 매체는, 이에 한정되지 않으나, 휘발성 메모리 및 비휘발성 메모리를 포함할 수 있다. 저전력 상태는, 이에 한정되지 않으나, 프로세서 클록 주파수는 감소시키는 것 또는 프로세서 코어로의 전원을 차단하는 것을 포함한다.
본 발명의 실시예들에 따른 멀티-코어 구조물에서, 셀프-테스트 장치는 외부 설비에 의존하지 않고 전력 추가 공급 상황에 대한 셀프-테스트를 수행할 수 있다.
상기 구조물이 셀프-테스트 장비를 포함하는 경우, 하나 또는 복수의 특정 기초 구성요소들, 연산 유닛들 또는 프로세서 코어들이 비교기로 사용되며, 복수의 나머지 상응하는 기초 구성요소들, 연산 유닛들 또는 프로세서 코어들이 특정한 관계를 가지도록 하여, 상기 구조물의 상기 다른 구성요소들의 출력들이 상기 비교기에 의해 비교됨으로써 상기 특정한 관계에 상응하는지 여부가 판단될 수 있다. 상기 특정 관계는, 이에 한정되지 않으나, 동일 여부, 반대 여부, 상호 관계 또는 상보 관계를 포함할 수 있다. 비교기의 출력/결과들은 프로세서 코어들의 메모리에 저장되거나 프로세서 코어의 외부로 전송될 수 있다.
이러한 셀프-테스트는 웨이퍼 테스트 동안 수행되거나, 패키징 후 집적 회로 테스트 동안 수행되거나, 파워-온 시 멀티-코어 칩 테스트 동안 수행될 수 있다. 상기 셀프-테스트는 다양한 미리 구성된 테스트 조건들 하에서 소정의 주기로 실행될 수 있고, 구동 중 주기적인 셀프-테스트가 수행될 수 있다. 상기 셀프-테스트에 사용되는 메모리는, 이에 한정되지 않으나, 휘발성 메모리 및 비휘발성 메모리를 포함할 수 있다.
본 발명의 실시예들에 따른 멀티-코어 구조물은 셀프-테스트 장치에 기초하여 셀프-복구 기능을 가질 수 있다. 임의의 불량 프로세서 코어는, 테스트 결과가 메모리에 저장될 때, 무효로 표시될 수 있다. 상기 셀프-복구는 구성에서 상기 무효 프로세서 코어를 건너뜀으로써 수행될 수 있다. 이러한 셀프-복구는 웨이퍼 테스트 동안 수행되거나, 패키징 후 집적 회로 테스트 동안 수행되거나, 파워-온 시 멀티-코어 칩 테스트 동안 수행될 수 있다. 이에 따라, 유효한 프로세서 코어들에 의한 정상 동작이 보장될 수 있다. 또한, 셀프-복구는 미리 설정된 테스트 또는 셀프-복구 조건 하에서 소정의 주기로 구동 중 수행될 수 있다.
본 발명의 실시예들에 따른 복수의 프로세서 코어들은 동일한 프로세서 구조물에 포함되거나, 서로 다른 구조물들에 포함될 수 있다.
본 발명의 실시예들에 따른 명령어는 다양한 고정 길이 또는 가변적인 길이를 가질 수 있다.
본 발명의 실시예들에 따른 로컬 명령 메모리 및 데이터 메모리는 하나 또는 복수의 독출 포트들을 각각 포함할 수 있다.
본 발명의 실시예들에 따른 각 프로세서 코어는 복수의 로컬 명령 메모리들과 연관될 수 있다. 상기 복수의 로컬 명령 메모리들은 동일한 사이즈를 가지거나 서로 다른 사이즈들을 가질 수 있고, 동일한 구조물에 포함되거나 서로 다른 구조물들에 포함될 수 있다. 하나 또는 그 이상의 메모리가 명령 페치에 사용되는 경우, 다른 로컬 명령 메모리들은 명령 업데이트를 수행할 수 있다. 명령 업데이트 수단은, 이에 한정되지 않으나, DMA 컨트롤러를 통한 명령 업데이트를 포함할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물에서, 복수의 프로세서 코어들은 동일한 클록 주파수로 구동하거나, 서로 다른 클록 주파수로 구동할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물은 로드-유발-저장(LIS, load induced store) 특징을 구비할 수 있다. 제2 프로세서가 어드레스에 대하여 처음으로 판독할 때, 상기 제2 프로세서 코어는 상기 제1 구성 가능한 로컬 메모리로부터 판독하고, 독출된 데이터를 상기 제2 구성 가능한 로컬 메모리에 저장함으로써, 후속 접근이 상기 제2 구성 가능한 로컬 메모리로부터 수행될 수 있도록 하여 로드-유발-저장 동작을 수행할 수 있다. 이에 따라, 이웃하는 스테이지들의 로컬 데이터 메모리들 사이의 동일한 어드레스의 데이터 전송이 추가적인 비용 없이 수행될 수 있다.
본 발명의 실시예들에 따른 상기 구성 가능한 멀티-코어 구조물은 프리-전송 기능을 가지고, 상기 프로세서 코어는 이전 스테이지 프로세서 코어와 연관된 로컬 데이터 메모리로부터 데이터를 로드하고, 상기 데이터는 상기 현재 스테이지 프로세서 코어에서 판독 및 기입에 필요하지 않으나, 하부 스테이지 프로세서 코어에서 로드 및 저장에 필요하고, 상기 현재 스테이지 프로세서 코어와 연관된 로컬 데이터 메모리에 기입될 수 있다. 이에 따라, 이웃하는 스테이지들의 로컬 데이터 메모리 사이의 동일한 어드레스에 대한 데이터 전송이 중계 방식으로 수행될 수 있다.
로컬 데이터 메모리는 단수 또는 복수의 유효 플래그, 및 단수 또는 복수의 소유권 플래그를 포함한다. 상기 유효 플래그는 데이터의 유효 여부를 나타낸다. 상기 소유권 플래그는 상기 데이터가 상기 제1 및 제2 프로세서 코어들 중 어느 것에 의해 사용되는지를 나타낸다. 상기 유효 플래그 및 상기 소유권 플래그를 적용함으로써 핑-퐁 버퍼의 사용 없이 메모리 이용률을 향상시킬 수 있다. 게다가, 다수의 프로세서 코어들이 동일한 데이터 메모리를 동시에 접근할 수 있도록 함으로써 데이터 전송을 신속하게 수행할 수 있다.
본 발명의 실시예들에서, 구성 가능한 상호 연결 구조물을 통한 레지스터 값의 전송은, 이에 한정되지 않으나, 이전 스테이지 프로세서 코어로부터 현재 스테이지 프로세서 코어의 레지스터로의 레지스터 값 전송을 위한 다수의 하드와이어(hardwire)들, 및 이전 스테이지 프로세서 코어로부터 현재 스테이지 프로세서 코어의 레지스터로의 레지스터 값 순차 전송을 위한 쉬프트 레지스터를 포함할 수 있다.
특정 레지스터들의 값 전송의 필요 여부를 결정하도록 레지스터 판독/기입 기록이 사용될 수 있다. 상기 레지스터 판독/기입 기록은 로컬 데이터 메모리에 대한 레지스터의 판독/기입 상태를 기록하도록 사용될 수 있다. 상기 레지스터의 값들이 이미 상기 로컬 데이터 메모리에 기입되고, 마지막 기입 동작 후 상기 레지스터의 값들이 변경되지 않은 경우, 현재 스테이지 프로세서 코어는 상기 레지스터 값 전송을 완료하도록, 상기 현재 스테이지 프로세서 코어로 레지스터 값들을 각각 전송할 필요 없이, 상기 이전 스테이지의 데이터 메모리로부터 상응하는 데이터를 판독할 수 있다.
예를 들면, 레지스터 값이 상응하는 로컬 데이터 메모리에 기입될 때, 상기 레지스터 판독/기입 기록의 상응하는 항목은 “0”으로 설정되고, 상응하는 데이터(예를 들어, 로컬 데이터 메모리의 데이터 또는 실행 결과)가 레지스터에 기입될 때, 상기 레지스터 판독/기입 기록의 상응하는 항목은 “1”로 설정될 수 있다. 레지스터 값을 전송할 때, 상기 레지스터 판독/기입 기록이 “1”인 레지스터 값들만이 전송될 수 있다. 상기 레지스터로의 데이터 기입은, 이에 한정되지 않으나, 연관된 로컬 데이터 메모리로부터 레지스터로의 데이터 로드 및 명령 실행의 결과를 레지스터에 기입하는 것을 포함할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물에 포함된 프로세서 코어들의 수가 결정될 때, 세그먼트 코드에 기초하여 가이딩 코드의 헤드 및 엔드의 확장이 최적화됨으로써 전송이 필요한 레지스터들의 수가 감소될 수 있다.
예를 들어, 일반적으로, 헤드 가이딩 코드는, 메모리의 특정 어드레스로부터 레지스터들에 모든 레지스터들의 값들을 기입하도록 상기 코드 세그먼트의 앞에 추가되고, 엔드 가이딩 코드는 메모리의 특정 어드레스에 모든 레지스터들의 값을 저장하도록 상기 코드 세그먼트의 끝에 추가될 수 있다, 상기 모든 레지스터들의 값들은 끊김 없이 전송될 수 있다. 상기 코드 세그먼트가 결정될 때, 상기 코드 세그먼트가 분석되어 상기 레지스터들과 연관된 가이딩 코드들의 명령들이 최적화 또는 감소될 수 있다.
상기 코드 세그먼트 내에서, 특정한 레지스터에 새로운 값이 기입되기 전에 상기 특정한 레지스터의 값이 사용되지 않은 경우, 이전 스테이지 프로세서 코어에 대한 코드 세그먼트의 가이딩 코드의 상기 특정 레지스터에 값을 저장하는 명령 및 현재 스테이지 프로세서 코어에 대한 코드 세그먼트의 가이딩 코드의 상기 특정 레지스터를 로딩하는 명령은 생략될 수 있다.
이와 유사하게, 로컬 데이터 메모리에 저장된 특정 레지스터의 값이 이전 스테이지 프로세서 코어데 대한 전체 코드 세그먼트 동안 변경되지 않은 경우, 상기 이전 스테이지 프로세서 코어에 대한 코드 세그먼트의 가이딩 코드의 상기 특정 레지스터의 값을 저장하는 명령은 생략될 수 있고, 상기 현재 스테이지 프로세서 코어에 대한 코드 세그먼트의 가이딩 코드는 상기 로컬 데이터 메모리로부터 상기 특정 레지스터의 값을 로드하도록 수정될 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 코드 세그먼트를 실행함에 있어서, 모든 프로세서 코어들은 일 부분 코드를 실행하는 동일한 어드레스로 분기할 수 있고, 이러한 부분 코드의 실행을 완료한 후 각각의 코드 세그먼트 어드레스로 분기할 때, 복수의 프로세서 코어들과 연관된 로컬 명령 메모리들에 저장된 동일한 어드레스 코드가 반복될 수 있다. 상기 동일한 어드레스 코드는, 이에 한정되지 않으나, 함수 호출 및 루프를 포함할 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 프로세서 코어는 다른 프로세서 코어들의 로컬 명령 메모리를 접근할 수 있다. 프로세서 코어들인 동일한 코드를 실행하고, 상기 코드 길이가 하나의 프로세서 코어의 로컬 명령 메모리의 사이즈를 초과할 때, 상기 코드는 복수의 프로세서 코어들에 상응하는 복수의 로컬 명령 메모리들에 순차적으로 저장되고, 각 프로세서 코어는 상기 동일한 코드의 처음 부분이 저장된 로컬 명령 메모리로부터 명령을 로드하고 이 코드를 실행할 수 있다. 이 동작이 완료된 후 이 코드의 두 번째 부분이 저장된 로컬 명령 메모리로부터 명령을 로드하고 실행할 수 있다. 나머지도 이와 유사하게 수행될 수 있고, 상기 동일한 코드의 전부가 이러한 방식으로 실행될 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 동일한 코드의 코드 세그먼트들을 병렬로 각각 실행하고, 서로 다른 코드의 코드 세그먼트들을 병렬로 각각 실행하거나, 동일한 코드의 코드 세그먼트들을 직렬로 각각 실행하고, 서로 다른 코드의 코드 세그먼트들을 직렬로 각각 실행하거나, 동일한 코드의 코드 세그먼트들을 직병렬 조합된 방식으로 각각 실행하고, 서로 다른 코드의 코드 세그먼트들을 직병렬 조합된 방식으로 각각 실행할 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 각 프로세서 코어는 복수의 로컬 명령 메모리들과 연관될 수 있다. 하나 또는 그 이상의 메모리가 명령 페치에 사용되는 경우, 다른 로컬 명령 메모리들은 명령 업데이트를 수행할 수 있다. 명령 업데이트 수단은, 이에 한정되지 않으나, DMA 컨트롤러를 통한 명령 업데이트를 포함할 수 있다.
종래의 시스템-온-칩(System on Chip; SOC)에서는, 프로세서를 제외한 모든 기능 모듈들은 하드 와이어 연결에 의해 구현되는 ASIC 모듈이다. 이러한 기능 모듈들에 대한 성능 요구는 높고, 종래의 프로세서는 이를 만족시키지 못하였다. 따라서, 프로세서가 이러한 ASIC 모듈들을 대체하기 어려웠다.
본 발명의 실시예들에 따른 멀티-코어 구조물에서는, 하나 또는 복수의 프로세서 코어들 및 연관된 로컬 메모리들이 고성능 멀티-코어 상호 연결 구조물을 형성하고, 이 구조물을 구성하고 상응하는 코드 세그먼트를 로컬 명령 메모리들에 로딩함으로써, 상기 멀티-코어 연결 구조물에 의해 특정 기능이 구현되고, SOC 시스템에서 ASIC 모듈을 대체할 수 있다. 상기 멀티-코어 연결 구조물은 이미지 압축 해제 모듈, 암호화 및 복호화 모듈들과 같은 SOC 시스템의 기능 모듈에 상응할 수 있다. 이러한 기능 모듈들은 모두 시스템 버스에 연결되어 SOC 시스템을 구현할 수 있다.
본 발명의 실시예들에서, 로컬 상호 연결은 로컬 연결, 또는 두 개의 인접한 프로세서 코어들 및 연관된 로컬 메모리를 연결하는 데이터 경로로 불릴 수 있다. 하나의 프로세서 코어 및 연관된 로컬 메모리, 또는 로컬 상호 연결에 의해 연결된 복수의 프로세서 코어들 및 연관된 로컬 메모리들은 멀티-코어 연결 구조물을 구성할 수 있고, 이는 SOC의 기능 모듈로 일컬어질 수 있다.
SOC의 기능 모듈에 상응하는 멀티-코어 상호 연결 구조물에서 다른 멀티-코어 상호 연결 구조물로의 데이터 전송 경로는 SOC의 시스템 버스를 형성할 수 있다. SOC의 기능 모듈들에 상응하는 복수의 멀티-코어 연결 구조물들은 상기 시스템 버스에 의해 연결되어 일반적 의미의 SOC 시스템을 구현할 수 있다.
본 발명의 실시예들에 따른 SOC 시스템은, 종래의 SOC 시스템과 달리, 구성 가능하다. 데이터 처리 구조물의 서로 다른 구성을 통하여, 서로 다른 SOC들이 구현될 수 있다. 상기 구성은 정상 동작 동안 실시간으로 수행될 수 있고, 이에 따라, 시스템 기능이 동작 중 온-더-플라이(on-the-fly) 방식으로 수정될 수 있다. 프로세서 코어 및 연관된 로컬 메모리는 동작으로 재구성될 수 있고, 연관된 명령 메모리의 코드 세그먼트는 동적으로 변경될 수 있으며, 이에 따라 시스템 기능이 변경될 수 있다.
본 발명의 실시예들에서, 멀티-코어 연결 구조물의 내부 프로세서 코어 및 연관된 데이터 메모리와 다른 프로세서 코어들 및 연관된 로컬 메모리들 사이에서 데이터를 전송하는 데이터 경로는 기능 모듈의 로컬 상호 연결로 불릴 수 있다. 일반적으로, 상기 기능 모듈들의 로컬 상호 연결에 의해 전송되는 데이터는 상기 전송을 요구하는 프로세서 코어의 동작을 점유할 수 있다. 본 발명의 실시예들에 따른 시스템 버스는 로컬 상호 연결 및 서로 다른 프로세서 코어들 및 연관된 로컬 메모리들 사이에서 데이터를 전송하는 데이터 전송 경로를 포함하고, 프로세서 코어들의 동작을 점유할 필요가 없다. 상기 프로세서 코어들 및 연관된 로컬 메모리들은 이웃하거나 서로 이격될 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 상기 시스템 버스는 데이터 경로를 형성하기 위한 고정된 위치의 복수의 연결 모듈들을 이용하여 형성될 수 있다. 임의의 멀티-코어 기능 모듈은 하나 또는 복수의 하드와이어들을 통하여 가장 가까운 연결 모듈과 연결될 수 있다. 또한, 복수의 연결 모듈들은 하나 또는 복수의 하드와이어들과 연결될 수 있다. 상기 연결 모듈들, 상기 기능 모듈들과 연결 모듈들 사이의 하드와이어들, 및 연결 모듈들 사이의 하드와이어들은 SOC의 시스템 버스를 구성할 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 상기 시스템 버스는, 임의의 프로세서 코어 및 연관된 로컬 메모리가 임의의 다른 프로세서 코어들 및 연관된 로컬 데이터 메모리들과 데이터를 교환할 수 있도록 다양한 데이터 경로를 형성함으로써 형성될 수 있다. 데이터 교환을 위한 이러한 데이터 경로들은 공유 메모리를 통한 데이터 교환, DMA 컨트롤러를 통한 데이터 교환 및 전용 버스 또는 네트워크를 통한 데이터 교환을 포함할 수 있다.
예를 들어, 첫 번째 방법은, 하나 이상의 구성 가능한 하드와이어들이 특정한 수의 프로세서 코어들 및 상응하는 로컬 데이터 메모리들 사이에 미리 배치되는 것이다. 이러한 프로세서 코어들 두 개 및 상응하는 로컬 데이터 메모리가 두 개의 서로 다른 기능 모듈들에 속하는 것으로 구성될 때, 상기 두 개의 프로세서 코어들 및 상응하는 로컬 데이터 메모리들 사이의 하드와이어들이 상기 두 개의 기능 모듈들 사이의 시스템 버스로서 이용될 수 있다.
두 번째 방법은, 특정한 수의 프로세서 코어들 및 상응하는 로컬 데이터 메모리들이 DMA 컨트롤러를 통하여 서로 방문할 수 있도록 하는 것이다. 그래서, 이러한 프로세서 코어들 두 개 및 상응하는 로컬 데이터 메모리들이 두 개의 서로 다른 기능 모듈들에 속하는 것으로 구성된 경우, 상기 두 개의 프로세서 코어들 및 상응하는 로컬 데이터 메모리들 사이의 상기 DMA 경로가 실시간으로 상기 두 개의 상호 연결 멀티-코어 구조물들 사이의 시스템 버스로 이용될 수 있다.
세 번째 방법은, 특정한 수의 프로세서 코어들 및 상응하는 로컬 데이터 메모리가 네트워크-온-칩(network-on-chip) 기능을 이용하도록 구성되는 것이다. 즉, 프로세서 코어 및 상응하는 로컬 데이터 메모리가 다른 프로세서 코어들 및 상응하는 로컬 데이터 메모리들과 데이터를 교환할 필요가 있는 경우, 상기 데이터의 목적지는 상기 네트워크에 의해 결정되고, 이에 따라 데이터 교환을 위한 데이터 경로가 형성될 수 있다. 이러한 프로세서 코어들 두 개 및 상응하는 로컬 데이터 메모리가 두 개의 서로 다른 기능 모듈들에 속하는 것으로 수서오디는 경우, 상기 두 개의 프로세서 코어들 및 상응하는 로컬 데이터 메모리들 사이의 상기 네트워크 경로는 상기 두 개의 기능 모듈들 사이의 시스템 버스로서 이용될 수 있다.
상술한 3가지 방법에서, 첫 번째 방법은 하드 와이어 구조로 구현되어 정적인 시스템 버스를 채용하였고, 두 번째 방법은 직접 메모리 접근을 채용하였으며, 세 번째 방법은 동적인 네트워크 온 칩을 채용하였다. 마지막 두 개의 데이터 경로 구성 방법들은 동적일 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 상기 프로세서 코어는, 가지 점프가 실행되는지 여부를 판단하는 고속 조건 판단 장치를 가지고, 상기 고속 조건 판단 장치는, 루프 조건을 판단하는 카운터이거나, 가지 점프 및 루프 조건을 판단하는 유한 상태 머신(FSM)일 수 있다.
구성 레벨 전력 관리에서, 구성 정보에 기초하여 특정한 프로세서 코어들이 저전력 상태에 진입할 수 있다. 상기 특정한 프로세서 코어들은, 이에 한정되지 않으나, 미사용 프로세서 코어들 및 저 작업량을 가지는 프로세서 코어들을 포함할 수 있다. 상기 저전력 상태는, 이에 한정되지 않으나, 프로세서 클록 주파수를 감소시키는 것 또는 프로세서 코어로의 전원을 차단하는 것을 포함할 수 있다.
본 발명의 실시예들에 따른 데이터 처리 방법 및 장치에서, 상기 구조물은 하나 또는 복수의 전용 기능 모듈들을 포함할 수 있다. 상기 전용 기능 모듈은 상기 프로세서 코어에 의해 호출되는 매크로 모듈이거나, 상기 프로세서 코어의 출력을 수신하고 동일한 프로세서 코어에 처리 결과를 전송하는 독립된 처리 모듈이고, 데이터를 송수신하는 상기 프로세서 코어들은 동일한 프로세서 코어이거나 서로 다른 프로세서 코어들일 수 있다. 상기 전용 프로세서 모듈은 고속 퓨리에 변환(FFT) 모듈, 엔트로피 코딩 모듈, 엔트로피 디코딩 모듈, 매트릭스 곱셈 모듈, 콘볼루션 코딩 모듈, 비터비 코드 디코딩 모듈, 터보 코드 디코딩 모듈 등을 포함할 수 있다.
매트릭스 곱셈 모듈을 예로 들면, 단일 프로세서 코어가 큰 규모의 매트릭스 곱셈을 수행할 때, 이는 대수의 클록 사이클들을 필요로 하고, 데이터 처리량을 제한할 수 있다. 반면, 다수의 프로세서 코어들이 상기 큰 규모의 매트릭스 곱셈을 수행하는 경우, 클록 사이클들의 수가 감소된다 하더라도, 프로세서 코어들 사이의 데이터 교환량이 증가하고 다량의 자원들이 점유된다. 그러나, 전용 매트릭스 곱셈 모듈을 이용하는 경우, 상기 큰 규모의 매트릭스 곱셈은 추가적인 데이터 대역폭 없이 작은 수의 클록 사이클들 내에서 수행될 수 있다. 게다가, 큰 규모의 매트릭스 곱셈을 포함하는 프로그램을 분할할 때, 상기 매트릭스 곱셈 전의 프로그램이 제1 프로세서 코어 그룹으로 분할되고, 상기 매트릭스 곱셈 후의 프로그램이 제2 프로세서 코어 그룹으로 분할될 수 있다. 상기 큰 규모의 매트릭스 곱셈 프로그램은 상기 전용 매트릭스 곱셈 모듈로 분할될 수 있다. 이에 따라, 상기 제1 프로세서 코어 그룹은 상기 전용 매트릭스 곱셈 모듈에 데이터를 입력하고, 상기 전용 매트릭스 곱셈 모듈은 상기 큰 규모의 매트릭스 곱셈을 수행하여 상기 제2 프로세서 코어 그룹에 출력을 전송할 수 있다. 한편, 상기 제1 프로세서 코어 그룹은 매트릭스 곱셈이 필요하지 않은 데이터를 상기 제2 프로세서 코어 그룹에 직접 전송할 수 있다.
본 발명의 실시예들에 따른 시스템 및 방법은 직렬 프로그램들을 직렬로 연결된 멀티 코어 구조물의 각각의 프로세서 코어들에 의해 사용될 코드 세그먼트들로 분할할 수 있다. 서로 다른 수의 프로세서 코어들에 대하여, 서로 다른 세그먼트 규칙에 따라 상기 코드 세그먼트들이 서로 다른 사이즈 및 수로 생성되고, 따라서 확장 가능한(Scalable) 멀티-코어 시스템을 제공할 수 있다.
또한, 본 발명의 실시예들에 따른 시스템 및 방법은 코드 세그먼트들을 각각의 프로세서 코어들에 할당하고, 각 프로세서 코어는 특정한 코드 세그먼트를 실행할 수 있다. 직렬로 연결된 프로세서 코어들이 함께 전체 프로그램을 실행하고, 코드 세그먼트들 사이의 데이터는 전용 데이터 경로를 통하여 전송되어 데이터 일관성(coherence) 문제 없이, 진정한 멀티 이슈(issue)가 실현될 수 있다. 이러한 직렬로 접속된 멀티 코어 구조물에서, 멀티 이슈의 수는 프로세서 코어의 수와 같고, 일반적으로 연산 유닛의 이용률을 향상시키며, 시스템의 처리량(throughput)을 크게 향상시킬 수 있다.
또한, 본 발명의 실시예들에 따른 시스템 및 방법은 프로세서들에 의해 사용되는 공통 캐시를 로컬 메모리로 대체한다. 각 프로세서 코어는 연관된 로컬 메모리에 상기 프로세서 코어에서 사용하는 명령(instruction) 및 데이터를 저장함으로써, 100%의 히트율(hit rate)을 달성할 수 있고, 캐시 미스(cache miss)에 따른 병목 현상 및 외부 메모리로의 저속 접근을 해결할 수 있으며, 시스템의 전체 성능을 향상시킬 수 있다.
또한, 본 발명의 실시예들에 따른 시스템 및 방법은 서로 다른 레벨의 다양한 전력 관리 방식을 적용할 수 있다. 본 발명의 실시예들에 따른 멀티-코어 구조는, 조잡 입도(rude granularity) 전력 관리, 미세 입도(exiguous granularity) 전력 관리 및 실시간 하드웨어 전력 관리와 같은 3 레벨의 전력 관리를 수행할 수 있다. 여기서, 상기 조잡 입도 전력 관리는 미사용 코어들의 전원 공급을 차단함으로써 수행될 수 있고, 상기 미세 입도 전력 관리는 명령 레벨의 데이터 구동에 따라 수행될 수 있다. 여기서, 실시간 하드웨어 전력 관리는 실시간으로 프로세서 코어들의 클록 주파수를 조정함으로써 수행될 수 있고, 프로세서 코어가 정상 작동을 하는 상황에서, 프로세서 코어 구동 중 동적 전력 소모를 감소시킬 수 있다. 이에 따라, 프로세서 코어의 클록 주파수의 실시간 조정을 수행할 수 있다. 즉, 고속 및 효과적인 실시간 클록 주파수 조정을 실현할 수 있다.
또한, 본 발명의 실시예들에 따른 시스템 및 방법은 프로그래밍 및 구성을 통하여 시스템-온-칩(SOC)을 구현함으로써 제품 설계부터 마케팅까지의 제품 개발 주기를 크게 단축시킬 수 있다. 게다가, 재프로그래밍 및 재구성만으로 기존 제품으로부터 서로 다른 기능을 가진 하드웨어 제품을 생산할 수 있다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
도 1은 본 발명의 실시예들에 따른 프로그램 분할 및 프로세스 할당의 예를 나타낸다.
도 2는 본 발명의 실시예들에 따른 프로세스 분할의 예를 나타낸다.
도 3은 본 발명의 실시예들에 따른 직렬 이슈 및 파이프 라인 구조에 기초한 구성 가능한 멀티-코어 구조물의 예를 나타낸다.
도 4는 본 발명의 실시예들에 따른 코드 세그먼트 어드레스들을 결정하기 위한 어드레스 매핑의 예를 나타낸다.
도 5는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 데이터 교환의 예를 나타낸다.
도 6은 본 발명의 실시예들에 따른 멀티-코어 구조물의 구성의 예를 나타낸다.
도 7은 본 발명의 실시예들에 따른 멀티-코어 셀프-테스트 및 셀프-복구 시스템의 예를 나타낸다.
도 8a는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 레지스터 값 교환의 예를 나타낸다.
도 8b는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 레지스터 값 교환의 다른 예를 나타낸다.
도 9는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 레지스터 값 교환의 또 다른 예를 나타낸다.
도 10a는 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 예를 나타낸다.
도 10b는 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 다른 예를 나타낸다.
도 10c는 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 또 다른 예를 나타낸다.
도 11a는 종래 시스템-온-칩(SOC) 시스템의 전형적인 구조를 나타낸다.
도 11b는 본 발명의 실시예들에 따른 SOC 시스템의 예를 나타낸다.
도 11c는 본 발명의 실시예들에 따른 SOC 시스템의 다른 예를 나타낸다.
도 12a는 본 발명의 실시예들에 따른 프리-컴파일의 예를 나타낸다.
도 12b는 본 발명의 실시예들에 따른 프리-컴파일의 다른 예를 나타낸다.
도 13a는 본 발명의 실시예들에 따른 멀티-코어 구조물의 다른 예를 나타낸다.
도 13b는 본 발명의 실시예들에 따른 멀티-코어 구조물의 직렬 구성의 예를 나타낸다.
도 13c는 본 발명의 실시예들에 따른 멀티-코어 구조물의 직병렬 구성의 예를 나타낸다.
도 13d는 본 발명의 실시예들에 따른 멀티-코어의 또 다른 예를 나타낸다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
도 1은 본 발명의 실시예들에 따른 프로그램 분할 및 프로세스 할당의 예를 나타낸다.
도 2는 본 발명의 실시예들에 따른 프로세스 분할의 예를 나타낸다.
도 3은 본 발명의 실시예들에 따른 직렬 이슈 및 파이프 라인 구조에 기초한 구성 가능한 멀티-코어 구조물의 예를 나타낸다.
도 4는 본 발명의 실시예들에 따른 코드 세그먼트 어드레스들을 결정하기 위한 어드레스 매핑의 예를 나타낸다.
도 5는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 데이터 교환의 예를 나타낸다.
도 6은 본 발명의 실시예들에 따른 멀티-코어 구조물의 구성의 예를 나타낸다.
도 7은 본 발명의 실시예들에 따른 멀티-코어 셀프-테스트 및 셀프-복구 시스템의 예를 나타낸다.
도 8a는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 레지스터 값 교환의 예를 나타낸다.
도 8b는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 레지스터 값 교환의 다른 예를 나타낸다.
도 9는 본 발명의 실시예들에 따른 프로세서 코어들 사이의 레지스터 값 교환의 또 다른 예를 나타낸다.
도 10a는 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 예를 나타낸다.
도 10b는 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 다른 예를 나타낸다.
도 10c는 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 또 다른 예를 나타낸다.
도 11a는 종래 시스템-온-칩(SOC) 시스템의 전형적인 구조를 나타낸다.
도 11b는 본 발명의 실시예들에 따른 SOC 시스템의 예를 나타낸다.
도 11c는 본 발명의 실시예들에 따른 SOC 시스템의 다른 예를 나타낸다.
도 12a는 본 발명의 실시예들에 따른 프리-컴파일의 예를 나타낸다.
도 12b는 본 발명의 실시예들에 따른 프리-컴파일의 다른 예를 나타낸다.
도 13a는 본 발명의 실시예들에 따른 멀티-코어 구조물의 다른 예를 나타낸다.
도 13b는 본 발명의 실시예들에 따른 멀티-코어 구조물의 직렬 구성의 예를 나타낸다.
도 13c는 본 발명의 실시예들에 따른 멀티-코어 구조물의 직병렬 구성의 예를 나타낸다.
도 13d는 본 발명의 실시예들에 따른 멀티-코어의 또 다른 예를 나타낸다.
도 1은 본 발명의 실시예들에 따른 프로그램 분할 및 프로세스 할당의 예를 나타낸다. 프리-컴파일(103) 동안, “호출(call)”이 확장되어, 고급 언어 프로그램(101) 및/또는 어셈블리 언어 프로그램(102)을 포함하는 확장 호출 컴퓨터 프로그램을 생성할 수 있다. 프리-컴파일(103) 후, 상기 컴퓨터 프로그램의 임의의 확장된 고급 언어 및/또는 어셈블리 코드는 컴파일(104) 동안 실행 순서에 부합하는 어셈블리 코드를 생성하도록 컴파일될 수 있다. 상기 컴파일된 코드는 포스트-컴파일(107)을 통하여 더욱 처리될 수 있다. 프로그램이 어셈블리 코드만 포함하고, 상기 어셈블리 코드가 이미 실행 순서에 부합하는 경우, 컴파일(104)은 생략될 수 있고, 이러한 어셈블리 코드는 직접 포스트-컴파일(107) 처리될 수 있다. 일 실시예에서, 포스트-컴파일(107) 동안, 구조 정보(106)에 기초하여 상기 어셈블리 코드가 프로세서 코어의 동작 모델(108)에서 구동되고, 코드 세그먼트들로 분할될 수 있다. 이에 따라, 실행 가능한 코드 세그먼트들 및 구성 정보(110)가 생성되고, 상기 실행 가능한 코드 세그먼트들에 상응하는 가이딩 코드 세그먼트들(109)이 생성될 수 있다. 끝으로, 복수의 상응하는 프로세서 코어들(113)이 하나의 프로세서 코어(111)에 의해 또는 DMA 컨트롤러(112)를 통하여 구성될 수 있다.
도 2에 도시된 바와 같이, 명령 코드 분할기(instruction code divider)는 분할될 전단 코드 스트림(front-end code stream)을 판독(read in)하고(201), 상기 전단 코드 스트림에 대한 구성 정보를 판독한다(202). 게다가, 상기 명령 코드 분할기는 상기 코드 스트림을 한번에 소정의 길이만큼 판독할 수 있고, 상기 판독된 코드 내의 루프 존재 여부를 결정할 수 있다(203). 상기 명령 코드 분할기가 상기 코드 내에 루프가 존재하지 않는 것으로 결정한 경우(203: 아니오), 상기 명령 코드 분할기는 상기 판독된 코드에 일반적인 코드 분할을 수행할 수 있다(209). 반면, 상기 명령 코드 분할기가 상기 판독된 코드에 루프가 존재하는 것으로 결정한 경우(203: 예), 상기 명령 코드 분할기는 루프 횟수(M)를 더욱 판독할 수 있다(204). 또한, 상기 명령 코드 분할기는 특정 또는 현재 세그먼트에 대한 허용 가능한 루프 횟수(N)를 판독할 수 있다(205). 허용 가능한 루프 횟수(N)를 획득한 후, 상기 명령 코드 분할기는 루프 횟수(M)가 허용 가능한 루프 횟수(N)보다 큰지 여부를 판단할 수 있다(206). 상기 명령 코드 분할기가 루프 횟수(M)가 허용 가능한 루프 횟수(N)보다 크지 않은 것으로 판단한 경우(206: 아니오), 상기 명령 코드 분할기는 일반적인 코드 분할을 수행할 수 있다(209). 반면, 상기 명령 코드 분할기가 루프 횟수(M)가 허용 가능한 루프 횟수(N)보다 큰 것으로 판단한 경우(206: 예), 상기 명령 코드 분할기는 상기 루프를 두 개의 서브-루프들로 분리한다(207). 하나의 서브-루프는 N의 루프 횟수를 가질 수 있고, 다른 하나의 서브-루프는 M-N의 루프 횟수를 가질 수 있다. 또한, 루프 횟수(M)는 다음 코드 세그먼트에 대하여 “M-N”(즉, 상기 다른 하나의 서브-루프)으로 설정되고(208), “M-N”이 상기 다음 코드 세그먼트에 대하여 허용 가능한 루프 수(N) 이내인지 여부가 판단될 수 있다(206). 이러한 과정은, 모든 루프 횟수들이 상기 코드 세그먼트의 허용 가능한 루프 횟수(N)보다 작아질 때까지, 반복될 수 있다. 이에 따라, 루프 횟수가 프로그램 세그먼트의 허용 가능한 루프 횟수보다 큰 상황을 효율적으로 해결할 수 있다.
도 3은 직렬 이슈 및 파이프라인 구조에 기초한 구성 가능한 멀티-코어 구조물의 예를 나타낸다. 일 실시예에서, 이 구조물은 복수의 프로세서 코어들(301), 복수의 구성 가능한 로컬 메모리들(302) 및 복수의 구성 가능한 상호 연결 모듈들(Configurable Interconnecting Module; CIM, 303)을 포함할 수 있다. 일 실시예에서, 각 프로세서 코어(301)는, 파이프라인의 하나의 스테이지를 형성하도록, 상기 프로세서 코어의 하부의 구성 가능한 로컬 메모리(302)에 상응할 수 있다. 구성 가능한 상호 연결 모듈들(303)을 구성함으로써, 복수의 프로세서 코어들(301) 및 이들에 상응하는 구성 가능한 로컬 메모리들(302)이 직렬 멀티-코어 구성을 가지도록 직렬로 연결될 수 있다. 실시예에 따라, 다중 직렬-연결 구조물들로 구성될 수 있고, 상기 다중 직렬-연결 구조물들은 각각 독립되거나, 직렬, 병렬 또는 직병렬 혼합 방식으로 프로그램들을 실행하도록 서로 부분적 또는 전체적으로 연관될 수 있다.
도 4는 코드 세그먼트 어드레스를 결정하기 위한 어드레스 매핑의 예를 나타낸다. 도 4a에서, 어드레스 검색을 위하여 룩업 테이블(402)이 사용될 수 있다. 16 비트 어드레스 방식을 예로 들면, 64K의 어드레스 공간이 다수의 1K 어드레스 공간의 작은 메모리 블록들(403)로 분할되고, 메모리 블록들은 순차적으로 기입될 수 있다. 하나의 메모리 블록에 대한 기입 동작이 완료된 후, 상기 메모리 블록의 유효 비트가 ‘1’로 설정되고, 메모리(403)의 어드레스 포인터(404)는 자동으로 유효 비트가 ‘0’인 다음 가용 메모리 블록을 지정한다. 하나의 항목(entry)에 데이터를 기입할 때, 그 어드레스를 룩업 테이블(402)에 기입한다. 입력 어드레스로서 ‘BFC0’를 예로 들면, 어드레스 포인터(404)가 메모리(403)의 2번 메모리 블록을 지정하는 경우, 데이터가 상기 2번 메모리 블록에 기입되고, 또한 룩업 테이블(402)의 어드레스 ‘BFC0’에 상응하는 항목에 상기 2번 메모리 블록의 어드레스인 ‘2’가 기입될 수 있다. 이에 따라, 상기 2번 메모리 블록과 상기 룩업 테이블 항목 사이에 매핑 관계가 형성된다. 상기 데이터를 판독할 때, 상기 어드레스에 기초하여 룩업 테이블(402)에서 상기 항목이 검색될 수 있고, 그 후 상기 상응하는 메모리 블록에 저장된 상기 데이터가 독출될 수 있다. 도 4b에서, 어드레스 룩업을 수행하도록 내용 주소화 메모리(content addressable memory; CAM) 어레이가 사용될 수 있다. 16 비트 어드레스 방식을 예로 들면, 64K의 어드레스 공간은 다수의 1K 어드레스 공간의 작은 메모리 블록들(403)로 분할된다. 다수의 메모리 블록들(403)은 순차적으로 기입될 수 있다. 하나의 메모리 블록에 대한 기입이 완료된 후, 상기 메모리 블록의 유효 비트는 ‘1’로 설정되고, 메모리 블록들(403)의 포인터(403)는 자동으로 유효 비트가 ‘0’인 다음 가용 메모리 블록을 지정한다. 또한, 연관된 어드레스가 CAM 어레이(402)의 다음 항목에 기입된다. 입력 어드레스로서 ‘BFC0’를 예로 들면, 어드레스 포인터(406)가 메모리(403)의 2번 블록을 지시할 때, 데이터는 2번 블록에 기입되고, 또한 상기 어드레스 ‘BFC0’는 CAM 어레이(405)의 다음 항목에 기입되어 매핑 관계가 형성된다. 데이터를 판독할 때, CAM 어레이(405)가 명령 어드레스와 비교됨으로써 상응하는 항목이 검색되고, 상응하는 메모리 블록에 저장된 데이터가 독출될 수 있다.
도 5는 프로세서들 사이에서의 데이터 교환의 예를 나타낸다. 모든 데이터 메모리들은 프로세서들 사이에 위치하고, 각 메모리는 논리적으로 상부(upper part) 및 하부(lower part)로 구분된다. 여기서, 하나의 메모리의 상부는 상기 메모리 위(above)의 프로세서 코어에 의해 사용된다. 상기 메모리 위의 프로세서 코어는 상기 메모리의 상부로부터 데이터를 판독하거나, 상기 메모리의 상부에 데이터를 기입할 수 있다. 반면, 상기 메모리의 하부는 상기 메모리 아래(below)의 프로세서 코어에 의해 사용된다. 상기 메모리 아래의 프로세서 코어는 상기 메모리의 하부로부터 데이터를 판독만할 수 있다. 프로세서 코어가 프로그램을 실행하는 동시에, 데이터 메모리로부터의 데이터는 하나의 데이터 메모리로부터 다른 데이터 메모리로 중계(relay)된다. 3-대-1 셀렉터들(502, 509)은 외부 또는 원격 데이터(506)를 선택하여 데이터 메모리(503, 504)에 출력할 수 있다. 프로세서 코어(510, 511)가 ‘저장(store)’ 명령을 실행하지 않을 때, 데이터 메모리(501, 503)의 하부들은 각각 3-대-1 셀렉터들(502, 509)을 통하여 다음 데이터 메모리(503, 504)의 상부들에 데이터를 기입한다. 동시에, 데이터 메모리(503, 504)의 기입된 로우의 유효 비트(V)는 ‘1’로 설정된다. 프로세서 코어가 ‘저장‘ 명령을 실행할 때, 상응하는 레지스터 파일은 오직 상기 프로세서 코어의 아래의 데이터 메모리에 데이터를 기입한다. 프로세서 코어가 ‘로드(Load)’ 명령을 실행할 때, 2-대-1 셀렉터(505, 507)는 각각 데이터 메모리(503, 504)의 유효 비트(V)에 의해 제어되어 위의 데이터 메모리(501, 503)로부터의 데이터 또는 아래의 데이터 메모리(503, 504)로부터의 데이터를 선택할 수 있다. 데이터 메모리(503, 504)의 유효 비트(V)가 ‘1’이고(즉, 데이터가 위의 데이터 메모리(501, 503)로부터 업데이트된 경우), 외부 데이터(506)가 선택되지 않은 경우, 3-대-1 셀렉터(502, 509)는 각각 프로세서 코어(510, 511)의 레지스터 파일의 출력을 입력으로 선택함으로써, 저장된 데이터가 프로세서 코어(510, 511)에 의해 처리되는 최신 데이터인 것을 보장할 수 있다. 데이터 메모리(503)의 상부에 데이터가 기입될 때, 데이터 메모리(503)의 하부에 저장된 데이터는 데이터 메모리(504)의 상부로 전송될 수 있다. 데이터 전송 시, 포인터가 데이터가 전송될 항목 또는 로우를 지시할 수 있다. 상기 포인터가 마지막 항목을 가리키는 경우, 전송이 거의 완료된 것을 나타낸다. 프로그램의 일부분의 실행이 완료되면, 하나의 데이터 메모리로부터 다음 데이터 메모리로의 데이터 전송도 완료되어야만 한다. 그 후, 상기 프로그램의 다음 부분이 실행되는 동안, 데이터가 데이터 메모리(501)의 상부로부터 데이터 메모리(503)의 하부로, 데이터 메모리(503)의 상부로부터 데이터 메모리(504)의 하부로 전송된다. 데이터 메모리(504)의 상부에 저장된 데이터 또한, 핑-퐁 전송 방식으로, 하부로 전송될 수 있다. 또한, 데이터 메모리는 명령들을 저장하는 데에 사용되는 부분을 가지도록 구분될 수 있다. 즉, 데이터 메모리 및 명령 메모리는 물리적으로 불가분적일 수 있다.
도 6은 백-프레셔(back-pressure), 예외 처리, 데이터 메모리 및 공유 메모리 사이의 연결의 예를 나타내는 블록도이다. 일 실시예에서, DMA 컨트롤러(616)는 명령 메모리들(601, 609, 610, 611)에 연결되고, 프로세서 코어들(602, 604, 606, 608)에 의해 각각 실행될 명령 메모리들(601, 609, 610, 611)에 상응한 코드 세그먼트들(615)이 기입될 수 있다. 또한, 프로세서 코어들(602, 604, 606, 608)은 판독 및 기입 동작을 위하여 데이터 메모리들(603, 605, 607, 612)에 연결될 수 있다. 프로세서 코어(604), 데이터 메모리(605) 및 다음 스테이지의 프로세서 코어(606)를 예로 들면, 프로세서 코어(604)는 매크로 파이프라인의 이전 스테이지로 불릴 수 있고, 프로세서 코어(606)는 상기 매크로 파이프라인의 현재 스테이지로 불릴 수 있다. 프로세서 코어(604) 및 프로세서 코어(606)는 모두 데이터 메모리(605)에 연결되어 판독 및 기입을 수행할 수 있다. 프로세서 코어(604)가 데이터 메모리(605)에 기입을 완료하고, 프로세서 코어(606)가 데이터 메모리(605)로부터 판독을 완료한 후, 데이터 메모리(605)의 상부 및 하부는 핑-퐁 데이터 교환(즉, 상호 교환)을 수행할 수 있다. 프로세서 코어(606)는 백-프레셔 신호(614)를 사용하여 상기 이전 스테이지의 데이터 메모리(605)에 프로세서 코어(606)가 판독 동작을 완료하였는지의 여부를 알릴 수 있다. 또한, 데이터 메모리(605)는 백-프레셔 신호(613)를 사용하여 상기 이전 스테이지의 프로세서 코어(604)에 오버플로우(overflow)의 존재 여부를 알릴 수 있고, 상기 현재 스테이지의 프로세서 코어(606)로부터의 백-프레셔 신호(614)를 전달할 수 있다. 상기 이전 스테이지의 프로세서 코어(예를 들어, 프로세서 코어(604))는, 자신의 구동 조건 및 상응하는 데이터 메모리(605)로부터의 백-프레셔 신호(613)에 따라, 상기 매크로 파이프라인의 차단(block) 또는 정지(stall) 여부 및 상기 상응하는 데이터 메모리(605)에 대한 핑-퐁 데이터 교환의 수행 여부를 결정할 수 있고, 게다가 백-프레셔 신호를 생성하여 자신의 이전 스테이지에 전달할 수 있다. 따라서, 역방향으로 상기 백-프레셔 신호들(614, 614)을 하나의 프로세서 코어에서 상기 데이터 메모리로 전송하고, 다시 다른 프로세서 코어로 전송함으로써, 매크로 파이프라인의 동작이 제어될 수 있다. 전체 데이터 메모리들(603, 605, 607, 612)은 모두 연결 구조물(619)을 통하여 공유 메모리(618)에 연결된다. 어느 데이터 메모리를 접근하기 위한 판독 어드레스 또는 기입 어드레스가 상기 데이터 메모리의 어드레스 범위를 벗어날 때, 어드레스 예외가 발생하고, 상기 어드레스 및 이에 상응하는 메모리를 탐색하도록 공유 메모리(618)가 접근되며, 그 후, 검색된 어드레스에 데이터가 독출 또는 기입될 수 있다. 프로세서 코어(608)가 데이터 메모리(605)로의 접근이 필요할 때, 예외가 발생하고, 데이터 메모리(605)는 공유 메모리(618)를 통하여 프로세서 코어(608)에 데이터를 전송할 수 있다. 데이터 메모리 및 프로세서 코어로부터의 예외 정보는 모두 전용 채널(620)을 통하여 예외 처리 모듈(617)에 전송된다. 일 실시예에서, 프로세서 코어의 연산 결과에 의해 오버플로우가 발생한 경우를 예로 들면, 예외 처리 모듈(617)은 상기 프로세서 코어가 상기 오버플로우된 연산 결과에 대하여 포화(saturation) 동작을 수행하도록 제어할 수 있다. 데이터 메모리에서 오버플로우가 발생한 경우, 예외 처리 모듈(617)은 상기 데이터 메모리가 공유 메모리(618)에 접근하여 공유 메모리(618)에 오버플로우된 데이터를 저장하도록 제어할 수 있다. 이러한 예외 처리 도중, 예외 처리 모듈(617)은 연관된 프로세서 코어 또는 데이터 메모리에 동작을 차단하라는 신호를 송신하고, 예외 처리가 완료된 후 상기 동작을 복구하라는 신호를 송신할 수 있다. 다른 프로세서 코어들 및 데이터 메모리들은 수신된 백-프레셔 신호에 기초하여 동작 차단 여부를 결정할 수 있다.
도 7은 멀티-코어 셀프-테스트 및 셀프-복구 시스템의 예를 나타낸다. 상기 멀티-코어 셀프-테스트 및 셀프-복구 시스템(701)에서, 벡터 생성기(702)는 복수의 유닛들(즉, 프로세서 코어들)을 위한 테스트 벡터들을 생성하고, 각각의 프로세서 코어들에 상기 테스트 벡터들을 동시에 또는 동기시켜(in synchronization) 전송할 수 있다. 테스트 벡터 분배 컨트롤러(703)는 상기 프로세서 코어들과 벡터 생성기(702)의 연결을 제어하고, 연산 결과 분배 컨트롤러(709)는 상기 프로세서 코어들과 비교 로직의 연결을 제어할 수 있다. 프로세서 코어는 상기 비교 로직을 통하여 자신의 결과와 다른 프로세서 코어들의 결과를 비교할 수 있다. 일 실시예에서, 각 프로세서 코어는 인접한 프로세서 코어들과 결과를 비교할 수 있다. 예를 들어, 프로세서 코어(704)는 비교 로직(708)를 통하여 프로세서 코어들(705, 706, 707)과 결과를 비교할 수 있다. 실시예에 따라, 비교 로직은 하나 또는 여러 개의 비교기들을 포함할 수 있다. 상기 비교 로직이 하나의 비교기를 포함하는 경우, 각 프로세서 코어는 인접한 프로세서 코어들과 결과를 순서대로 비교할 수 있다. 상기 비교 로직이 다수의 비교기들을 포함하는 경우, 프로세서 코어는 인접한 프로세서 코어들과 결과를 동시에 비교할 수 있다. 상기 테스트 결과는, 상기 비교 로직에 의해 테스트 결과 테이블(710)에 직접 기입될 수 있다.
도 8은 인접한 프로세서 코어들 사이에 전송되는 레지스터 데이터의 3 가지 예들을 나타낸다.
도 8a에 도시된 바와 같이, 각 프로세서 코어는 31개의 32비트 범용 레지스터들을 가지는 레지스터 파일(801)을 포함하고, 이전 스테이지의 프로세서 코어(802)의 레지스터 파일의 값들은 현재 스테이지의 프로세서 코어(803)에 하드와이어(hardwire)를 통하여 전송될 수 있고, 상기 하드와이어는 992개의 라인들을 포함하고, 각 라인은 상기 레지스터 파일의 레지스터들의 하나의 비트 전송에 사용될 수 있다. 특히, 이전 스테이지의 프로세서 코어(802)의 레지스터들의 각 비트는 멀티플렉서(808)를 통하여 현재 스테이지의 프로세서 코어(803)의 레지스터들의 상응하는 비트에 연결될 수 있다. 레지스터 값들을 전송할 때, 전체 31개의 32비트 범용 레지스터들의 값은 상기 이전 스테이지의 프로세서 코어(802)에서 상기 현재 스테이지의 프로세서 코어(803)로 한 사이클 동안에 전송될 수 있다. 도 8a는 범용 레지스터의 한 비트(804)의 하드와이어 연결을 나타내고, 나머지 비트들(예를 들어, 나머지 991 비트들) 또한 이와 유사하게 연결될 수 있다. 현재 스테이지의 프로세서 코어(803)의 레지스터의 하나의 비트(804)는 멀티플렉서(808)를 통하여 이전 스테이지의 레벨 프로세서 코어(802)의 레지스터의 상응하는 비트(805)에 하드와이어를 통하여 연결된다. 현재 스테이지의 프로세서 코어(803)가 산술, 논리, 및 다른 연산들을 수행할 때, 멀티플렉서(808)는 현재 스테이지의 프로세서 코어(803)로부터의 데이터(809)를 선택할 수 있다. 현재 스테이지의 프로세서 코어(803)가 로드 동작을 수행할 때, 현재 스테이지의 프로세서 코어(803)에 상응하는 로컬 메모리에 데이터가 존재하는 경우, 멀티플렉서(808)는 현재 스테이지의 프로세서 코어(803)로부터의 데이터(809)를 선택하고, 그렇지 않은 경우, 멀티플렉서(808)는 이전 스테이지의 프로세서 코어(809)로부터의 데이터(810)를 선택한다. 또한, 레지스터 값들이 전송될 때, 멀티플렉서(808)는 이전 스테이지의 프로세서 코어(809)로부터의 데이터(810)를 선택한다. 이때, 레지스터 파일의 모든 비트들(예를 들어, 992 비트들)이 한 사이클 동안에 전송될 수 있다.
도 8b에 도시된 실시예에서, 인접한 프로세서 코어들(820, 822)은 매크로 파이프라인의 두 개의 스테이지들로서 서로 연결된다. 각 프로세서 코어(820, 822)는 31개의 32비트 범용 레지스터들을 가지는 레지스터 파일(821, 823)을 포함한다. 이전 스테이지의 프로세서 코어(820)에서 현재 스테이지의 프로세서 코어(822)로 레지스터 값들이 전송될 때, 레지스터 파일(821)의 값들을 레지스터 파일(823)에 전송하도록 하드와이어(826)가 사용될 수 있다. 하드와이어(826)는 레지스터 파일(821)의 출력(829)을 멀티플렉서(827)를 통하여 레지스터 파일(823)의 입력(830)에 연결하기 위하여 32 개의 라인들만을 포함할 수 있다. 멀티플렉서(827)는 입력으로서 현재 스테이지의 프로세서 코어(822)로부터의 데이터(824) 및 이전 스테이지의 프로세서 코어(820)로부터의 데이터(825)를 수신할 수 있다. 현재 스테이지의 프로세서 코어(822)가 산술, 논리, 및 다른 연산들을 실행할 때, 멀티플렉서(827)는 현재 스테이지의 프로세서 코어(822)의 데이터(824)를 선택한다. 현재 스테이지의 프로세서 코어(822)가 로드 동작을 수행할 때, 현재 스테이지의 프로세서 코어(822)에 연관된 로컬 메모리에 데이터가 존재하는 경우, 멀티플렉서(827)는 현재 스테이지의 프로세서 코어(822)로부터의 데이터(824)를 선택하고, 그렇지 않은 경우, 이전 스테이지의 프로세서 코어(820)로부터의 데이터(825)를 선택한다. 또한, 레지스터 값들을 전송할 때, 멀티플렉서(827)는 이전 스테이지의 프로세서 코어(820)로부터의 데이터(825)를 선택한다. 레지스터 파일들(821, 823)에 상응하는 레지스터 어드레스 생성 모듈들(828, 832)은 레지스터 값 전송을 위한 레지스터 어드레스를 생성하여 레지스터 파일들(821, 823)의 어드레스 입력단(831, 833)에 제공한다. 하나의 레지스터의 32비트 값들은, 레지스터 파일(821)로부터 하드와이어(826) 및 멀티플렉서(827)를 통하여 레지스터 파일(823)로 여러 단계들을 통하여 전송될 수 있다. 그러므로, 레지스터 파일의 모든 레지스터들의 값들은 다수의 사이클들 동안 하드와이어에 포함된 실질적으로 적은 수의 라인들을 이용하여 전송될 수 있다.
도 9에 도시된 실시예에서, 인접한 프로세서 코어들(940, 942)은 매크로 파이프라인의 두 개의 스테이지들로서 서로 연결된다. 각 프로세서 코어(940, 942)는 복수의 32비트 범용 레지스터들을 가지는 레지스터 파일(941, 943)을 포함한다. 이전 스테이지의 프로세서 코어(940)에서 현재 스테이지의 프로세서 코어(942)로 레지스터 값들을 전송할 때, 이전 스테이지의 프로세서 코어(940)는 ‘저장(store)’ 명령을 이용하여 레지스터 파일(941)의 레지스터 값을 상응하는 로컬 데이터 메모리(954)에 기입할 수 있다. 이 후, 현재 스테이지의 프로세서 코어(942)는 ‘로드(load)’ 명령을 이용하여 로컬 데이터 메모리(954)로부터 상기 레지스터 값을 판독하고, 상기 레지스터 값을 레지스터 파일(943)의 상응하는 레지스터에 기입할 수 있다. 일 실시예에서, 이전 스테이지의 프로세서 코어(940)의 레지스터 파일(941)의 데이터 출력단(949)은 32비트 연결(946)을 통하여 로컬 데이터 메모리(954)의 데이터 입력단(948)에 연결되고, 현재 스테이지의 프로세서 코어(942)의 레지스터 파일(943)의 데이터 입력단(950)은 32비트 연결(953) 및 멀티플렉서(947)를 통하여 로컬 데이터 메모리(954)의 데이터 출력단(952)에 연결된다. 멀티플렉서(947)는 입력으로서 현재 스테이지의 프로세서 코어(942)로부터의 데이터(944) 및 이전 스테이지의 프로세서 코어(940)로부터 32비트 하드와이어를 통하여 전송되는 데이터(945)를 수신할 수 있다. 현재 스테이지의 프로세서 코어(942)가 산술, 논리, 및 다른 연산들을 수행할 때, 멀티플렉서(947)는 현재 스테이지의 프로세서 코어(942)로부터의 데이터(944)를 선택한다. 현재 스테이지의 프로세서 코어(942)가 로드 동작을 수행할 때, 현재 스테이지의 프로세서 코어(942)에 연관된 로컬 메모리에 데이터가 존재하는 경우, 멀티플렉서(947)는 현재 스테이지의 프로세서 코어(942)로부터의 데이터(944)를 선택하고, 그렇지 않은 경우, 멀티플렉서(947)는 이전 스테이지의 프로세서 코어(940)로부터의 데이터(945)를 선택한다. 또한, 레지스터 값들을 전송할 때, 멀티플렉서(947)는 이전 스테이지의 프로세서 코어(940)로부터의 데이터(945)를 선택한다. 도 9에 도시된 실시예에서, 이전 스테이지의 프로세서 코어(940)는 로컬 데이터 메모리(954)에 레지스터 파일(941)의 모든 레지스터들의 값들을 기입하고, 이어서, 현재 스테이지의 프로세서 코어(942)는 상기 값들을 판독하여 레지스터 파일(943)의 레지스터들에 기입할 수 있다. 이와 달리, 일 실시예에서, 이전 스테이지의 프로세서 코어(940)는 로컬 데이터 메모리(954)에 레지스터 파일(941)의 전체가 아닌 일부 레지스터들의 값들을 기입하고, 이어서, 현재 스테이지의 프로세서 코어(942)는 상기 값들을 판독하여 레지스터 파일(943)의 상응하는 레지스터들에 기입할 수 있다. 이와 달리, 일 실시예에서, 이전 스테이지의 프로세서 코어(940)는 로컬 데이터 메모리(954)에 레지스터 파일(941)의 단일한 레지스터의 값을 기입하고, 이어서, 현재 스테이지의 프로세서 코어(942)는 상기 값을 판독하여 레지스터 파일(943)의 상응하는 레지스터에 기입할 수 있으며, 이러한 과정은 레지스터 파일(941)의 모든 레지스터들의 값들이 전송될 때까지 반복될 수 있다.
도 10은 본 발명의 실시예들에 따른 프로세서 코어 및 로컬 메모리의 구성의 예들을 나타낸다. 본 발명이 속하는 기술 분야의 당업자는 본 발명의 기술적 사상에 따라서 이러한 실시예를 대치, 조정 및 개선할 수 있으며, 이러한 모든 대치, 조정 및 개선은 모두 본 발명의 일부로서 포함된다.
도 10a에 도시된 실시예에서, 멀티-코어 구조물(1000)은 로컬 명령 메모리(1003) 및 로컬 데이터 메모리(1004)를 가지는 프로세서 코어(1001), 및 이전 스테이지의 프로세서 코어와 연관된 로컬 데이터 메모리(1002)를 포함한다. 프로세서 코어(1001)는 로컬 명령 메모리(1003), 로컬 데이터 메모리(1004), 실행 유닛(1005), 레지스터 파일(1006), 데이터 어드레스 생성 모듈(1007), 프로그램 카운터(PC, 1008), 기입 버퍼(1009), 및 출력 버퍼(1010)를 포함한다.
로컬 명령 메모리(1003)는 프로세서 코어(1001)에 대한 명령들을 저장한다. 프로세서 코어(1001)의 실행 유닛(1005)에 필요한 피연산자들(operand)은 레지스터 파일(1006)로부터 제공되거나, 명령들로부터 직접 제공될 수 있다. 연산 결과들은 레지스터 파일(1006)에 다시 기입된다.
일 실시예에서, 로컬 데이터 메모리는 2개의 서브-모듈들을 포함할 수 있다. 로컬 데이터 메모리(1004)를 예로 들면, 2개의 서브-모듈들로부터 판독된 데이터들이 멀티플렉서들(1018, 1019)에 의해 선택되어 최종 데이터 출력(1020)이 생성될 수 있다.
프로세서 코어(1001)가 로드 명령을 사용하여 로컬 데이터 메모리(1002, 1004)의 데이터, 기입 버퍼(1009)의 데이터, 또는 공유 메모리로부터의 외부 데이터(1011)를 레지스터 파일(1006)에 로드할 수 있다. 일 실시예에서, 로컬 데이터 메모리(1002, 1004)의 데이터, 기입 버퍼(1009)의 데이터, 또는 외부 데이터(1011)가 멀티플렉서(1016, 1017)에 의해 선택되어 레지스터 파일(1006)에 입력될 수 있다.
프로세서 코어(1001)는 저장 명령을 사용하여 레지스터 파일(1006) 의 데이터를 기입 버퍼(1009)를 통하여 로컬 데이터 메모리(1004)에 기입하거나, 또는 레지스터 파일(1006)의 데이터를 출력 버퍼(1010)를 통하여 외부 공유 메모리에 기입할 수 있다. 이러한 기입 동작은 지연 기입 동작일 수 있다. 또한, 로컬 데이터 메모리(1002)로부터 레지스터 파일(1006)에 데이터가 로드될 때, 로컬 데이터 메모리(1002)로부터의 데이터는 기입 버퍼(1009)를 통하여 로컬 데이터 메모리(1004)에도 기입될 수 있고, 이는 소위 로드-유발-저장(load-induced-store; LIS) 기능을 제공하고, 부담 없는 데이터 전송을 실현할 수 있다.
도 10a에 도시된 실시예에서, 기입 버퍼(1009)는 3 개의 소스들로부터 데이터를 수신할 수 있다. 예를 들어, 기입 버퍼(1009)는 레지스터 파일(1006)로부터의 데이터, 이전 스테이지의 프로세서 코어의 로컬 데이터 메모리(1002)로부터의 데이터, 및 외부 공유 메모리로부터의 데이터(1011)를 수신할 수 있다. 레지스터 파일(1006)로부터의 데이터, 이전 스테이지의 프로세서 코어의 로컬 데이터 메모리(1002)로부터의 데이터, 및 외부 공유 메모리로부터의 데이터(1011)는 멀티플렉서(1012)에 의해 선택되어 기입 버퍼(1009)에 입력될 수 있다.
도 10a에 도시된 실시예에서, 로컬 데이터 메모리는 같은 프로세서 코어에 포함된 기입 버퍼로부터의 데이터만을 수신할 수 있다. 예를 들어, 프로세서 코어(1001)에서, 로컬 데이터 메모리(1004)는 기입 버퍼(1009)로부터의 데이터만을 수신할 수 있다.
도 10a에 도시된 실시예에서, 로컬 명령 메모리(1003) 및 로컬 데이터 메모리(1002, 1004)는 각각 2개의 동일한 서브-모듈들을 포함하고, 이들은 동시에 독립적으로 판독 및 기입을 수행할 수 있다. 로컬 메모리 내에 소위 핑-퐁 교환을 구현하도록 이러한 구조가 사용될 수 있다. 로컬 명령 메모리(1003)에 접근하기 위한 어드레스들이 프로그램 카운터(1008)에 의해 생성된다. 로컬 데이터 메모리(1004)에 접근하기 위한 어드레스들은 3개의 소스들로부터 제공될 수 있다. 예를 들어, 상기 어드레스들은, 동일한 프로세서 코어의 기입 버퍼(1009)(예를 들어, 어드레스 데이터를 저장하는 기입 버퍼의 어드레스 저장부)로부터 제공되거나, 동일한 프로세서 코어의 데이터 어드레스 생성 모듈(1007)에 의해 생성되거나, 다음 스테이지의 프로세서 코어의 데이터 어드레스 생성 모듈에 의해 생성될 수 있다. 동일한 프로세서 코어의 기입 버퍼(1009)로부터의 어드레스들, 동일한 프로세서 코어의 데이터 어드레스 생성 모듈(1007)에 의해 생성된 어드레스들, 또는 다음 스테이지의 프로세서 코어의 데이터 어드레스 생성 모듈에 의해 생성된 어드레스들은 멀티플렉서들(1014, 1015)에 의해 선택되어 각각 로컬 데이터 메모리(1004)의 두 개의 서브-모듈들의 어드레스 포트들에 입력될 수 있다.
이와 유사하게, 로컬 데이터 메모리(1002)에 접근하기 위한 어드레스들은 3개의 소스들로부터 제공될 수 있다. 예를 들어, 상기 어드레스들은, 동일한 프로세서 코어의 기입 버퍼의 어드레스 저장부로부터 제공되거나, 동일한 프로세서 코어의 데이터 어드레스 생성 모듈에 의해 생성되거나, 다음 스테이지의 프로세서 코어의 데이터 어드레스 생성 모듈(1007)에 의해 생성될 수 있다. 이러한 어드레스들은 두 개의 멀티플렉서들에 의해 선택되어 각각 로컬 데이터 메모리(1002)의 두 개의 서브-모듈들의 어드레스 포트들에 입력될 수 있다.
도 10b는 본 발명의 실시예들에 따라 프로세서 코어들 및 이들에 상응하는 로컬 메모리들의 구성의 예를 나타내는 블록도이다. 여기서, 멀티-코어 구조물은 로컬 명령 메모리(1003) 및 로컬 데이터 메모리(1024)를 가지는 프로세서 코어(1021), 및 이전 스테이지의 프로세서 코어와 연관된 로컬 데이터 메모리(1022)를 포함한다. 도 10a의 프로세서 코어(1001)와 유사하게, 프로세서 코어(1021)는 로컬 명령 메모리(1003), 로컬 데이터 메모리(1024), 실행 유닛(1005), 레지스터 파일(1006), 데이터 어드레스 생성 모듈(1007), 프로그램 카운터(PC, 1008), 기입 버퍼(1009), 및 출력 버퍼(1010)를 포함한다.
도 10b에 도시된 실시예에 따른 멀티-코어 구조물은 도 10a에 도시된 실시예에 따른 멀티-코어 구조물과 실질적으로 유사하다. 다만, 도 10a와 달리, 로컬 데이터 메모리(1022, 1024)가 각각, 두 개의 서브-모듈들을 대신하여, 하나의 이중 포트(dual-port) 메모리 모듈을 포함한다. 이중 포트 메모리 모듈은 2개의 서로 다른 어드레스들을 이용한 판독 및 기입 동작들을 지원할 수 있다.
로컬 데이터 메모리(1024)에 접근하기 위한 어드레스들은 3개의 소스들로부터 제공될 수 있다. 예를 들어, 이러한 주소들은, 동일한 프로세서 코어의 기입 버퍼(1009)의 주소 저장부로부터 제공되거나, 동일한 프로세서 코어의 데이터 어드레스 생성 모듈(1007)에 의해 생성되거나, 다음 스테이지의 프로세서 코어의 데이터 어드레스 생성 모듈에 의해 생성될 수 있다. 동일한 프로세서 코어의 기입 버퍼(1009)의 주소 저장부로부터 제공된 어드레스들, 동일한 프로세서 코어의 데이터 어드레스 생성 모듈(1007)에 의해 생성된 어드레스들, 다음 스테이지의 프로세서 코어의 데이터 어드레스 생성 모듈에 의해 생성된 어드레스들(1025)은 멀티플렉서(1026)에 의해 선택되어 로컬 데이터 메모리(1024)의 어드레스 포트로 입력될 수 있다.
이와 유사하게, 로컬 데이터 메모리(1022)에 접근하기 위한 어드레스들은 3개의 소스들로부터 제공될 수 있다. 예를 들어, 상기 어드레스들은, 동일한 프로세서 코어의 기입 버퍼의 어드레스 저장부로부터 제공되거나, 동일한 프로세서 코어의 데이터 어드레스 생성 모듈에 의해 생성되거나, 다음 스테이지의 프로세서 코어의 데이터 어드레스 생성 모듈(1007)에 의해 생성될 수 있다. 이러한 어드레스들은 멀티플렉서에 의해 선택되어 로컬 데이터 메모리(1022)의 어드레스 포트에 입력될 수 있다.
다른 실시예에서, ‘로드’ 명령들 및 ‘저장’ 명령들이 일반적으로 컴퓨터 프로그램에서 40%를 초과하지 않기 때문에, 도 10b의 듀얼-포트 메모리 모듈을 대신하여, 싱글-포트 메모리 모듈이 사용될 수 있다. 싱글-포트 메모리 모듈이 사용되는 경우, 컴퓨터 프로그램의 명령들의 순서는, 컴파일 동안 통계적으로 조절되거나, 프로그램 실행 동안 동적으로 조절되어, 메모리 모듈에 접근이 불필요한 명령들이 실행될 때 메모리 모듈에 접근이 필요한 명령들이 동시에 실행되도록 할 수 있다. 이에 따라, 연결 구조의 구성이 보다 간결하고 효과적일 수 있다.
도 10b에 도시된 실시예에서, 모든 로컬 데이터 메모리는, 두 개의 판독 동작들, 두 개의 기입 동작들, 또는 하나의 판독 동작 및 하나의 기입 동작을 동시에 지원할 수 있는 듀얼-포트 메모리 모듈로 구현될 수 있다. 실행 중 데이터가 잘못 기입되는 것을 방지하도록, 도 10c에 도시된 실시예에 따른 방법이 채택될 수 있다. 로컬 데이터 메모리(1031)에서, 모든 어드레스 항목은 상응하는 유효 비트(또는 유효 플래그)(1032) 및 상응하는 소유권 비트(또는 소유권 플래그)(1033)를 가질 수 있다.
도 10c에서, 유효 비트(1032)는 로컬 데이터 메모리(1031)에 저장된 데이터(1034)의 유효성을 나타낼 수 있다. 예를 들어, “1”은 로컬 데이터 메모리(1031)의 상응하는 데이터(1034)가 유효함을 나타낼 수 있고, “0”은 로컬 데이터 메모리(1031)의 상응하는 데이터(1034)의 무효함을 나타낼 수 있다. 소유권 비트(1033)는 어느 프로세서 코어가 로컬 데이터 메모리(1031)의 상응하는 데이터(1034)를 사용하는지를 나타낼 수 있다. 예를 들어, “0”은 현재 스테이지의 프로세서 코어(1035)가 데이터(1034)를 사용하는 것을 나타내고, “1”은 로컬 데이터 메모리(1031)에 상응하는 현재 스테이지의 프로세서 코어(1035) 및 다음 스테이지의 프로세서 코어(1036) 모두가 데이터(1034)를 사용하는 것을 나타낼 수 있다.
일 실시예에서, 유효 비트(1032) 및 소유권 비트(1033)가 상술한 바와 같이 정의됨으로써, 로컬 데이터 메모리(1031)에 대한 정확한 판독 및/또는 기입 동작들이 보장될 수 있다.
도 10c에 도시된 실시예에서, 로컬 데이터 메모리(1031)의 하나의 항목의 유효 비트(1032)가 “0”이면, 상응하는 데이터(1034)가 무효일 수 있다. 즉, 필요 시, 새로운 데이터가 이 항목에 직접 저장될 수 있다. 하나의 항목의 유효 비트(1032)가 “1”이고, 소유권 비트(1033)가 “0”인 경우, 상응하는 데이터(1034)는 유효하고, 로컬 데이터 메모리(1031)에 상응하는 현재 스테이지의 프로세서 코어(1035)에 의해 사용될 수 있다. 이 경우, 현재 스테이지의 프로세서 코어(1035)는, 필요 시, 이 항목에 새로운 데이터를 직접 저장할 수 있다. 하나의 항목의 유효 비트(1032)가 “1”이고, 소유권 비트(1033)가 “1”인 경우, 상응하는 데이터(1034)는 유효하고, 로컬 데이터 메모리(1031)에 상응하는 현재 스테이지의 프로세서 코어(1035) 및 다음 스테이지의 프로세서 코어(1036) 모두에 의해 사용될 수 있다. 이 경우, 이 항목에 새로운 데이터를 저장하기 위해서, 현재 스테이지의 프로세서 코어(1035)는 소유권 비트(1033)가 다시 “0”으로 변경되는 것을 대기하고, 소유권 비트(1033)가 “0”이 된 후 이 항목에 상기 새로운 데이터를 저장할 수 있다. 예를 들어, 현재 스테이지의 프로세서 코어(1035) 또는 로컬 데이터 메모리(1031)는 우선 다음 스테이지의 프로세서 코어(1036)와 연관된 로컬 데이터 메모리(1037)의 상응하는 위치에 데이터(1034)를 전송할 수 있고, 그 후 데이터(1034)의 소유권 비트(1033)를 “0”으로 변경함으로써 현재 스테이지의 프로세서 코어(1035)는 이 항목에 새로운 데이터를 직접 저장할 수 있다.
도 10c에 도시된 실시예에서, 로컬 데이터 메모리(1031)에 데이터를 저장할 때, 현재 스테이지의 프로세서 코어(1035)는 상응하는 유효 비트(1032)를 “1”로 설정하고, 이 데이터(1034)가 다음 스테이지의 프로세서 코어(1036)에 의해 사용될지 여부에 기초하여 소유권 비트(1033)를 설정할 수 있다. 데이터(1034)가 다음 스테이지의 프로세서 코어(1036)에 의해 사용될 경우, 소유권 비트(1033)는 “1”로 설정될 수 있고, 그렇지 않은 경우, 소유권 비트(1033)는 “0”으로 설정될 수 있다. 이와 달리, 현재 스테이지의 프로세서 코어(1035)는, 유효 비트(1032)를 “1”로 설정할 때마다, 소유권 비트(1032)도 “1”로 설정할 수 있다. 이 경우, 로컬 데이터 메모리(1031)의 용량이 증가되어야 하지만, 구현 구조가 간략화될 수 있다.
도 11a는 현재 SOC 시스템의 전형적인 구조를 나타낸다. 도 11a에 도시된 바와 같이, 중앙 처리 장치(CPU, 1101), 디지털 신호 처리기(DSP, 1102), 기능 유닛들(1103, 1104, 1105), 입출력 제어 모듈(1106) 및 메모리 제어 모듈(1108)은 모두 시스템 버스(1110)에 연결된다. 이 SOC 시스템은 입출력 제어 모듈(1106)을 통하여 주변 장치(1107)와 데이터를 교환하고, 메모리 제어 모듈(1108)을 통하여 외부 메모리(1109)에 접근할 수 있다.
도 11b는 본 발명의 실시예들에 따른 SOC 시스템(1100)의 예를 나타낸다. 일 실시예에서, 프로세서 코어 및 연관된 로컬 메모리(1121)는 다른 6개의 프로세서 코어들 및 연관된 로컬 메모리들과 함께 기능 모듈(1124)을 구성할 수 있다. 프로세서 코어 및 연관된 로컬 메모리(1122)는 다른 4개의 프로세서 코어들 및 연관된 로컬 메모리들과 함께 기능 모듈(1125)을 구성할 수 있다. 프로세서 코어 및 연관된 로컬 메모리(1123)는 다른 3개의 프로세서 코어들 및 연관된 로컬 메모리들과 함께 기능 모듈(1126)을 구성할 수 있다. 기능 모듈들(1124, 1125, 1126)은 정의된 기능들을 수행할 수 있는 임의의 모듈들일 수 있다. 예를 들어, 각 기능 모듈(1124, 1125, 1126)은 도 11a에 도시된 중앙 처리 장치(1101), 디지털 신호 처리기(1102), 기능 유닛들(1103, 1104, 1105), 입출력 제어 모듈(1106), 또는 메모리 제어 모듈(1108) 중 어느 하나에 상응할 수 있다.
기능 모듈(1126)을 예로 들면, 프로세서 코어들 및 연관된 로컬 메모리들(1123, 1127, 1128, 1129)은 기능 모듈(1126)의 기능들을 수행하기 위한 직렬-연결 멀티-코어 구조물을 형성한다.
프로세서 코어 및 연관된 로컬 메모리(1123)와 프로세서 코어 및 연관된 로컬 메모리(1127)는 데이터 교환을 위하여 내부 연결 구조물(1130)을 통하여 연결될 수 있다. 이와 유사하게, 프로세서 코어 및 연관된 로컬 메모리(1127)와 프로세서 코어 및 연관된 로컬 메모리(1128)는 데이터 교환을 위하여 내부 연결 구조물(1131)을 통하여 연결되고, 프로세서 코어 및 연관된 로컬 메모리(1128)와 프로세서 코어 및 연관된 로컬 메모리(1129)는 데이터 교환을 위하여 내부 연결 구조물(1132)을 통하여 연결될 수 있다.
기능 모듈(1126)은 하드와이어(1133, 1134)를 통하여 버스 연결 모듈(1138)에 연결되어, 기능 모듈(1126)과 버스 연결 모듈(1138)이 데이터를 교환할 수 있다. 이와 유사하게, 기능 모듈(1125)과 버스 연결 모듈(1139)이 데이터를 교환할 수 있고, 기능 모듈(1124)과 버스 연결 모듈들(1140, 1141)이 데이터를 교환할 수 있다. 버스 연결 모듈(1138)과 버스 연결 모듈(1139)은 데이터를 교환하도록 하드와이어(1135)를 통하여 연결될 수 있다. 버스 연결 모듈(1139)과 버스 연결 모듈(1140)은 데이터를 교환하도록 하드와이어(1136)를 통하여 연결될 수 있다. 버스 연결 모듈(1140)과 버스 연결 모듈(1141)은 데이터를 교환하도록 하드와이어(1137)를 통하여 연결될 수 있다. 이에 따라, 기능 모듈(1125), 기능 모듈(1126) 및 기능 모듈(1127)은 서로 데이터를 교환할 수 있다. 즉, 버스 연결 모듈들(1138, 1139, 1140, 1141) 및 하드와이어들(1135, 1136, 1137)은 시스템 버스 기능을 수행할 수 있다.
본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물에서 프로세서 코어 및 이의 로컬 메모리의 수는 용이하게 확장될 수 있으므로, 본 발명의 실시예들에 따른 SOC 시스템의 멀티-코어 구조물은 적절한 수의 프로세서 코어들 및 이들에 연관된 로컬 메모리들을 포함하도록 확장/축소(scale)될 수 있고, 이에 따라 다양한 SOC 시스템들을 구현할 수 있다. 게다가, 본 발명의 실시예들에 따른 기능 모듈들은 동적으로 재구성될 수 있고, 이에 따라 멀티-코어 구조물의 구성이 유연하게 변경될 수 있다.
도 11c는 본 발명의 실시예들에 따른 SOC 시스템의 또 다른 예를 나타낸다. 일 실시예에서, 프로세서 코어 및 연관된 로컬 메모리(1151)는 다른 6개의 프로세서 코어들 및 연관된 로컬 메모리와 함께 기능 모듈(1163)을 구성하고, 프로세서 코어 및 연관된 로컬 메모리(1152)는 다른 4개의 프로세서 코어들 및 연관된 로컬 메모리와 함께 기능 모듈(1164)을 구성하며, 프로세서 코어 및 연관된 로컬 메모리(1153)는 다른 2개의 프로세서 코어들 및 연관된 로컬 메모리와 함께 기능 모듈(1165)을 구성할 수 있다. 각 기능 모듈(1163, 1164, 1165)은 도 11a에 도시된 중앙 처리 장치(1101), 디지털 신호 처리기(1102), 기능 유닛들(1103, 1104, 1105), 입출력 제어 모듈(1106), 또는 메모리 제어 모듈(1108) 중 하나에 상응할 수 있다.
기능 모듈(1165)을 예로 들면, 프로세서 코어들 및 연관된 로컬 메모리들(1153, 1154, 1155, 1156)은 직렬-연결 멀티-코어 구조물을 형성하고, 기능 모듈(1165)의 기능을 수행할 수 있다.
게다가, 프로세서 코어 및 연관된 로컬 메모리(1153)와 프로세서 코어 및 연관된 로컬 메모리(1154)는 데이터 교환을 위하여 내부 연결 구조물(1160)을 통하여 연결될 수 있다. 이와 유사하게, 프로세서 코어 및 연관된 로컬 메모리(1154)와 프로세서 코어 및 연관된 로컬 메모리(1155)는 데이터 교환을 위하여 내부 연결 구조물(1161)을 통하여 연결되고, 프로세서 코어 및 연관된 로컬 메모리(1155)와 프로세서 코어 및 연관된 로컬 메모리(1156)는 데이터 교환을 위하여 내부 연결 구조물(1162)을 통하여 연결될 수 있다.
일 실시예에서, 예를 들어, 기능 모듈(1165)과 기능 모듈(1164) 사이의 데이터 교환은 프로세서 코어 및 연관된 로컬 메모리(1156)와 프로세서 코어 및 연관된 로컬 메모리(1166) 사이의 데이터 교환에 의해 수행될 수 있다. 본 발명의 실시예들에 따라, 구동 중, 프로세서 코어 및 연관된 로컬 메모리(1156)가 프로세서 코어 및 연관된 로컬 메모리(1166)와 데이터 교환이 필요한 경우, 구성 가능한 상호 연결 네트워크가 자동으로 프로세서 코어 및 연관된 로컬 메모리(1156)와 프로세서 코어 및 연관된 로컬 메모리(1166) 사이의 양방향 데이터 경로(1158)를 형성할 수 있다. 이와 유사하게, 프로세서 코어 및 연관된 로컬 메모리(1156)가 프로세서 코어 및 연관된 로컬 메모리(1166)에 단방향으로 데이터를 전송할 필요가 있거나, 프로세서 코어 및 연관된 로컬 메모리(1166)가 프로세서 코어 및 연관된 로컬 메모리(1156)에 단방향으로 데이터를 전송할 필요가 있는 경우, 상기 구성 가능한 상호 연결 네트워크가 단방향 데이터 경로를 형성할 수 있다.
게다가, 일 실시예에서, 양방향 데이터 경로(1157)가 프로세서 코어 및 연관된 로컬 메모리(1151)와 프로세서 코어 및 연관된 로컬 메모리(1152) 사이에 형성되고, 양방향 데이터 경로(1159)가 프로세서 코어 및 연관된 로컬 메모리(1165)와 프로세서 코어 및 연관된 로컬 메모리(1155) 사이에 형성될 수 있다. 이러한 방법으로, 기능 모듈(1163), 기능 모듈(1164) 및 기능 모듈(1165)이 서로 데이터를 교환하고, 양방향 데이터 경로들(1157, 1158, 1159)이 도 11a에 도시된 시스템 버스(1110)의 기능을 수행하며, 양방향 데이터 경로들(1157, 1158, 1159) 및 기능 모듈들(1163, 1164, 1165)은 전형적인 SOC 시스템을 구성할 수 있다.
SOC 시스템의 다양한 응용들의 서로 다른 요구에 따라, 임의의 두 기능 모듈들 사이에 하나 이상의 데이터 경로가 형성될 수 있다. 본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물에서 프로세서 코어 및 이의 로컬 메모리의 수는 용이하게 확장될 수 있으므로, 본 발명의 실시예들에 따른 SOC 시스템의 멀티-코어 구조물에 기초하여 다양한 SOC 시스템들을 구현할 수 있다. 게다가, 본 발명의 실시예들에 따른 기능 모듈들은 동적으로 재구성될 수 있고, 이에 따라 멀티-코어 구조물의 구성이 구동 중 유연하게 변경될 수 있다.
도 12는 프리-컴파일 및 포스트-컴파일의 예를 나타낸다. 도 12a는 본 발명의 실시예들에 따른 프리-컴파일의 예를 나타내고, 도 12b는 본 발명의 실시예들에 따른 포스트-컴파일의 예를 나타낼 수 있다.
도 12a에서, 좌측에는 원시 프로그램 코드(1201, 1203, 1204)가 도시되어 있다. 원시 프로그램 코드(1201, 1203, 1204)는 A 함수 호출 및 B 함수 호출의 2개의 함수 호출들을 포함한다. 원시 프로그램 코드(1201, 1203, 1204)에서, 프로그램 코드(1203) 및 프로그램 코드(1204)는 각각 A 함수의 소스 코드 및 B 함수의 소스 코드이다. 프리-컴파일에 의해, A 함수 호출 및 B 함수 호출이 각각 상응한 함수의 프로그램 코드들(예를 들어, 1202 및 1204)로 교체됨으로써, 프리-컴파일된 프로그램 코드(1202)는 함수 호출을 포함하지 않을 수 있다.
도 12b는 포스트-컴파일의 예를 나타낸다. 도 12b에 도시된 바와 같이, 원시 목적 코드(1205)는 순차적으로 실행되도록 컴파일된 일반적인 목적 코드이다. 포스트-컴파일 후, 원시 목적 코드(1205)는 복수의 코드 세그먼트들(code segments)(1206, 1207, 1208, 1209, 1210, 1211)로 분할되고, 각 코드 세그먼트(1206, 1207, 1208, 1209, 1210, 1211)는 이를 실행하는 하나의 프로세서 코어에 할당될 수 있다. 예를 들어, A 루프는 단일한 코드 세그먼트(1207)로 분할되는 반면, B 루프는, 그것이 상대적으로 크기 때문에, 2개의 작은 코드 세그먼트들, 즉 B1 루프를 포함하는 코드 세그먼트(1209) 및 B2 루프를 포함하는 코드 세그먼트(1210)로 분할될 수 있다. 상기 2개의 코드 세그먼트들(1209, 1210)은 2개의 프로세서 코어들에서 각각 실행되고, 이들 2개가 함께 B 루프의 기능을 실행할 수 있다.
도 13a는 본 발명의 실시예들에 따른 구성 가능한 멀티-코어 구조물의 예를 나타내는 블록도이고, 도 13b는 멀티-코어 구조물의 직렬 구성의 예를 나타내며, 도 13c는 멀티-코어 구조물의 직병렬 조합된 구성의 예를 나타내고, 도 13d는 멀티-코어 구조물의 구성의 다른 예를 나타낸다.
도 13a에 도시된 것과 같이, 멀티-코어 구조물(1300)은 복수의 프로세서 코어들 및 구성 가능한 로컬 메모리들(1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317)을 포함한다. 멀티-코어 구조물(1300)은 복수의 구성 가능한 상호 연결 모듈들(1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318)을 더 포함할 수 있다. 일 실시예에서, 각 프로세서 코어 및 연관된 구성 가능한 로컬 메모리는 매크로 파이프라인의 하나의 스테이지를 형성할 수 있다. 즉, 복수의 구성 가능한 상호 연결 모듈들(예를 들어, 1302)을 통하여, 복수의 프로세서 코어들 및 구성 가능한 로컬 메모리들(1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317)이 직렬-연결 멀티-코어 구조물을 형성하도록 구성될 수 있다. 실시예에 따라, 다수의 직렬-연결 구조물들이 서로 독립적으로 구동하거나, 부분적 또는 전체적으로 서로 연관되어 직렬, 병렬 또는 직병렬 혼합된 방식으로 프로그램들을 실행할 수 있다.
도 13b에 도시된 것과 같이, 구성 가능한 상호 연결 모듈들을 적절히 구성함으로써, 직렬-연결된 멀티-코어 구조물(1300)이 형성될 수 있다. 프로세서 코어 및 구성 가능한 로컬 메모리(1301)는 직렬-연결된 멀티-코어 구조물(1300)의 매크로 파이프라인의 제1 스테이지이고, 프로세서 코어 및 구성 가능한 로컬 메모리(1317)는 상기 매크로 파이프 라인의 마지막 스테이지일 수 있다.
도 13c에 도시된 것과 같이, 구성 가능한 상호 연결 모듈들을 적절히 구성함으로써, 프로세서 코어들 및 구성 가능한 로컬 메모리들(1301, 1303, 1305)이 직렬-연결된 멀티-코어 구조물을 형성하고, 프로세서 코어들 및 구성 가능한 로컬 메모리들(1313, 1315, 1317) 또한 다른 직렬-연결된 멀티-코어 구조물을 형성할 수 있다. 한편, 프로세서 코어들 및 구성 가능한 로컬 메모리들(1307, 1309, 1311)은 병렬-연결된 멀티-코어 구조물을 형성할 수 있다. 게다가, 3개의 멀티-코어 구조물들이 연결되어 직병렬 조합된 멀티-코어 프로세서를 형성할 수 있다.
도 13d에 도시된 바와 같이, 구성 가능한 상호 연결 모듈들을 적절히 구성함으로써, 프로세서 코어들 및 구성 가능한 로컬 메모리들(1301, 1307, 1313, 1315)이 직렬-연결된 멀티-코어 구조물을 형성하고, 프로세서 코어들 및 구성 가능한 로컬 메모리들(1303, 1309, 1305, 1311, 1317)이 다른 직렬-연결된 멀티-코어 구조물을 형성하여 2개의 독립적으로 구동하는 멀티-코어 구조물들이 형성될 수 있다.
Claims (37)
- 실행 명령을 통하여 동작을 수행하고 데이터를 로드 및 저장하는 하드웨어인 다중 프로세서 코어에서 프로그램을 실행하여 결과를 생성하기 위한 데이터 처리 방법에 있어서,
직렬-연결된 멀티-코어 프로세서 구조물에 포함된 모든 코어들이 코드 세그먼트들을 실행하는 데에 필요한 시간이 거의 같도록 상기 직렬-연결된 멀티-코어 프로세서 구조물에서 실행될 프로그램 코드를 분할하는 단계;
상기 다중 프로세서 코어 중 상기 직렬-연결된 멀티-코어 프로세서 구조물에서 프로그램이 실행될 때, 상기 직렬-연결된 멀티-코어 프로세서 구조물의 이전 스테이지 프로세서 코어의 실행 결과를 현재 스테이지 프로세서 코어의 입력으로 전송하고, 매 단위 시간마다, 상기 직렬-연결된 멀티-코어 프로세서 구조물의 각 프로세서 코어가 하나 이상의 이슈(issue)들을 생성하고, 상기 직렬-연결된 멀티-코어 프로세서 구조물이 직렬 멀티-이슈인 다수의 이슈들을 수행하도록 매크로 파이프라인을 구동하는 단계; 및
상기 다중 프로세서 코어 중 상기 직렬-연결된 멀티-코어 프로세서 구조물에서 프로그램이 실행될 때, 상기 직렬-연결된 멀티-코어 프로세서 구조물의 각 프로세서 코어의 내부 파이프라인은 제1 파이프라인 계층을 형성하고, 상기 직렬-연결된 멀티-코어 프로세서 구조물의 각 프로세서 코어를 상기 매크로 파이프라인의 부분으로 하여 제2 파이프라인 계층을 형성하며, 나머지도 이와 같은 방식으로 많은 계층들을 형성하여 파이프라인 계층을 보다 높은 레벨들로 확장하는 단계를 포함하는 데이터 처리 방법. - 제1 항에 있어서,
상기 멀티-코어 프로세서 구조물의 상기 프로세서 코어에서 수행되는 상기 코드 세그먼트를 생성하기 위하여, 상기 프로그램의 소스 코드를 목적 코드로 변환하기 위한 컴파일 처리 외에, 상기 컴파일 처리 전에 상기 프로그램의 소스 코드를 프리-컴파일(pre-compile)하는 단계;
요구에 따라 포스트-컴파일(post-compile)을 수행하는 단계;
작업 내용 및 부하를 상기 직렬-연결된 멀티-코어 프로세서 구조물의 모든 프로세서 코어들에 할당하는 단계; 및
상기 작업 내용 및 상기 부하를 이용하여 상기 프로그램 코드를 하나 이상의 코드 세그먼트들로 분할하는 단계를 더 포함하는 것을 특징으로 하는 데이터 처리 방법. - 제2 항에 있어서, 상기 포스트-컴파일을 수행하는 단계는,
전단 코드 스트림을 생성하도록 실행 가능한 프로그램 코드를 해석하는 단계;
필요한 실행 사이클들, 임의의 점프/분기 및 점프/분기 주소들 등과 같은 정보를 획득하도록 상기 전단 코드 스트림을 탐색 및 분석하고, 이러한 정보 및 다른 정보를 분석하여 세그먼트 정보(즉, 상기 컴파일된 코드를 분할하는 방법)을 결정하거나, 상기 명령들의 수에 기초하여 상기 목적 코드를 상기 명령들의 수와 같거나 유사한 수의 코드 세그먼트들로 분할하는 단계; 및
전체 명령 횟수와 같은 정보를 결정하고 이러한 정보에 기초하여 코드 세그먼트들을 생성하기 위하여 상기 포스트-컴파일 처리 시 상기 실행 가능한 목적 코드를 파싱하는 단계를 포함하는 것을 특징으로 하는 데이터 처리 방법. - 제3 항에 있어서,
상기 각 프로세서 코어에서 실행되는 명령어는, 보다 작은 세그먼트들로 분할된 상응하는 코드 세그먼트를 포함할 뿐만 아니라, 원시 프로그램들의 기능에 영향을 주지 않는 추가적인 명령들을 포함하는 것을 특징으로 하는 데이터 처리 방법. - 프로그램을 실행하기 위한 구성 가능한 멀티-코어 구조물에 있어서,
복수의 프로세서 코어들;
복수의 프로세서 코어들과 각각 연관된 복수의 구성 가능한 로컬 메모리들(configurable local memory); 및
상기 복수의 프로세서 코어들을 직렬로 상호 연결하기 위한 복수의 구성 가능한 상호 연결 구조물들(configurable interconnect structure)을 포함하고,
상기 복수의 프로세서 코어들 각각은 명령들을 통하여 연산들을 수행하고, 데이터 판독/기입을 수행하도록 구성되고,
상기 구성 가능한 로컬 메모리들 각각은 명령들 및 데이터를 저장하고, 상기 복수의 프로세서 코어들 사이에서 데이터를 교환하도록 구성되며,
상기 구성 가능한 상호 연결 구조물들은 상기 복수의 프로세서 코어들을 서로 다른 구성들 또는 그룹들로 상호 연결하도록 구성되고,
상기 복수의 프로세서 코어들, 상기 복수의 구성 가능한 로컬 메모리들 및 복수의 구성 가능한 상호 연결 구조물들은, 응용에 따른 요구에 기초하여 하나 또는 복수의 직렬-연결된 멀티-코어 구조물을 구성하며,
상기 직렬-연결된 멀티-코어 구조물의 모든 프로세서 코어들은 상기 프로그램 코드의 부분적인 코드 세그먼트들을 각각 수행하고,
상기 직렬-연결된 멀티-코어 구조물의 모든 프로세서 코어들이 함께 상기 프로그램 코드의 전체 기능을 실현하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
하나 또는 복수의 확장 모듈들을 더 포함하고,
상기 확장 모듈들은,
상기 복수의 구성 가능한 로컬 메모리의 오버플로우가 발생한 경우 데이터를 저장하고, 상기 프로세서 코어들 사이에서 공유 데이터를 전송하기 위한 공유 메모리,
상기 프로세서 코어들 외에 다른 모듈들이 상기 구성 가능한 로컬 메모리에 접근하기 위한 직접 메모리 접근(DMA), 또는
상기 프로세서 코어들 및 상기 구성 가능한 로컬 메모리들의 예외를 처리하기 위한 예외 처리(exception handling) 모듈들을 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
각 프로세서 코어는 실행 유닛 및 프로그램 카운터를 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제7 항에 있어서, 상기 프로세서는,
확장 모듈들을 더 포함하고,
각 프로세서 코어는,
레지스터 파일을 더 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
모든 프로세서 코어는 연관된 로컬 메모리를 가지고,
각 구성 가능한 로컬 메모리는 명령 메모리 및 구성 가능한 데이터 메모리를 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제9 항에 있어서,
동일한 구성 가능한 로컬 메모리에서, 상기 명령 메모리와 상기 구성 가능한 데이터 메모리 사이의 경계는 구성 가능한 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제9 항에 있어서, 상기 구성 가능한 데이터 메모리는,
복수의 서브-모듈들을 포함하고,
상기 서브-모듈들 사이의 경계는 구성 가능한 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제9 항에 있어서, 상기 구성 가능한 상호 연결 구조물들은,
상기 프로세서 코어들과 상기 구성 가능한 로컬 메모리들 사이의 연결들;
상기 프로세서 코어들과 상기 공유 메모리 사이의 연결들;
상기 프로세서 코어들과 직접 메모리 접근 제어기 사이의 연결들;
상기 구성 가능한 로컬 메모리들과 상기 공유 메모리 사이의 연결들;
상기 구성 가능한 로컬 메모리들과 상기 직접 메모리 접근 제어기 사이의 연결들;
상기 구성 가능한 로컬 메모리들과 외부 시스템 사이의 연결들; 및
상기 공유 메모리와 상기 외부 시스템 사이의 연결들을 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제12 항에 있어서,
두 개의 프로세서 코어들 및 연관된 로컬 메모리들은 상기 구성에 기초하여 이전 및 현재 스테이지 관계를 형성하고,
상기 프로세서 코어들 및 연관된 로컬 메모리들의 일부 또는 전부는 상기 구성 가능한 상호 연결 구조들을 통하여 하나 또는 복수의 직렬 연결 구조물들을 형성하며,
상기 복수의 직렬 연결 구조물들은 각각 독립되거나, 이러한 구조물들이 부분적으로 또는 전체적으로 관계를 가질 수 있으며,
이러한 구조물들이 직렬, 병렬 또는 직병렬 혼합된 방식으로 명령들을 실행하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제13 항에 있어서, 상기 직렬, 병렬 또는 직병렬 혼합된 방식의 명령 실행은,
응용에 따른 요구에 기초하여, 동기 방식 제어 하의 서로 다른 직렬-연결 구조물들이 서로 다른 프로그램 세그먼트들을 수행하고, 서로 다른 명령들을 병렬로 실행하며, 멀티-스레드를 병렬로 실행하거나,
응용에 따른 요구에 기초하여, 동기 방식 제어 하의 서로 다른 직렬-연결 구조물들이 동일한 프로그램 세그먼트들을 실행하거나, 또는
단일 명령 다중 데이터 스트림(SIMD) 모드를 이용하여 동일한 명령어로 서로 다른 데이터를 연산을 하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 멀티-코어 구조물은 특정한 판독 정책을 가지고,
제1 프로세서 코어는, 제1 구성 가능한 로컬 메모리, 공유 메모리, 또는 외부 장치들 중 하나를 포함하는 상기 제1 프로세서 코어에 데이터를 입력하는 제1 소스를 정의하고, 상기 구성 가능한 로컬 메모리 및 이전 스테이지의 프로세서 코어와 연관된 구성 가능한 데이터 메모리를 포함하는 다른 프로세서 코어들에 데이터를 입력하는 소스를 정의하는 제1 판독 정책을 가지도록 구성된 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 멀티-코어 구조물은 특정한 기입 정책을 가지고,
제1 프로세서 코어는, 제1 구성 가능한 로컬 메모리, 공유 메모리, 또는 외부 장치들을 포함하는 상기 제1 프로세서 코어로부터 출력된 데이터에 대한 제1 목적지를 정의하고, 상기 제1 구성 가능한 로컬 메모리, 이전 스테이지의 프로세서 코어와 연관된 구성 가능한 데이터 메모리, 또는 상기 공유 메모리 중 하나를 포함하는 다른 프로세서 코어들 및 연관된 로컬 메모리들에 데이터를 입력하는 소스를 정의하는 제1 기입 정책을 가지도록 구성되고,
제2 프로세서 코어는 제2 구성 가능한 로컬 메모리, 및 상기 공유 메모리를 포함하는 상기 제1 프로세서 코어로부터 출력된 데이터에 대한 제2 목적지를 정의하는 제2 기입 정책을 가지도록 구성되며,
상기 구조물에 확장 메모리가 존재하는 경우, 출력되는 데이터에 대한 목적지는 상기 확장 메모리를 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제15 항 또는 제 16항에 있어서,
상기 프로세서 코어들 및 연관된 구성 가능한 메모리들에 입력되는 데이터에 대한 상기 제1 및 제2 소스들을 선택하는 복수의 멀티플렉서들을 더 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제15 항 또는 제 16항에 있어서, 상기 제1 구성 가능한 로컬 메모리는,
상기 제1 프로세서 코어 및 상기 제2 프로세서 코어에 의해 동시에 독립적으로 접근되는 복수의 데이터 서브-모듈들을 포함하는 것을 특징으로 하는 멀티-코어 구조물. - 제24 항에 있어서, 상기 제1 및 제2 프로세서 코어들 각각은,
레지스터 파일을 포함하고,
상기 제1 프로세서 코어의 상기 레지스터 파일의 레지스터들의 값들은, 구동 중, 상기 제2 프로세서 코어의 상기 레지스터 파일의 상응하는 레지스터들에 전송되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 제2 계층 매크로 파이프라인은 상기 매크로 파이프라인의 2개의 인접한 스테이지들 사이에서 전송되는 백-프레셔(back-pressure) 신호에 의해 제어되고,
상기 백-프레셔 신호는, 이전 스테이지가 정지되어있는지 여부를 결정하도록 상기 이전 스테이지의 프로세서 코어에 전송되며,
그 동작 조건에 따라, 현재 스테이지 파이프라인이 정지될지 여부가 결정되어 상기 매크로 파이프라인의 동작이 제어되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 예외 처리 모듈은 상기 멀티-코어 구조물의 프로세서 코어들에 의해 형성되거나, 다른 모듈들에 의해 형성되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 구성 정보는, 프로세서 코어들의 전원 턴-온 또는 턴-오프 정보, 로컬 메모리의 명령 메모리 및 데이터 서브-메모리의 크기/경계 및 내용에 대한 구성 정보, 및 상호 연결 구조물의 구성 및 관계 정보를 포함하는 것을 특징으로 하는 멀티-코어 구조물. - 제5 항에 있어서,
프로세서 코어들은 복수의 전력 관리 모드들을 가지도록 구성되고,
상기 복수의 전력 관리 모드들은,
비구동 중인 프로세서 코어를 저전력 상태로 놓는 구성 레벨 전력 관리 모드;
데이터의 비완료는 상부 스테이지 프로세서가 현재 스테이지 프로세서가 필요한 데이터를 연관된 데이터 서브-메모리에 기입하지 않은 것을 나타내므로, 데이터 접근의 완료를 대기하는 프로세서 코어를 저전력 상태로 놓는 명령 레벨 전력 관리 모드; 및
하드웨어만으로 구현되고, 아이들(idle) 태스크의 특징을 이용하고, 현재 프로세서 코어들의 이용률(utilization)을 보장하도록, 현재 이용률 및 임계 값에 따라, 프로세서가 저전력 상태로 들어 가거나 또는 저전력 상태로부터 되돌아 오는지 여부를 결정하는 응용 레벨 전력 관리모드를 포함하고,
상기 이용률은, 고정되거나, 새로 설정되거나, 자체 학습에 의해 결정되거나, 이 구조물이 구동하기 시작할 때 시스템을 통하여 칩 내부에 기입되거나, 소프트웨어에 의해 기입될 수 있고,
이용률 매칭에 사용되는 참조 내용은, 칩 생산 시 칩 내부에 고정되거나, 시스템 부팅 시 시스템에 의해 기입되거나, 자체 학습에 의해 기입될 수 있고,
상기 기입은 단일 기입 동작 또는 다수의 기입 동작들에 의해 수행될 수 있으며,
상기 저전력 상태는, 프로세서의 클록 주파수를 감소시키는 것 및 전원 공급을 차단하는 것을 포함하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
외부 장비들에 의존하지 않고 전력 추가 공급 상황에 대한 셀프-테스트를 수행하는 셀프-테스트 장비를 더 포함하고,
상기 구조물이 셀프-테스트 장비를 포함하는 경우, 하나 또는 복수의 특정 기초 구성요소들, 연산 유닛들 또는 프로세서 코어들이 비교기로 사용되며,
복수의 나머지 상응하는 기초 구성요소들, 연산 유닛들 또는 프로세서 코어들이 특정한 관계를 가지도록 하여, 상기 구조물의 상기 다른 구성요소들의 출력들이 상기 비교기에 의해 비교됨으로써 상기 특정한 관계에 상응하는지 여부가 판단되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제24 항에 있어서,
임의의 프로세서 코어는 셀프-복구 기능을 가지는 셀프-테스트 장치를 포함하고,
정상적으로 구동하지 않는 임의의 프로세서 코어가 무효한 것으로 표시됨으로써, 상기 무효로 표시된 프로세서 코어는 상기 매크로 파이프라인을 구성하지 않도록 하여 상기 자체-복구 기능이 수행되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제1 항에 있어서,
상기 복수의 프로세서 코어들은 동일한 프로세서 구조를 가지거나, 적어도 하나의 서로 다른 구조를 가지는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 구조물은 로드-유발-저장(load induced store, LIS) 기능을 가지고,
상기 제2 프로세서가 어드레스에 대하여 처음으로 판독할 때, 상기 제2 프로세서 코어는 상기 제1 구성 가능한 로컬 메모리로부터 판독하고, 독출된 데이터를 상기 제2 구성 가능한 로컬 메모리에 저장함으로써, 후속 접근이 상기 제2 구성 가능한 로컬 메모리로부터 수행될 수 있도록 하여 로드-유발-저장 동작을 수행하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 구조물은 프리-전송 기능을 가지고,
상기 프로세서 코어는 이전 스테이지 프로세서 코어와 연관된 로컬 데이터 메모리로부터 데이터를 로드하고,
상기 데이터는 상기 현재 스테이지 프로세서 코어에서 판독 및 기입에 필요하지 않으나, 하부 스테이지 프로세서 코어에서 로드 및 저장에 필요하고, 상기 현재 스테이지 프로세서 코어와 연관된 로컬 데이터 메모리에 기입되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 제1 구성 가능한 로컬 메모리 및 제2 구성 가능한 로컬 메모리 모두의 항목(entry)은 데이터 부분, 상기 데이터 부분의 유효 여부를 나타내는 유효 플래그, 및 상기 데이터가 상기 제1 및 제2 프로세서 코어들 중 어느 것에 의해 사용되는지를 나타내는 유효성 플래그를 포함하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 프로세서 코어는 자신을 제외한 다른 프로세서 코어들의 로컬 명령 메모리를 접근하고,
복수의 프로세서 코어들은,
동일한 코드의 코드 세그먼트들을 병렬로 각각 실행하고, 서로 다른 코드의 코드 세그먼트들을 병렬로 각각 실행하거나,
동일한 코드의 코드 세그먼트들을 직렬로 각각 실행하고, 서로 다른 코드의 코드 세그먼트들을 직렬로 각각 실행하거나,
동일한 코드의 코드 세그먼트들을 직병렬 조합된 방식으로 각각 실행하고, 서로 다른 코드의 코드 세그먼트들을 직병렬 조합된 방식으로 각각 실행하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
프로세서 코어들과 연관된 하나 또는 복수의 로컬 메모리들은 고성능 멀티-코어 연결 구조물을 형성하고, 이 구조물을 구성한 후, 상응하는 코드 세그먼트를 로컬 명령 메모리들에 저장함으로써, 상기 멀티-코어 연결 구조물이 특정한 기능을 실현하고,
상기 멀티 코어 구조물은 시스템-온-칩(SOC)의 기능 모듈들에 상응하며,
복수의 기능 모듈들은 상기 기능 모듈들 사이의 데이터 전송 경로에 의해 연결되어 상기 SOC 시스템을 구성하고,
상기 데이터 전송 경로는 기존의 SOC 시스템의 시스템 버스에 상응하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제31 항에 있어서,
상기 구성 가능한 상호 연결 구조물을 통하여, 서로 데이터 전송 관계를 가지는 복수의 프로세서 코어들의 입력 및 출력들이 복수의 연결들을 미리 설정하거나, 동적으로 설정하고,
상기 버스 연결 모듈들 사이의 다중 데이터 경로들이 시스템 버스를 구성하고,
상기 다중 데이터 경로들은, 기존 SOC 시스템의 시스템 버스 구조물의 데이터 경로와 동일한 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제31 항에 있어서,
프로세서 코어 및 연관된 로컬 메모리는 동적으로 구성되고,
상기 로컬 메모리에 저장된 코드 세그먼트는 동적으로 변경되며,
상기 동적 구성 및 상기 동작 변경에 의해 SOC 시스템의 기능이 변경되는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제7 항에 있어서,
상기 프로세서 코어는, 가지 점프가 실행되는지 여부를 판단하는 고속 조건 판단 장치를 가지고,
상기 고속 조건 판단 장치는, 루프 조건을 판단하는 카운터이거나, 가지 점프 및 루프 조건을 판단하는 유한 상태 머신(FSM)인 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 프로세서 코어는 복수의 로컬 명령 메모리들과 관련되고,
하나 또는 그 이상의 메모리들이 로드 명령 실행에 응답하도록 사용될 때, 다른 로컬 명령 메모리는 명령 업데이트를 실행하는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
복수의 프로세서 코어들은 동일한 클록 주파수를 가지거나, 서로 다른 클록 주파수들을 가지는 것을 특징으로 하는 구성 가능한 멀티-코어 구조물. - 제5 항에 있어서,
상기 구조물은 하나 또는 복수의 전용 기능 모듈들을 포함하고,
상기 전용 기능 모듈은 상기 프로세서 코어에 의해 호출되는 매크로 모듈이거나, 상기 프로세서 코어의 출력을 수신하고 동일한 프로세서 코어에 처리 결과를 전송하는 독립된 처리 모듈이고,
데이터를 송수신하는 상기 프로세서 코어들은 동일한 프로세서 코어이거나 서로 다른 프로세서 코어들인 것을 특징으로 하는 구성 가능한 멀티-코어 구조물.
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810203778.7 | 2008-11-28 | ||
CN200810203777.2 | 2008-11-28 | ||
CN200810203777A CN101751280A (zh) | 2008-11-28 | 2008-11-28 | 针对多核/众核处理器程序分割的后编译系统 |
CN200810203778A CN101751373A (zh) | 2008-11-28 | 2008-11-28 | 基于单一指令集微处理器运算单元的可配置多核/众核系统 |
CN200910046117.2 | 2009-02-11 | ||
CN200910046117 | 2009-02-11 | ||
CN200910208432.0A CN101799750B (zh) | 2009-02-11 | 2009-09-29 | 一种数据处理的方法与装置 |
CN200910208432.0 | 2009-09-29 | ||
PCT/CN2009/001346 WO2010060283A1 (zh) | 2008-11-28 | 2009-11-30 | 一种数据处理的方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110112810A true KR20110112810A (ko) | 2011-10-13 |
KR101275698B1 KR101275698B1 (ko) | 2013-06-17 |
Family
ID=42225216
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117014902A KR101275698B1 (ko) | 2008-11-28 | 2009-11-30 | 데이터 처리 방법 및 장치 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20110231616A1 (ko) |
EP (1) | EP2372530A4 (ko) |
KR (1) | KR101275698B1 (ko) |
WO (1) | WO2010060283A1 (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200140229A (ko) * | 2020-02-17 | 2020-12-15 | (주)티앤원 | 학습용 무선 마이크로컨트롤러 키트 |
KR102246797B1 (ko) * | 2019-11-07 | 2021-04-30 | 국방과학연구소 | 명령 코드 생성을 위한 장치, 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램 |
US12019918B2 (en) | 2019-07-02 | 2024-06-25 | Samsung Electronics Co., Ltd. | Storage device with reduced communication overhead using hardware logic |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2751388A1 (en) * | 2011-09-01 | 2013-03-01 | Secodix Corporation | Method and system for mutli-mode instruction-level streaming |
CN102646059B (zh) * | 2011-12-01 | 2017-10-20 | 中兴通讯股份有限公司 | 多核处理器系统的负载平衡处理方法及装置 |
US9465619B1 (en) * | 2012-11-29 | 2016-10-11 | Marvell Israel (M.I.S.L) Ltd. | Systems and methods for shared pipeline architectures having minimalized delay |
US9032256B2 (en) * | 2013-01-11 | 2015-05-12 | International Business Machines Corporation | Multi-core processor comparison encoding |
CN104102475B (zh) * | 2013-04-11 | 2018-10-02 | 腾讯科技(深圳)有限公司 | 分布式并行任务处理的方法、装置及系统 |
WO2015050474A1 (en) * | 2013-10-03 | 2015-04-09 | Huawei Technologies Co., Ltd | Method and system for assigning a computational block of a software program to cores of a multi-processor system |
US9294097B1 (en) | 2013-11-15 | 2016-03-22 | Scientific Concepts International Corporation | Device array topology configuration and source code partitioning for device arrays |
US9698791B2 (en) | 2013-11-15 | 2017-07-04 | Scientific Concepts International Corporation | Programmable forwarding plane |
US10326448B2 (en) | 2013-11-15 | 2019-06-18 | Scientific Concepts International Corporation | Code partitioning for the array of devices |
US9460012B2 (en) | 2014-02-18 | 2016-10-04 | National University Of Singapore | Fusible and reconfigurable cache architecture |
CN103955406A (zh) * | 2014-04-14 | 2014-07-30 | 浙江大学 | 一种基于超级块的投机并行化方法 |
DE102015208607A1 (de) * | 2015-05-08 | 2016-11-10 | Minimax Gmbh & Co. Kg | Gefahrensignalerfassungs- und Löschsteuerzentrale |
US10318356B2 (en) * | 2016-03-31 | 2019-06-11 | International Business Machines Corporation | Operation of a multi-slice processor implementing a hardware level transfer of an execution thread |
US10055155B2 (en) * | 2016-05-27 | 2018-08-21 | Wind River Systems, Inc. | Secure system on chip |
US20180259576A1 (en) * | 2017-03-09 | 2018-09-13 | International Business Machines Corporation | Implementing integrated circuit yield enhancement through array fault detection and correction using combined abist, lbist, and repair techniques |
WO2019089918A1 (en) * | 2017-11-03 | 2019-05-09 | Coherent Logix, Inc. | Programming flow for multi-processor system |
EP4085354A4 (en) * | 2019-12-30 | 2024-03-13 | Star Ally International Limited | PROCESSOR FOR CONFIGURABLE PARALLEL CALCULATIONS |
US11734017B1 (en) | 2020-12-07 | 2023-08-22 | Waymo Llc | Methods and systems for processing vehicle sensor data across multiple digital signal processing cores virtually arranged in segments based on a type of sensor |
US11782602B2 (en) | 2021-06-24 | 2023-10-10 | Western Digital Technologies, Inc. | Providing priority indicators for NVMe data communication streams |
US11960730B2 (en) | 2021-06-28 | 2024-04-16 | Western Digital Technologies, Inc. | Distributed exception handling in solid state drives |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4089059A (en) * | 1975-07-21 | 1978-05-09 | Hewlett-Packard Company | Programmable calculator employing a read-write memory having a movable boundary between program and data storage sections thereof |
SE448680B (sv) * | 1984-05-10 | 1987-03-16 | Duma Ab | Doseringsanordning till en injektionsspruta |
CA2143145C (en) * | 1994-04-18 | 1999-12-28 | Premkumar Thomas Devanbu | Determining dynamic properties of programs |
US5732209A (en) * | 1995-11-29 | 1998-03-24 | Exponential Technology, Inc. | Self-testing multi-processor die with internal compare points |
US7080238B2 (en) * | 2000-11-07 | 2006-07-18 | Alcatel Internetworking, (Pe), Inc. | Non-blocking, multi-context pipelined processor |
EP1205840B1 (en) * | 2000-11-08 | 2010-07-14 | Altera Corporation | Stall control in a processor with multiple pipelines |
US7062641B1 (en) * | 2001-01-10 | 2006-06-13 | Cisco Technology, Inc. | Method and apparatus for unified exception handling with distributed exception identification |
US6757761B1 (en) * | 2001-05-08 | 2004-06-29 | Tera Force Technology Corp. | Multi-processor architecture for parallel signal and image processing |
US20030046429A1 (en) * | 2001-08-30 | 2003-03-06 | Sonksen Bradley Stephen | Static data item processing |
CN1275143C (zh) * | 2003-06-11 | 2006-09-13 | 华为技术有限公司 | 数据处理系统及方法 |
US20050177679A1 (en) * | 2004-02-06 | 2005-08-11 | Alva Mauricio H. | Semiconductor memory device |
EP1619584A1 (en) * | 2004-02-13 | 2006-01-25 | Jaluna SA | Memory allocation |
US20070083785A1 (en) * | 2004-06-10 | 2007-04-12 | Sehat Sutardja | System with high power and low power processors and thread transfer |
US7536567B2 (en) * | 2004-12-10 | 2009-05-19 | Hewlett-Packard Development Company, L.P. | BIOS-based systems and methods of processor power management |
ATE393932T1 (de) * | 2004-12-22 | 2008-05-15 | Galileo Avionica Spa | Rekonfigurierbares mehrprozessorsystem besonders zur digitalen verarbeitung von radarbildern |
US7689867B2 (en) * | 2005-06-09 | 2010-03-30 | Intel Corporation | Multiprocessor breakpoint |
US7793278B2 (en) * | 2005-09-30 | 2010-09-07 | Intel Corporation | Systems and methods for affine-partitioning programs onto multiple processing units |
US8104030B2 (en) * | 2005-12-21 | 2012-01-24 | International Business Machines Corporation | Mechanism to restrict parallelization of loops |
US7689838B2 (en) * | 2005-12-22 | 2010-03-30 | Intel Corporation | Method and apparatus for providing for detecting processor state transitions |
US7784037B2 (en) * | 2006-04-14 | 2010-08-24 | International Business Machines Corporation | Compiler implemented software cache method in which non-aliased explicitly fetched data are excluded |
US20070250825A1 (en) * | 2006-04-21 | 2007-10-25 | Hicks Daniel R | Compiling Alternative Source Code Based on a Metafunction |
US7797563B1 (en) * | 2006-06-09 | 2010-09-14 | Oracle America | System and method for conserving power |
US8589666B2 (en) * | 2006-07-10 | 2013-11-19 | Src Computers, Inc. | Elimination of stream consumer loop overshoot effects |
JP4756553B2 (ja) * | 2006-12-12 | 2011-08-24 | 株式会社ソニー・コンピュータエンタテインメント | 分散処理方法、オペレーティングシステムおよびマルチプロセッサシステム |
US7665000B2 (en) * | 2007-03-07 | 2010-02-16 | Intel Corporation | Meeting point thread characterization |
-
2009
- 2009-11-30 WO PCT/CN2009/001346 patent/WO2010060283A1/zh active Application Filing
- 2009-11-30 EP EP09828544A patent/EP2372530A4/en not_active Withdrawn
- 2009-11-30 KR KR1020117014902A patent/KR101275698B1/ko active IP Right Grant
-
2011
- 2011-05-27 US US13/118,360 patent/US20110231616A1/en not_active Abandoned
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12019918B2 (en) | 2019-07-02 | 2024-06-25 | Samsung Electronics Co., Ltd. | Storage device with reduced communication overhead using hardware logic |
KR102246797B1 (ko) * | 2019-11-07 | 2021-04-30 | 국방과학연구소 | 명령 코드 생성을 위한 장치, 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램 |
KR20200140229A (ko) * | 2020-02-17 | 2020-12-15 | (주)티앤원 | 학습용 무선 마이크로컨트롤러 키트 |
Also Published As
Publication number | Publication date |
---|---|
EP2372530A1 (en) | 2011-10-05 |
KR101275698B1 (ko) | 2013-06-17 |
US20110231616A1 (en) | 2011-09-22 |
WO2010060283A1 (zh) | 2010-06-03 |
EP2372530A4 (en) | 2012-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101275698B1 (ko) | 데이터 처리 방법 및 장치 | |
Garland et al. | Understanding throughput-oriented architectures | |
US8782645B2 (en) | Automatic load balancing for heterogeneous cores | |
US7028170B2 (en) | Processing architecture having a compare capability | |
US8683468B2 (en) | Automatic kernel migration for heterogeneous cores | |
US9672035B2 (en) | Data processing apparatus and method for performing vector processing | |
CN101799750B (zh) | 一种数据处理的方法与装置 | |
EP2056212B1 (en) | Mixed mode parallel processor system and method | |
US20150234660A1 (en) | Processor-cache system and method | |
RU2612597C1 (ru) | Процессоры, способы, системы и команды с предикацией элементов упакованных данных | |
US10678541B2 (en) | Processors having fully-connected interconnects shared by vector conflict instructions and permute instructions | |
US20120331278A1 (en) | Branch removal by data shuffling | |
Jin et al. | Fast: Fpga-based subgraph matching on massive graphs | |
JP6502616B2 (ja) | バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 | |
CN103197916A (zh) | 用于源操作数收集器高速缓存的方法和装置 | |
RU2639695C2 (ru) | Процессоры, способы и системы для осуществления доступа к набору регистров либо как к множеству малых регистров, либо как к объединенному большому регистру | |
CN112732639B (zh) | 一种粗粒度动态可重构处理器及其数据处理方法 | |
CN105027075A (zh) | 具有共享前端单元的处理核 | |
US7617494B2 (en) | Process for running programs with selectable instruction length processors and corresponding processor system | |
Moeng et al. | ContextPreRF: Enhancing the performance and energy of GPUs with nonuniform register access | |
EP4211553A1 (en) | Method of interleaved processing on a general-purpose computing core | |
US20040236929A1 (en) | Logic circuit and program for executing thereon | |
US20100115234A1 (en) | Configurable vector length computer processor | |
CN112463218B (zh) | 指令发射控制方法及电路、数据处理方法及电路 | |
US10620958B1 (en) | Crossbar between clients and a cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20160607 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170609 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20190611 Year of fee payment: 7 |