KR100888675B1 - Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core - Google Patents

Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core Download PDF

Info

Publication number
KR100888675B1
KR100888675B1 KR1020070016244A KR20070016244A KR100888675B1 KR 100888675 B1 KR100888675 B1 KR 100888675B1 KR 1020070016244 A KR1020070016244 A KR 1020070016244A KR 20070016244 A KR20070016244 A KR 20070016244A KR 100888675 B1 KR100888675 B1 KR 100888675B1
Authority
KR
South Korea
Prior art keywords
code
execution
thread
access
multi
Prior art date
Application number
KR1020070016244A
Other languages
Korean (ko)
Other versions
KR20080076392A (en
Inventor
김선욱
김아름
뉴엔띠훙쨩
오재근
황석중
Original Assignee
고려대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 고려대학교 산학협력단 filed Critical 고려대학교 산학협력단
Priority to KR1020070016244A priority Critical patent/KR100888675B1/en
Publication of KR20080076392A publication Critical patent/KR20080076392A/en
Application granted granted Critical
Publication of KR100888675B1 publication Critical patent/KR100888675B1/en

Links

Images

Abstract

임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법이 개시된다. This way a multi-threaded execution is started from the processor and the embedded core extended to the multi-thread execution in the embedded core.
본 발명은 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출하는 명령어 패치부, 상기 인출된 코드들을 디코드하고, 상기 인출된 코드들의 실행 순서를 설정하는 디코드부, 상기 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행하는 복수의 실행부, 상기 디코드부를 위한 명령어 정보를 저장하는 스패셜 레지스터 및 시리얼 코드 영역에서는 전체 영역을 사용하고, 패러럴 코드 영역에서는 각각의 쓰레드를 위해 분할된 영역을 사용하는 범용 레지스터를 포함한다. The present invention is a command fetch unit to fetch the code from the instruction memory made of multiple threads, wherein the fetched code, the decoding, the decoding unit to set the order of execution of the fetched code, the set, each thread in accordance with the order of execution the plurality of execution units, seupaesyeol register and a serial code area for storing command information for parts of the decoding to execute code for using the total area and, in the parallel code area the general-purpose register to use the divided regions for each thread It includes.
본 발명에 의하면, CMP의 성능을 유지하는 상태에서 전력 소모량을 줄이고, 프로세서의 면적을 줄여 제조가 용이하다. According to the invention, to reduce power consumption while maintaining the performance of CMP, it is easy to manufacture by reducing the area of ​​the processor.

Description

임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법 {Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core} How to run multiple threads in the processor core and embedded extended to multi-threaded embedded cores running at {Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core}

도 1은 본 발명의 위치를 기술 트리로 나타낸 것이다. Figure 1 shows the location of the invention in a technology tree.

도 2a는 본 발명이 적용되는 임베디드 어플리케이션에서 같은 코드가 실행되는 경우와 컨트롤 플로우가 달라지는 경우의 스피드업을 도시한 것이다. Figure 2a shows a speed-up in the case where the control flow varies if the code is running on the same embedded application to which the present invention is applied.

도 2b는 본 발명이 적용되는 임베디드 어플리케이션에서 시리얼과 패러럴 영역에서 실제 실행되는 명령어의 분포를 도시한 것이다. Figure 2b shows a distribution of commands that are actually running on the serial and parallel regions in embedded applications to which the present invention is applied.

도 3은 본 발명의 일 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서의 블럭도이다. 3 is a block diagram of an extended processor for executing multiple threads also embedded in the core in accordance with one embodiment of the present invention.

도 4는 본 발명의 다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서의 블럭도이다. Figure 4 is a block diagram of the extended processor for executing multiple threads in the embedded core according to another embodiment of the present invention.

도 5는 본 발명의 또다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서의 블럭도이다. Figure 5 is a block diagram of an extended processor for executing multiple threads also embedded in the core according to another embodiment of the present invention.

도 6은 도 5에 적용되는 더블링 데이터 캐쉬 인터페이스의 블럭도이다. Figure 6 is a block diagram of doubling the data cache interface are applied in FIG.

도 7은 본 발명의 또다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행 방법의 흐름도이다. 7 is a flow chart of executing a multi-threaded manner in the embedded core according to another embodiment of the present invention.

도 8은 본 발명의 또다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행 방법의 흐름도이다. 8 is a flow chart of executing a multi-threaded manner in the embedded core according to another embodiment of the present invention.

도 9는 본 발명에 따른 명령어 부하를 도시한 것이다. 9 illustrates a load instruction in accordance with the present invention.

본 발명은 임베디드 프로세서에 관한 것으로, 특히, 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법에 관한 것이다. The present invention relates to that, in particular, multi-threaded execution method in a processor and the embedded core extended to the multi-thread execution in the embedded core of the embedded processor.

임베디드 프로세서는 일반적인 데이터 처리용 프로세서와 비교하여 보았을 때 저가, 저전력이 중요한 부분을 차지한다. The embedded processor occupies a low cost, low power is important as seen in comparison with a processor for general data processing. 수행 프로그램이 ROM의 형태로 저장된다. The program execution is stored in the form of a ROM. ROM에 저장되는 내장형 프로세서 분야에서 수행 프로그램의 크기를 효과적으로 줄임으로 다이(die)에 있어서 많은 크기를 차지하는 ROM의 크기를 줄일 수 있으므로 좀더 저가의 내장형 시스템을 공급할 수 있다. In the field of embedded processors that are stored in the ROM effectively reducing the size of the programs carried out in the die (die) can reduce the size of the ROM occupies a large size can provide more low-cost embedded systems.

EISC(Extendable Instruction Set Computer)는 수행 프로그램의 크기 및 메모리 접근의 회수를 매우 효과적으로 줄일 수 있도록 설계된 명령어 셋으로서, 확장 명령어를 이용하여 명령어의 즉치 값 및 변위 등의 값을 자유롭게 확장할 수 있는 형태를 지닌 아키텍쳐로서 종래의 CISC와 RISC의 장점을 합친 형태를 취하고 있다. EISC (Extendable Instruction Set Computer) is a command set designed to be a very effective way of reducing the number of sizes, and a memory access of the program execution, the type that can use the extended instruction can freely expand values ​​such as an immediate value and the displacement of the instruction as with the architecture takes the form combines the advantages of the conventional CISC and RISC.

EISC는 기본적으로 RISC가 갖고 있는 간단한 구조의 하드웨어를 취하면서도 CISC의 장점을 추가하여 높은 성능을 갖게 하였고, 코드 밀도가 높아 종래의 RISC 프로세서와 비교하여 약 60%, CISC 프로세서와 비교하여 약 80% 정도로 프로그램 크기가 작다는 장점을 지니고 있다. EISC is, while taking the hardware of a simple structure, with a RISC basically had to have a high performance by adding the advantages of CISC, about 60% higher code density as compared with the conventional RISC processor, as compared with the CISC processor 80% the program is small in size, so has the advantage. 따라서, 코드 밀도가 중시되는 내장형 응용 분야에 있어서 강점을 지니고 있다. Therefore, it has its strengths in embedded applications where code density is critical.

종래의 CISC (Complex Instruction Set Computer) 기반의 마이크로 프로세서는 코드 밀도에 있어서 장점이 있으나 고속화에 문제점을 지니고 있으며, RISC(Reduce Instruction Set Computer)기반의 마이크로 프로세서는 대부분 32-bit 크기의 명령어를 지님으로 프로그램 코드의 크기가 지나치게 커진다는 단점을 지니고 있다. Conventional CISC (Complex Instruction Set Computer) based microprocessors with jinim to, but is an advantage, and has a problem on high-speed, RISC (Reduce Instruction Set Computer) based microprocessors are mostly 32-bit size command of the Code Density It has the disadvantage that the size of the program code is too large. EISC기반의 32-bit 마이크로 프로세서인 AE32000은 16-bit 크기의 명령어를 이용하여 32-bit 데이터를 효과적으로 처리할 수 있도록 설계되었다. EISC the basis of 32-bit microprocessors AE32000 is designed to efficiently handle 32-bit data by using the command of the 16-bit size.

이는 ARM사의 Thumb계열의 프로세서나 MIPS16에서도 채택하고 있는 방법이나, EISC 아키텍쳐의 경우 16-bit 크기의 명령어 사용으로 인한 즉치 값(immediate value) 공간의 부족을 이전의 접근 방식과는 다르게 독립적으로 사용 가능한 LERI(Load Extension Register with Immediate data) 명령을 이용하는 것으로 해결하였다. This is the case of the method that is employed in a processor or MIPS16 of Thumb series ARM's or, EISC Architecture 16-bit immediate values ​​from the use instructions of the size (immediate value) different from the lack of space and the previous approach of using independent as possible was resolved by using LERI (Load Extension Register with Immediate data) command.

LERI명령은 2비트 Op-Code와 14비트 즉치 값을 가지는 명령으로서 ER(Extension Register)에 즉치 값을 저장하고, 이후에 즉치 값의 확장이 필요한 명령에서 ER의 값을 인출하여 해당 명령어의 즉치 값과 덧붙이는 구조를 지니고 있다. LERI commands are two-bit Op-Code and 14 bit as a command having an immediate value stored for immediate values ​​in (Extension Register) ER and in need of immediate values ​​expansion after the command to fetch the value of ER immediate value of the instruction and adding may have a structure. 이러한 구조의 장점은 짧은 즉치 값 크기로 인하여 발생 가능한 문제를 효과적으로 해결 할 수 있다는 것이나, LERI의 부가로 인하여 코드의 길이가 길어질 수 있다는 문제와 성능의 저하를 가져 올 수 있다는 문제를 지니고 있다. The advantage of this structure is that it can solve the problems that would occur due to a short immediate value size effectively, it has a problem that it can lengthen the length of the cord due to the additional LERI problems and can bring performance degradation. 따라서, EISC기반의 프로세서는 이 LERI를 효과적으로 처리하는 것이 중요하다. Thus, EISC based processors, it is important to effectively handle the LERI.

AE32000은 EISC기반의 32-bit 마이크로 프로세서로서 Low-End용 32-bit 마이크로 프로세서인 SE3208의 특징에 부가적으로 더 깊은 파이프라인과 OSI(On-Silicon In Circuit Emulator) 지원 기능, 캐쉬 및 가상 메모리의 지원기능, LERI 명령어 폴딩 기능등을 추가하여 성능을 향상시킨 프로세서이다. AE32000 is a 32-bit microprocessor of the EISC-based Low-End 32-bit microprocessor in addition to the features of SE3208 ever deeper pipeline and OSI (On-Silicon In Circuit Emulator) support, the cache and the virtual memory for a support, LERI instruction processor having improved performance by adding features such as folding.

그러나, 종래의 멀티 쓰레드 환경에서의 코드 생성에 대한 프로세서는 2개의 코어를 가진 CMP(Chip Multi Processor)로 전력 소모량이 커서 임베디드 시스템에 적합하지 못하고, 면적이 크며, 제조가 용이하지 않은 문제점이 있다. However, the processor of the code generation in the conventional multi-threaded environment, the power consumption by CMP (Chip Multi Processor) having two cores cursor do not suitable for embedded systems, large area, there is not produced a not easy problem .

따라서, 본 발명이 이루고자 하는 첫번째 기술적 과제는 CMP의 성능을 유지하는 상태에서 전력 소모량을 줄이고, 면적을 줄여 제조가 용이한 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서를 제공하는 데 있다. Accordingly, the first object of the present invention is to provide an extended processor for executing multiple threads in reducing the power consumption while keeping the performance of the CMP, which reduces the area of ​​embedded core is easy to manufacture.

본 발명이 이루고자 하는 두번째 기술적 과제는 상기의 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서에 적용된 임베디드 코어에서 멀티 쓰레드 실행 방법을 제공하는 데 있다. The second object of the present invention is to provide a multi-threaded execution method in the embedded core is applied to the extended processor for executing multiple threads in the embedded core of the.

상기의 첫번째 기술적 과제를 이루기 위하여, 본 발명은 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출하는 명령어 패치부, 상기 인출된 코드들을 디코드하고, 상기 인출된 코드들의 실행 순서를 설정하는 디코드부, 상기 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행하는 복수의 실행부, 상기 디코드부를 위한 명령어 정보를 저장하는 스패셜 레지스터 및 시리얼 코드 영역에서는 전체 영역이 사용되고, 패러럴 코드 영역에서는 각각의 쓰레드를 위해 분할된 영역이 사용되는 범용 레지스터를 포함하는 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서를 제공한다. In order to achieve the first aspect of the present invention is a command fetch unit to fetch the code from the instruction memory manufactured with a multi-threaded, the decoding unit for the decoding of the fetched code, and set the order of execution of the fetched code, the according to the set execution order in the plurality of execution units, seupaesyeol register and a serial code area for storing command information for parts of the decoding to execute code for each thread the whole area is used, the parallel code area divided for each thread embedded in the core containing the general purpose register is the area that is used to provide an extended processor for multi-threaded execution.

또한, 상기의 첫번째 기술적 과제를 이루기 위하여, 본 발명은 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출하는 명령어 패치부, 상기 인출된 코드들을 디코드하고, 상기 인출된 코드들의 실행 순서를 설정하는 디코드부, 상기 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행하는 복수의 실행부, 상기 디코드부를 위한 명령어 정보를 저장하는 스패셜 레지스터 및 시리얼 코드 영역에서는 전체 영역이 사용되고, 패러럴 코드 영역에서는 각각의 쓰레드를 위해 분할된 영역이 사용되는 범용 레지스터를 포함하고, 상기 복수의 실행부는 싱글 포트 캐쉬를 이용하고, 2개 이상의 쓰레드가 동시에 상기 싱글 포트 캐쉬에 접근하는 경우, 이웃한 어드레스에 대한 접근을 한번의 접근으로 처리하는 더블링 데이터 캐쉬 인터페이스를 포함 Further, to achieve the first aspect, the present invention provides instructions to fetch the code produced by multi-thread from the instruction memory fetch unit, decoding unit, which decodes said fetched code, setting the execution order of the retrieved code in seupaesyeol register and a serial code area for storing a plurality of execution unit, the instruction information for parts of the decoder to execute the code for the respective threads according to the set execution order in which the entire region is being used, the parallel code area for each thread the partition includes a general purpose register to be used for, and if the plurality of execution unit that uses a single-port cache, and two or more threads access at the same time on the single port cache, once access to the access to the neighboring address to process the data cache interface, including doubling 는 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서를 제공한다. Provides an extended multi-threaded processors to run on the embedded core.

한편, 상기의 두번째 기술적 과제를 이루기 위하여, 본 발명은 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출하는 단계, 명령어 정보를 저장하는 스패셜 레지스터를 이용하여 상기 인출된 코드들을 디코드하고, 상기 인출된 코드들에 2개 이상의 쓰레드에서 컨트롤 플로우를 분기시키는 명령어가 존재하는 경우 각각의 쓰레드 간의 순서를 설정하는 단계, 및 싱글 포트 캐쉬를 이용하는 복수의 실행부를 이용하여 상기 설정된 실행 순서에 따라 상기 각각의 쓰레드에 대한 코드를 실행하고, 2개 이상의 쓰레드가 동시에 상기 싱글 포트 캐쉬에 접근하는 경우, 이웃한 어드레스에 대한 접근을 한번의 접근으로 처리하는 단계를 포함하는 임베디드 코어에서 멀티 쓰레드 실행 방법을 제공한다. On the other hand, in order to achieve the second aspect of the present invention is by using the withdrawing of the code produced by multi-thread from the instruction memory, seupaesyeol register for storing instruction information, and decodes the take-code, the retrieved code If an instruction for branching the control flow in more than one thread exists, according to the execution order of the set by using each of the steps for setting up the order among threads, and a plurality of execution using a single port cache to the respective threads in the when more than one run of the code, and the second thread is at the same time access to said single-port cache, provides a multi-threaded execution method comprising the step of processing the access to the neighboring address to access one of the embedded core.

삭제 delete

이하에서는 도면을 참조하여 본 발명의 바람직한 실시예를 설명하기로 한다. Hereinafter, with reference to the drawings it will be described a preferred embodiment of the present invention. 그러나, 다음에 예시하는 본 발명의 실시예는 여러 가지 다른 형태로 변형될 수 있으며, 본 발명의 범위가 다음에 상술하는 실시예에 한정되는 것은 아니다. However, embodiments of the invention illustrated in the following can be modified in many different forms, but the scope of the present invention is not limited to the embodiments described in the following.

도 1은 본 발명의 위치를 기술 트리로 나타낸 것이다. Figure 1 shows the location of the invention in a technology tree.

본 발명의 동기는 다음의 세 가지를 들 수 있다. Synchronization of the present invention include the following three. 첫 번째로 임베디드 어플리케이션은 높은 병렬성을 가지고, 두 번째로 이 병렬성을 가진 코드가 전체 실행시간의 대부분을 차지하며 그리고 마지막으로 쓰레드들은 대부분의 경우 같은 코드를 실행한다는 것이다. First embedded applications is that they have a high parallelism, the parallelism in the code with a second account for the majority of the total running time, and the last threads are running the same code in most cases.

도 2a는 본 발명이 적용되는 임베디드 어플리케이션에서 같은 코드가 실행되는 경우와 컨트롤 플로우가 달라지는 경우의 스피드업을 도시한 것이다. Figure 2a shows a speed-up in the case where the control flow varies if the code is running on the same embedded application to which the present invention is applied.

도 2a 은 Amdahls's Law를 사용하여 계산된 스피드업(speedup)이다. Figure 2a is a speed-up (speedup) calculated using Amdahls's Law. 동일함(Same) 의 경우 전체 실행시간에서 같은 코드 영역이 실행되는 경우의 스피드업이고 다름(Different)의 경우에는 if-else/switch 와 같이 콘트롤 플로우가 달라질 수 있을 경우를 의미한다. For they are the same (Same) In the case of speed-up and the difference (Different) when the code domain, such as in the overall execution time is executed, it means a case where there is a control flow as in the if-else / switch may vary. 도 2a를 통해 conven 과 viterb 를 제외한 대부분의 벤치마크 프로그램에서 같은 코드 영역을 실행하는 것을 볼 수 있다. Through Fig. 2a it can be seen that running the code area like in most of the benchmark programs except the conven viterb.

도 2b는 본 발명이 적용되는 임베디드 어플리케이션에서 시리얼과 패러럴 영역에서 실제 실행되는 명령어의 분포를 도시한 것이다. Figure 2b shows a distribution of commands that are actually running on the serial and parallel regions in embedded applications to which the present invention is applied.

도 2b는 각 벤치마크 프로그램에서 명령어가 패러럴 영역에 속하는지 시리얼 코드 영역에 속하는 지를 보여주는 분포이다. Figure 2b is a distribution showing that whether the instruction belongs to a parallel area on each benchmark program belongs to a serial code area. 그래프에서 병렬-브랜치( P_branch )에 해당하는 명령어가 매우 적은 것을 볼 수 있으며 컨트롤 플로우가 달라질 가능성 또한 매우 작다는 것을 알 수 있다. Parallel in the graph - to see that the instruction for the branch (P_branch) very little, and it can be seen that the possibility of different flow control is also very small.

도 3은 본 발명의 일 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서의 블럭도이다. 3 is a block diagram of an extended processor for executing multiple threads also embedded in the core in accordance with one embodiment of the present invention.

명령어 패치부(310)는 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인 출한다. Command fetch unit 310 and the output of the code produced by multi-thread from the instruction memory.

디코드부(320)는 인출된 코드들을 디코드하고, 인출된 코드들의 실행 순서를 설정한다. The decoding unit 320 sets the execution order of the decoding of the fetched code, code fetch.

복수의 실행부(331, 332)는 디코드부(320)에서 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행한다. A plurality of execution unit 331, 332 executes the code for each thread based on the execution order that is set in the decoding section 320. The

스패셜 레지스터(321)는 디코드부(320)를 위한 명령어 정보를 저장한다. Seupaesyeol register 321 stores the instruction information to the decoding section 320. The 구성의 일 예로, 스패셜 레지스터(321)는 복수개로 구성될 수 있다. An example of the configuration, seupaesyeol register 321 may be composed of a plurality.

범용 레지스터(329)는 시리얼 코드 영역에서는 전체 영역을 사용하고, 패러럴 코드 영역에서는 각각의 쓰레드를 위해 분할된 영역을 사용한다. A general purpose register 329 is in the serial code area using the entire region, parallel code area uses a partition for each thread. 이때, 패러럴 코드 영역에서 복수의 실행부(331, 332)가 범용 레지스터를 2개 이상으로 분할된 영역으로 인식하게 하는 리네임부가 범용 레지스터(329)를 제어할 수 있다. At this time, it is possible to throttle the Rhine to recognize a plurality of execution units (331, 332) is divided into a general register of two or more regions in the parallel region of code to control a general-purpose register 329.

도 4는 본 발명의 다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서의 블럭도이다. Figure 4 is a block diagram of the extended processor for executing multiple threads in the embedded core according to another embodiment of the present invention.

명령어 패치부(410)는 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출한다. Instruction fetch unit 410 fetches the codes produced by multi-thread from the instruction memory.

디코드부(420)는 인출된 코드들을 디코드하고, 인출된 코드들의 실행 순서를 설정한다. The decoding unit 420 sets the execution order of the decoding of the fetched code, code fetch.

쓰레드 제어부(425)는 2개 이상의 쓰레드에서 컨트롤 플로우를 분기시키는 명령어가 존재하는 경우 각각의 쓰레드의 순서를 설정하는 를 포함할 수 있다. Thread control unit 425 when a command for branching the control flow exist in more than one thread may include setting the order in each thread. 이때, 디코드부(420)는 병렬 실행을 시작, 병렬 실행을 종료, 변수에 락을 걸어서 다 른 쓰레드가 사용하지 못하게 함, 변수의 락을 해제, 2개 이상의 쓰레드가 다른 컨트롤 플로우일 때 동기화, 쓰레드의 아이디를 제공을 포함하는 명령어 셋을 저장하고, 명령어 셋을 이용하여 인출된 코드들을 해석할 수 있다. At this time, the decoding unit 420 starts parallel execution, the foot to terminate the parallel operation, the lock in a variable other box thread is unavailable, unlock the variables, the synchronization time is more than one thread a different control flows, storing the instruction set for the identity of the thread including the service, and can interpret the code fetched by the instruction set.

복수의 실행부(431, 432)는 디코드부(420)에서 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행한다. A plurality of execution units (431, 432) executes the code for each thread based on the execution order that is set in the decoding section 420. The 이때, 복수의 실행부(431, 432)는 도 6과 같은 더블링 데이터 캐쉬 인터페이스를 포함할 수 있다. At this time, the plurality of execution units (431, 432) may include doubling the data cache interface, such as FIG.

스패셜 레지스터(421)는 디코드부(420)를 위한 명령어 정보를 저장한다. Seupaesyeol register 421 stores the instruction information to the decoding section 420. The 구성의 일 예로, 스패셜 레지스터(421)는 복수개로 구성될 수 있다. An example of the configuration, seupaesyeol register 421 may be composed of a plurality.

범용 레지스터(429)는 시리얼 코드 영역에서는 전체 영역을 사용하고, 패러럴 코드 영역에서는 각각의 쓰레드를 위해 분할된 영역을 사용한다. General-purpose registers 429 in the serial code area using the entire region, parallel code area uses a partition for each thread. 이때, 패러럴 코드 영역에서 복수의 실행부(431, 432)가 범용 레지스터를 2개 이상으로 분할된 영역으로 인식하게 하는 리네임부가 범용 레지스터(429)를 제어할 수 있다. At this time, it is possible to throttle the Rhine to recognize the parallel code area divided to a plurality of general purpose registers execution unit (431, 432) into two or more areas to control in a general-purpose register 429.

도 5는 본 발명의 또다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서의 블럭도이다. Figure 5 is a block diagram of an extended processor for executing multiple threads also embedded in the core according to another embodiment of the present invention.

임베디드 코어에서 멀티 쓰레드 실행을 하기 위해서는 CMP와 같은 멀티 프로세서가 필요하다. To the multithreaded execution in the embedded core it requires a multi-processor, such as CMP. 이를 위해서 AE32000C 코어를 확장하여 멀티 쓰레드 환경을 구현한다. For this, by extending the core AE32000C implements a multi-threaded environment. AE32000C 코어는 임베디드 코어로 임베디드 오디오, 비디오 등 다양한 분야에서 사용된다. AE32000C cores are used in various fields such as embedded audio and video embedded in the core.

AE32000C 프로세서는 기본적으로 하나의 코어만을 갖는다. AE32000C processor has only one core by default. 그리고 한 프로그램을 멀티 쓰레드 코드로 만들 경우, 2개의 쓰레드가 수행될 때 2개의 쓰레드가 대 부분의 경우 같은 코드를 수행한다. 2 and perform the same code if the thread when a large part of the program when creating multi-threaded code, to be performed by two threads.

AE32000C 코어는 fetch, decode, execution, mem 그리고 WB(write back) 의 5개 단계로 나누어진 파이프 라인 구조를 갖는다. AE32000C core has a pipelined architecture is divided into five stages of the fetch, decode, execution, mem, and WB (write back).

첫번째, 명령어 인출(Instruction Fetch, IF stage) 단계이다. First, an instruction fetch (Instruction Fetch, IF stage) step. 명령어 메모리에 접근하여 명령어를 가지고 온다. Access to the instruction memory to bring out the command. backend 파이프라인의 동작과 무관하게 명령어 큐(도 5의 프리패치 큐)가 찰 때까지 선인출(prefetch)을 수행한다. Until the a backend irrespective of the operation of a pipeline instruction queue (pre-fetch queue in Fig. 5) performs prefetching (prefetch). 또한, LERI명령으로 인하여 발생할 수 있는 성능 저하를 최소화하기 위하여 명령어 폴딩을 수행한다. Also, do the folding instructions to minimize the performance degradation that can occur due to LERI command.

두번째, 명령어 디코드(Instruction Decode/Operand Fetch, ID/OF) 단계이다. Second, an instruction decode (Instruction Decode / Operand Fetch, ID / OF) step. 인출해 온 명령어에 대한 해석을 수행하며, 명령어 해석에 따라 파이프라인의 각 데이터 패스 요소에 필요한 제어 신호를 생성하고, 필요한 오퍼랜드를 인출한다. Performs an analysis of the on-to fetch instructions, generate a control signal required for each data path element of the pipeline in accordance with the command analysis, and drawing out the required operands.

ID 스테이지에서는 대부분의 제어가 수행되며, 특히 인터럽트에 대한 반응을 수행하여 파이프를 비우고 제어 상태 머신으로 전환하는 것이나, 분기를 수행하는 등의 동작이 수행된다. In the ID stage, which would be carried out most of the control, in particular to carry out the reaction of the interrupt switch to control a state machine to empty the pipe, the operation such as performing the branch is performed. 오퍼랜드 인출(operand fetch)의 경우에는 데이터간의 의존성 및 하드웨어 의존성등 점검하여 피할 수 없는 의존성의 경우 버블 스테이지(bubble stage)를 발생시키며, 피할 수 있는 경우에는 포워딩(forwarding)으로서 의존성 문제를 해결하는 동작 또한 수행된다. If the operand fetch (operand fetch) when in the case of dependency that can not be avoided by checking the like dependence and hardware dependencies between the data and generate the bubble stage (bubble stage), avoiding include operations to resolve dependencies as forwarding (forwarding) also it is performed. 또한, ID스테이지에서는 보조 프로세서와의 제어가 수행된다. Further, in the ID stage it is performed by the control of the coprocessor.

세번째, 실행(Exection, EX) 단계이다. Third, the run (Exection, EX) stage. 실행 단계에서는 프로세서에서 수행 하는 대부분의 연산을 처리하며, 데이터 접근을 위한 주소를 생성하는 작업을 수행한다. In the execution phase, and handles most of the operations performed by the processor, performs an operation of generating an address for data access. 일반적인 환경에서 사용되는 MAC연산을 포함한 모든 연산은 1 사이클(cycle) 내에 연산이 가능하나, DSP Extension중 SIMD Extension된 상태의 MAC연산은 pipelined SIMD MAC으로 서 구현되어 있으므로, 같은 스루풋(throughput)을 지니지만 레이턴시(latency)에 차이가 있다. All operations, including a MAC operation which is used in normal circumstances is the operation in one cycle (cycle) one available, so MAC operation of the of the DSP Extension SIMD Extension status is standing implemented with pipelined SIMD MAC, boatman the same throughput (throughput) but there is a difference in the latency (latency).

네번째, 메모리 접근(Memory Access, MEM) 단계이다. Fourth, a memory access (Access Memory, MEM) stage. 데이터 메모리에 접근하여 데이터를 READ/WRITE하는 동작을 수행한다. To access the data memory and performs an operation of data READ / WRITE. 외부 데이터/캐쉬의 레이턴시가 있는 경우에 프로세서는 in-order 파이프라인을 채용하고 있으므로 파이프라인이 정지되어야 한다. If the latency of the external data / cache in the processor is to be stopped, so the pipeline employs in-order pipeline.

다섯번째, 라이트 백(Write-Back, WB) 단계이다. The fifth, right-back (Write-Back, WB) stage. 연산의 결과 혹은 메모리 접근을 통하여 취득한 새로운 데이터를 레지스터 파일에 반영하는 단계이다. A step of reflecting the new data obtained by the result of the operation or a memory access to the register file.

도 5에서, 실제 멀티 쓰레드가 실행되는 영역에서 대부분의 같은 코드 영역이 실행되기 때문에 명령어 패치부(510, Fetch Unit) 및 디코드부(Decode)는 하나를 사용하고, 실행부(531, 532, Execution), 메모리(Memory) 및 라이트 백(Write back) 유닛의 경우 멀티 쓰레드를 위하여 하나씩 더 추가된다. In Figure 5, in the region in which the actual multi-thread execution, since the majority code area of ​​the execution instruction fetch unit (510, Fetch Unit) and a decode unit (Decode) use one, execution unit (531, 532, and Execution ), in the case of memory (memory) and a write-back (write back), one unit is added further to the multi-threaded.

도 5의 코어는 16개의 범용 레지스터(528, 529)를 갖는다. Figure 5 of the core has 16 general-purpose registers 528, 529. 일반적인 멀티 쓰레드 프로그램에서는 2개의 쓰레드를 지원하기 위해 원래의 레지스터의 두 배의 레지스터(32개)를 갖는다. In a typical multi-threaded program 2 has a register (32) of twice the original register to support threads. 그러나, 도 5에서는 전력 소모와 리소스를 줄이기 위하여 레지스터 파일을 추가하지 않고 16개의 레지스터를 8개씩(528, 529) 둘로 나누어서 사용한다. However, Figure 5 uses divided in two without the addition of a register file in order to reduce the power consumption and the resource register 16 of eight (528, 529). 이때, 리네임부(527)가 16개의 레지스터를 8개씩 둘로 나눈다. At this time, the Rhine throttle 527 is divided in two of eight sixteen registers. 리네임 부(527)는 도 5와 같이, 추가된 쓰레드의 앞에 위치하여 명령어 레지스터 오퍼랜드(instruction register operands)를 r0-r7에서 r8-r15로 변경한다. Rename unit 527 changes the, located in front of the additional thread instruction operand register (instruction register operands) as shown in FIG. 5 to r8-r15 in r0-r7.

즉, 시리얼(Serial) 코드 영역에서는 16개의 레지스터를 모두 사용하고 패러럴(Parallel) 코드 영역에서는 각 쓰레드가 8개의 레지스터를 사용한다. That is, in the serial (Serial) code domain using both the register 16 and the parallel (Parallel) code domain uses eight registers for each thread.

스패셜 레지스터(521, Special Purpose Register, SPR)의 경우에는 각 쓰레드를 위해 레지스터 파일을 추가한다. For seupaesyeol register (521, Special Purpose Register, SPR) is to add a register file for each thread.

디코드부(520, Decode stage)에서는 패러럴 코드 영역에서 2개의 쓰레드를 제어하기 위해 쓰레드 제어부(525, Thread control unit)를 추가해서 if-else와 같이 2개의 쓰레드에서 컨트롤 플로우가 달라질 경우를 제어한다. In the decoding section (520, Decode stage) controls when the control flow in the two threads as if-else by adding a thread control unit (525, Thread control unit) for controlling the two threads in parallel code area different.

도 6은 도 5에 적용되는 더블링 데이터 캐쉬 인터페이스의 블럭도이다. Figure 6 is a block diagram of doubling the data cache interface are applied in FIG.

멀티 쓰레드를 지원하기 위해서는 데이터 캐쉬가 듀얼 포트로 접근이 가능해야 한다. To support multiple threads should be a data cache is accessible to the dual port. 그러나, 본 발명에서는 코어 면적 및 전력 소모를 줄이기 위해 듀얼 포트를 사용하지 않고 코어와 데이터 캐쉬 사이에 인터페이스 유닛을 추가한다. However, the present invention adds an interface unit between the core and without the use of a dual-port data cache in order to reduce the core size and power consumption. 패러럴 코드 영역을 실행할 때, 캐쉬에서 데이터를 읽거나 쓸 때, 각 쓰레드가 순차적으로 접근할 수 있도록 제어한다. When running a parallel code area, when reading or writing data from the cache, and controls so that each thread that can be accessed in sequence. 이 경우 듀얼 포트 캐쉬를 사용할 때보다 메모리 접근 부하가 커지지만 인터페이스를 이용하여 순차적으로 캐쉬에 접근하기 때문에 전력 소모와 캐쉬의 크기를 줄일 수 있다는 장점이 있다. In this case, the advantage of using the interface becomes larger, a memory access load than when reducing the size of the power consumption because the cache access to the cache in order to use a dual-port cache.

확장된 코어에서는 싱글 포트 캐쉬를 사용하기 때문에 load/sotre가 많이 발생할 경우에 성능이 많이 저하될 수 있다. The expanded core may be due to the use of single-port cache much reduced performance when there are many load / sotre. 이런 싱글 포트 캐쉬의 문제점을 해결하기 위해서 도 6과 같은 더블링(Doubling) 데이터 캐쉬 인터페이스를 사용한다. Doubling (Doubling) as shown in Fig. 6 in order to solve the problems of such a single-port cache uses the data cache interface. 멀 티 쓰레드 프로그램에서 두 개의 쓰레드가 동시에 load/store를 할 경우에 두 쓰레드에서 접근하려는 어드레스가 인접해 있을 가능성이 크다. Multi-two threads from the thread at the same time the program is greater possibility that it addresses adjacent to the access in the two threads when the load / store. 이 경우 각 요청을 여러 번의 캐쉬 접근으로 처리하는 것이 아니라 한 번의 64bit 접근으로 load/sotre를 수행할 수 있다. In this case, rather than processing each request to multiple cache access may perform load / sotre with one 64bit access.

즉, 더블링 데이터 캐쉬 인터페이스는 2개의 32비트 캐쉬 스토어 접근을 1개의 64비트 캐쉬 스토어 접근으로 합치는 컴바이너(548) 및 싱글 포트 캐쉬로부터 1개의 64비트 캐쉬 로드 접근을 수행한 후 2개의 32비트 캐쉬 로드 접근에 대한 출력값을 생성하는 복수의 멀티플렉서(541, 542)를 포함한다. In other words, doubling the data cache interface after performing the two 32-bit cache store access matches the first two 64-bit cache store access is one 64-bit cache rod accessible from the combiners 548 and single-port cache two 32 and a plurality of multiplexers for generating an output value of the load bit cache access (541, 542).

병렬 실행에서, 컨트롤러(549)는 각 쓰레드의 접근 주소(ADR0, ADR1)를 비교하여 캐쉬에 접근하는 방법을 결정한다. In parallel operation, the controller 549 determines how to access the cache by comparing the access address (ADR0, ADR1) of each thread. 접근하려는 데이터들이 동일한 캐쉬 라인에 존재하면, 메모리 컨트롤러는 한번의 메모리 접근에서 캐쉬로부터 로드된 전체 쓰레드의 데이터(LD0, LD1)를 이용하여 각각의 쓰레드에 데이터를 분배하거나, 제공되는 데이터(ST0, ST1)을 합쳐서 두 배 크기의 데이터를 캐쉬에 저장한다. When present in the attempting to access the data, the same cache line, the memory controller distributes the data to each of the threads by using the whole thread of the data (LD0, LD1) is loaded from the cache in memory, one word access or data available (ST0, ST1) collectively to store data twice the size of the cache. 접근하려는 데이터들이 동일한 캐쉬 라인에 존재하지 않으면, 두번의 메모리 접근이 인터리브드 방식(interleaved manner)으로 순차적으로 핸들된다. Does not exist in the data they want to access the same cache line, the handle is of a double-access memory sequentially in an interleaved manner (interleaved manner). 버퍼는 데이터 인터리빙(data interleaving)을 위해 사용된다. The buffer is used for the interleaved data (data interleaving). 직렬 실행에서는 컨트롤러(549)는 단지 모든 캐쉬 신호를 액티브한 쓰레드에 중계한다. Serial execution controller 549 will only relay the signal to the cache all the active threads.

멀티 쓰레드 프로그램을 구현하기 위하여 하드웨어를 추가하는 것 외에 컴파일러를 확장한다. Extending the compiler in addition to adding more hardware to implement a multi-threaded program. 각각의 쓰레드는 자신의 ID(identification number)를 참조하여 실행하게 각 쓰레드는 자신의 ID를 알아야 한다. Each thread executes with reference to his ID (identification number) for each thread will know his ID. 이를 위하여 각 쓰레드 ID를 레지 스터에 저장을 하고 fork 를 이용하여 ID값을 초기화 한다. To store each thread ID in register to this and initializes the ID value using the fork. 시리얼 영역을 실행할 때 fork 함수는 각 쓰레드를 위한 스택 영역을 할당하고, 함수의 매개 변수들을 스택에 복사하며 복사가 끝난 후에 쓰레드 #1을 실행한다. The fork function when running the serial area is allocated to the stack area for each thread, and copy a stack of parameters of the function and executes the thread # 1 after the end of the copy. join 은 fork 안에 포함되어 있고, 병렬 실행 영역이 끝난 후 쓰레드 #1을 스톨(stall)을 시키고 쓰레드 #0를 계속적으로 실행시킨다. join causes the stall a thread # 1 is included after the end of, and parallel execution area in the fork (stall) and run the thread # 0 continuously.

그러나 병렬 코드 안에 if-else/switch 와 같은 조건 분기가 있을 경우에 두개의 쓰레드는 같은 코드 영역을 실행하지 않을 수 있다. However, if there are two threads in the quarter under the same conditions as if-else / switch in parallel code can not run the same code area. 본 발명에서 사용한 CMP 구조에서는 한 번에 오직 하나의 명령어만 읽어 들이고 해석할 수 있기 때문에 두개의 쓰레드가 다른 코드 영역을 실행할 경우 동시에 처리할 수 없게 된다. Because you can only read in only one instruction at a time analysis in the CMP structure used in the present invention, if two threads run the other code area is impossible to be processed at the same time. 이런 문제점은 오직 조건 분기에서만 시작된다. These problems are only beginning only a conditional branch. 반대로 두개의 쓰레드가 서로 다른 컨트롤 플로우를 실행하다가 다시 같은 코드 영역을 실행하게 되는데 이런 부분을 알기 위해서 컴파일러에서 새로운 명령어를 정의하고 API를 추가한다. Conversely, there is the two threads are each running the same code area again, you run the other flow control define the new instructions by the compiler to know this part and add the API. 그리고 위에서 설명한 바와 같이 쓰레드를 지원하기 위한 함수들을 라이브러리에 포함시킨다. And to include the functions in the library to support the thread, as described above. 멀티 쓰레드를 위해서 새롭게 추가되는 명령어는 표 1과 같다. Instructions that are newly added to the multi-thread is shown in Table 1.

새로운 명령어 New command 기능 function fork fork 병렬 실행을 시작 Start a parallel execution join join 병렬 실행을 종료 Exit the parallel execution acquire acquire 변수에 락(lock)을 걸어서 다른 쓰레드가 사용하지 못함 Foot lock (lock) does not use the variable that the other thread release release 변수의 락(lock)을 해제 Release the lock (lock) of the variable barrier barrier 동기화(두개의 쓰레드가 다른 컨트롤 플로우일 때 같은 PC에서 동기화) Synchronization (two threads synchronize from a PC, such as when another control flow) thread_id thread_id 쓰레드의 id를제공 Provide the id of the thread

도 7은 본 발명의 또다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행 방법의 흐름도이다. 7 is a flow chart of executing a multi-threaded manner in the embedded core according to another embodiment of the present invention.

먼저, 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출한다(710 과정). First, the take-off of the code produced by multi-thread from the instruction memory (710 process).

다음, 명령어 정보를 저장하는 스패셜 레지스터를 이용하여 인출된 코드들을 디코드하고, 인출된 코드들에 2개 이상의 쓰레드에서 컨트롤 플로우를 분기시키는 명령어가 존재하는 경우 각각의 쓰레드의 순서를 설정한다(720 과정). Next, if the decoding of the fetched code using the seupaesyeol register for storing command information, and the fetched code, the command for branching the control flow in more than one thread exists, and sets the order of the respective threads (720 processes ).

다음, 시리얼 코드 영역에서는 범용 레지스터의 전체 영역을 할당하고, 패러럴 코드 영역에서는 범용 레지스터를 2개 이상으로 분할한 영역을 각각의 쓰레드를 위해 할당한다(730 과정). Next, the serial code area assigned to the entire area of ​​the general-purpose register and, in parallel codes allocated to the area is divided into two or more general purpose registers for each thread (730 process).

마지막으로, 복수의 실행부를 이용하여 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행한다(740 과정). Finally, the execution code for each thread based on the execution order that is set by using a plurality of execution (process 740).

도 8은 본 발명의 또다른 실시 예에 따른 임베디드 코어에서 멀티 쓰레드 실행 방법의 흐름도이다. 8 is a flow chart of executing a multi-threaded manner in the embedded core according to another embodiment of the present invention.

먼저, 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출한다(810 과정). First, the take-off of the code produced by multi-thread from the instruction memory (810 process).

다음, 명령어 정보를 저장하는 스패셜 레지스터를 이용하여 인출된 코드들을 디코드하고, 인출된 코드들에 2개 이상의 쓰레드에서 컨트롤 플로우를 분기시키는 명령어가 존재하는 경우 각각의 쓰레드의 순서를 설정한다(820 과정). Next, if the decoding of the fetched code using the seupaesyeol register for storing command information, and the fetched code, the command for branching the control flow in more than one thread exists, and sets the order of the respective threads (820 processes ).

다음, 시리얼 코드 영역에서는 범용 레지스터의 전체 영역을 할당하고, 패러럴 코드 영역에서는 범용 레지스터를 2개 이상으로 분할한 영역을 각각의 쓰레드를 위해 할당한다(830 과정). Next, the serial code area assigned to the entire area of ​​the general-purpose register and, in parallel codes allocated to the area is divided into two or more general purpose registers for each thread (830 process).

다음, 싱글 포트 캐쉬를 이용하는 복수의 실행부를 이용하여 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행한다(840 과정). Executes the code for each thread in the following, the execution order is set by using a plurality of execution using a single port cache (840 process).

이때, 각각의 쓰레드에 대한 코드를 실행하고, 2개 이상의 쓰레드가 동시에 싱글 포트 캐쉬에 접근하는 경우, 이웃한 어드레스에 대한 접근인지 판단한다(850 과정). At this time, when executing the code for each thread, and at least two threads at the same time the access to the single-port cache, it is determined whether access to a neighboring address (process 850).

이때, 이웃한 어드레스에 대한 접근이면, 한번의 접근으로 처리하고(851 과정), 이웃한 어드레스에 대한 접근이 아니면, 각각의 접근을 순차적으로 처리한다(852 과정). At this time, if access to a neighboring address, processing in one word access, and (process 851), and not the access to a neighboring address and processes a respective accessed sequentially (852 process).

마지막으로, 인출된 코드에 따라 프로그램이 종료되는지 판단하고(860 과정), 종료되지 않으면, 다음 코드들을 인출하여 위와 같은 과정을 반복한다(810-852 과정). Finally, if in accordance with the fetched code is determined that the program is terminated (process 860), being completed, the next fetch code and repeats the process of the above (procedure 810-852). 이때, 인출된 코드에 따라 프로그램이 종료되면, 모든 과정을 종료한다. After this time, the program is terminated in accordance with the fetched code, and terminates the entire process.

본 발명에 따른 새로운 병렬 구조의 성능 데이터를 얻고 이를 종래의 구조의 성능과 비교하기 위해서, EEMBC 벤치마크를 사용하였다. To obtain performance data for the new parallel structure according to the invention in order to compare it to the performance of a conventional structure, it was used EEMBC benchmark. EEMBC는 총 34개의 벤치마크로 구성되어 있고 이 중에서 11개의 코드를 병렬화할 수 있었다. EEMBC was able to parallelize the code 11 is configured from a total of 34 benchmarks. 또한, 구성의 일 예로, 하드웨어는 ADChips 사의 EISC AE32000C 를 확장하여 사용할 수 있다. Further, one example of the configuration, hardware may be used to extend the ADChips's EISC AE32000C.

도 9는 본 발명에 따른 명령어 부하를 도시한 것이다. 9 illustrates a load instruction in accordance with the present invention.

도 9는 확장된 코어에서 멀티 쓰레드 프로그램을 실행하기 위해서 벤치마크 프로그램을 컴파일했을 때 실제 실행되는 총 명령어의 수가 얼마나 증가하는지를 보여준다. Figure 9 shows how much increase in the number of actual running when compiling a benchmark program to run multithreaded programs in the expanded core total command. 실제 병렬 코드 영역에서는 16개의 레지스터를 두개의 그룹으로 나누어서 8개씩 사용하기 때문에 실제 실행되는 명령어의 수가 증가하는 것을 볼 수 있다. In a real parallel code register region 16 because the use of eight divided into two groups can be seen that an increase in the number of the actual instruction to be executed. 그러나, 이와 같은 레지스터의 부족에 따른 문제(register spill)는 16개의 레지스터를 모두 사용하여 해결할 수 있는 문제이다. However, problem (register spill) in accordance with the lack of such a register is a problem that can be resolved by using all of the 16 registers. 병렬화 부하(parallelization overhead)는 병렬 코드를 만들 때 fork를 사용하여 각 쓰레드를 위해 스택을 만들고 매개 변수를 복사하게 되는데 이런 일련의 일들로 인해서 생기는 것으로, 도 9에서 보는 것과 같이 conven을 제외한 다른 벤치마크에서의 병렬화 부하는 매우 적다. Parallelization load (parallelization overhead) using a fork to create a parallel code to create a stack for each thread there is to copy the parameters to be caused due to a bunch of these things, the benchmarks except the conven as shown in FIG. 9 parallelize the load is very small at.

표 2는 새로운 구조에서 얼마나 성능이 향상됐는가를 보여준다. Table 2 shows how much performance improvement dwaetneunga in the new structure. 그림 5 에서 보았듯이 실제 실행되는 명령어의 수가 평균적으로 17.5%가 증가함에도 불구하고 싱글 포트 캐쉬에서 20.1%의 성능향상을 얻을 수 있었고 듀얼 포트 캐쉬를 사용할 경우 평균 36.5%, 최대 82.3%의 성능향상을 얻을 수 있었다. As it is seen in Figure 5, although the actual running average of 17.5% of the increase in the number of commands and was able to get an improvement of 20.1% performance in single port cache If you use a dual-port cache average 36.5 percent, a performance improvement of up to 82.3% It could be obtained.

표 2 확장된 구조의 speedup싱글 포트의 경우 캐쉬에 접근할 때 두개의 쓰레드가 동시에 데이터를 읽거나 쓸 수 없기 때문에 성능이 많이 떨어지게 된다. Table 2 For the speedup single-port of the expanded structure is because the two threads to access the cache at the same time can read or write data falls much performance. 하지만 두 쓰레드가 인접한 메모리(메모리의 차이가 4)인 어드레스에 접근할 경우에 캐쉬에서 2개의 쓰레드를 위한 데이터를 한 번에 처리하게 되고(Doubling) 이를 통해 성능을 향상시킬 수 있게 된다. However, it is possible to both thread and process it (Doubling) improve performance through which the data for the two threads in the cache in case access to the adjacent memory address (the difference between the memory 4) at a time.

Figure 112007014411866-pat00001

멀티 쓰레드 프로세서를 구현하기 위해서 종래의 EISC 코어에 새로운 로직을 추가하였다. In order to implement the multi-threaded processor, the new logic added to the conventional EISC core.

본 발명에 따른 전력을 측정하기 위해서 Synopsys 사의 Design Compiler와 PrimePower를 사용하였다. In order to measure the power in accordance with the present invention it was used at Synopsys Design Compiler and PrimePower. Design Compiler를 이용하여 AE32000C의 Verilog 코드를 합성하고 PrimePower를 이용하여 전력을 측정했다. Using the Design Compiler synthesize Verilog code AE32000C and measured the electric power by using a PrimePower. 전력 소모를 측정하기 위한 공정 설정은 공급 전압 3.3V에 0.35um CMOS process이고 클럭 주파수는 66MHz로 가정하였다. Process set for measuring the power consumption is the supply voltage is 3.3V 0.35um CMOS process clock frequency is assumed to be 66MHz.

표 3은 새로운 로직을 추가함으로써 생기는 부하를 나타낸 것이다. Table 3 shows the load generated by adding a new logic. 실제 실행부(Execution unit)를 추가했기 때문에 실행부의 크기는 92.5%만큼 증가하고 전력 소모는 81.29%만큼 증가하였다. Since adding the actual execution unit (Execution unit) execution unit size is increased by 92.5%, and power consumption is increased as much as 81.29%. 디코드부(Decode unit)의 경우에 명령어를 해석하고 각 명령어에 맞는 오퍼랜드(operand, 명령어를 실행하기 위한 인자들)가 두개의 쓰레드에서 실행되기 때문에 35.10%만큼 크기가 증가하고 전력 소모는 31.05%만큼 증가하였다. Decoding unit analyzes the instruction in the case of (Decode unit) and increase in size as much as 35.10% because it runs in (factors for performing the operand, instruction) two threads operands for each instruction, and the power consumption as much as 31.05% It was increased. 메모리(Memory) 유닛의 경우에도 두개의 쓰레드를 처리해야 하기 때문에 15.09 %만큼 증가하였다. Since the need to handle the two threads in the case of memory (Memory) unit was increased by 15.09%. 전체적으로 하드웨어의 크기는 46.98% 증가하였고 전력 소비량은 24.23%만큼 증가하였다. As a whole was the size of the hardware is increased 46.98% Power consumption was increased by 24.23%. 이는 실제 ARM의 MPCore(Multi Core Processor)와 비교할 때 매우 작은 값이다. This is a very small value as compared with the actual ARM MPCore (Multi Core Processor). ARM MPCore의 경우 2 개의 프로세서를 사용할 때 125%만큼 크기가 증가하고 전력소비도 117%증가한다. For the ARM MPCore 2 and 125% increase in size and power consumption increase as much as 117% when using a single processor.

Figure 112007014411866-pat00002

본 발명은 도면에 도시된 일 실시예를 참고로 하여 설명하였으나 이는 예시적인 것에 불과하며 당해 분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 실시예의 변형이 가능하다는 점을 이해할 것이다. The invention has been described by an embodiment shown in the Figures as an example it will be understood that it is the only and the art Those of ordinary skill in the art from various modifications can be made and carrying out a modification to this example. 그러나, 이와 같은 변형은 본 발명의 기술적 보호범위내에 있다고 보아야 한다. However, this strain should see that the technical scope of the present invention. 따라서, 본 발명의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해서 정해져야 할 것이다. Therefore, the true technical protection scope of the invention as defined by the technical spirit of the appended claims.

상술한 바와 같이, 본 발명에 의하면, CMP의 성능을 유지하는 상태에서 전력 소모량을 줄이고, 프로세서의 면적을 줄여 제조가 용이한 효과가 있다. As described above, according to the present invention, to reduce power consumption while maintaining the performance of CMP, there is an effect which is easy to manufacture by reducing the area of ​​the processor.

Claims (11)

  1. 삭제 delete
  2. 삭제 delete
  3. 삭제 delete
  4. 삭제 delete
  5. 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출하는 명령어 패치부; Command fetch unit to fetch the code produced by multi-thread from the instruction memory;
    상기 인출된 코드들을 디코드하고, 상기 인출된 코드들의 실행 순서를 설정하는 디코드부; Decode the fetched code, the decoding unit to set the order of execution of the fetched code;
    상기 설정된 실행 순서에 따라 각각의 쓰레드에 대한 코드를 실행하는 복수의 실행부; A plurality of execution unit to execute the code for each thread in accordance with the set order of execution;
    상기 디코드부를 위한 명령어 정보를 저장하는 스패셜 레지스터; Seupaesyeol register for storing instruction information to the decoding unit; And
    시리얼 코드 영역에서는 전체 영역이 사용되고, 패러럴 코드 영역에서는 각각의 쓰레드를 위해 분할된 영역이 사용되는 범용 레지스터를 포함하고, The serial code area, the whole area is used, the parallel code area includes a general purpose register which is a partition for each thread used,
    상기 복수의 실행부는 The plurality of execution unit
    싱글 포트 캐쉬를 이용하고, 2개 이상의 쓰레드가 동시에 상기 싱글 포트 캐쉬에 접근하는 경우, 이웃한 어드레스에 대한 접근을 한번의 접근으로 처리하는 더블링 데이터 캐쉬 인터페이스를 포함하는 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서. Using a single port cache and more than one thread at the same time the single case of access to the port cache, for a multi-threaded execution access to a neighboring address in the embedded core containing doubling data cache interface for processing the access of one the extension processor.
  6. 제 5 항에 있어서, 6. The method of claim 5,
    상기 디코드부는 The decode units
    2개 이상의 쓰레드에서 컨트롤 플로우를 분기시키는 명령어가 존재하는 경우 각각의 쓰레드 간의 순서를 설정하는 쓰레드 제어부를 포함하는 것을 특징으로 하는 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서. If an instruction for branching the control flow in more than one thread exists, the processor extender for multithreaded execution in the embedded core, comprising a step of including a thread control unit to set the order between each thread.
  7. 삭제 delete
  8. 삭제 delete
  9. 제 5 항에 있어서, 6. The method of claim 5,
    상기 더블링 데이터 캐쉬 인터페이스는 Doubling the data cache interface,
    2개의 32비트 캐쉬 스토어 접근을 1개의 64비트 캐쉬 스토어 접근으로 합치는 컴바이너; 2 matches the 32-bit cache store access into a single 64-bit cache store access is combiners; And
    상기 싱글 포트 캐쉬로부터 1개의 64비트 캐쉬 로드 접근을 수행한 후 2개의 32비트 캐쉬 로드 접근에 대한 출력값을 생성하는 복수의 멀티플렉서를 포함하는 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된 프로세서. The single port cache one 64-bit load cache of the plurality of multiplexers processor extended to multi-threaded execution in the embedded core containing that after performing the two access generate an output value for the 32-bit cache access load from.
  10. 삭제 delete
  11. 멀티 쓰레드로 제작된 코드를 명령어 메모리로부터 인출하는 단계; Withdrawing a cord made from a multithreaded instruction memory;
    명령어 정보를 저장하는 스패셜 레지스터를 이용하여 상기 인출된 코드들을 디코드하고, 상기 인출된 코드들에 2개 이상의 쓰레드에서 컨트롤 플로우를 분기시키는 명령어가 존재하는 경우 각각의 쓰레드 간의 순서를 설정하는 단계; Using seupaesyeol register for storing instruction decode information of the take-code and, in the case of the said take-code command for branching the control flow in more than one thread exists, setting a sequence between the individual threads; And
    싱글 포트 캐쉬를 이용하는 복수의 실행부를 이용하여 상기 설정된 실행 순서에 따라 상기 각각의 쓰레드에 대한 코드를 실행하고, 2개 이상의 쓰레드가 동시에 상기 싱글 포트 캐쉬에 접근하는 경우, 이웃한 어드레스에 대한 접근을 한번의 접근으로 처리하는 단계를 포함하는 임베디드 코어에서 멀티 쓰레드 실행 방법. Single according to the set execution order by using a plurality of runs using the port cache if the execution code, and two or more threads access at the same time on the single port cache for each of the threads, access to a neighboring address how to run multi-threaded embedded in the core comprises treatment with one word access.
KR1020070016244A 2007-02-15 2007-02-15 Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core KR100888675B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020070016244A KR100888675B1 (en) 2007-02-15 2007-02-15 Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070016244A KR100888675B1 (en) 2007-02-15 2007-02-15 Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core

Publications (2)

Publication Number Publication Date
KR20080076392A KR20080076392A (en) 2008-08-20
KR100888675B1 true KR100888675B1 (en) 2009-03-13

Family

ID=39879657

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070016244A KR100888675B1 (en) 2007-02-15 2007-02-15 Extended processor for excuting multi-threads in embeded core and Method for excuting multi-threads in embeded core

Country Status (1)

Country Link
KR (1) KR100888675B1 (en)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101636377B1 (en) 2009-10-23 2016-07-06 삼성전자주식회사 Configuration processor, configuration control apparatus and method, and Thread modeling method
KR101738641B1 (en) 2010-12-17 2017-05-23 삼성전자주식회사 Apparatus and method for compilation of program on multi core system
KR101869325B1 (en) * 2011-12-13 2018-06-21 한국전자통신연구원 Core allocation apparatus in different multi-core

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060150184A1 (en) 2004-12-30 2006-07-06 Hankins Richard A Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
KR20070011434A (en) * 2004-04-07 2007-01-24 샌드브리지 테크놀로지스, 인코포레이티드 Multithreaded processor with multiple concurrent pipelines per thread
KR20070018066A (en) * 2004-04-07 2007-02-13 샌드브리지 테크놀로지스, 인코포레이티드 Processor having compound instruction and operation formats
KR20070116740A (en) * 2006-06-06 2007-12-11 마쓰시타 일렉트릭 인더스트리얼 코우.,엘티디. Asymmetric multi processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070011434A (en) * 2004-04-07 2007-01-24 샌드브리지 테크놀로지스, 인코포레이티드 Multithreaded processor with multiple concurrent pipelines per thread
KR20070018066A (en) * 2004-04-07 2007-02-13 샌드브리지 테크놀로지스, 인코포레이티드 Processor having compound instruction and operation formats
US20060150184A1 (en) 2004-12-30 2006-07-06 Hankins Richard A Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
KR20070116740A (en) * 2006-06-06 2007-12-11 마쓰시타 일렉트릭 인더스트리얼 코우.,엘티디. Asymmetric multi processor

Also Published As

Publication number Publication date
KR20080076392A (en) 2008-08-20

Similar Documents

Publication Publication Date Title
US5826089A (en) Instruction translation unit configured to translate from a first instruction set to a second instruction set
US5481751A (en) Apparatus and method for storing partially-decoded instructions in the instruction cache of a CPU having multiple execution units
JP2550213B2 (en) Parallel processing apparatus and a parallel processing method
Silc et al. Processor architecture: from dataflow to superscalar and beyond
US6775766B2 (en) Methods and apparatus to dynamically reconfigure the instruction pipeline of an indirect very long instruction word scalable processor
JP2500036B2 (en) Hybrid pipelined processor and processing method
US6988183B1 (en) Methods for increasing instruction-level parallelism in microprocessors and digital system
US7424598B2 (en) Data processor
US7752423B2 (en) Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
US5907702A (en) Method and apparatus for decreasing thread switch latency in a multithread processor
EP2191380B1 (en) Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set
US5475824A (en) Microprocessor with apparatus for parallel execution of instructions
US5941983A (en) Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
JP3499252B2 (en) Compiling apparatus and data processing apparatus
US6272616B1 (en) Method and apparatus for executing multiple instruction streams in a digital processor with multiple data paths
US7793081B2 (en) Implementing instruction set architectures with non-contiguous register file specifiers
KR100871956B1 (en) Method and apparatus for identifying splittable packets in a multithreaded vliw processor
KR20010092736A (en) High data density risc processor
US6842848B2 (en) Method and apparatus for token triggered multithreading
JP2647315B2 (en) Array parallel processing in a plurality modes dynamically
JP2918631B2 (en) decoder
US20040073773A1 (en) Vector processor architecture and methods performed therein
US9690620B2 (en) Polymorphic heterogeneous multi-core architecture
US6327650B1 (en) Pipelined multiprocessing with upstream processor concurrently writing to local register and to register of downstream processor
McLellan The Alpha AXP architecture and 21064 processor

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: 20130111

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140120

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160118

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170125

Year of fee payment: 9

LAPS Lapse due to unpaid annual fee