KR101756820B1 - 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 - Google Patents
중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 Download PDFInfo
- Publication number
- KR101756820B1 KR101756820B1 KR1020100103095A KR20100103095A KR101756820B1 KR 101756820 B1 KR101756820 B1 KR 101756820B1 KR 1020100103095 A KR1020100103095 A KR 1020100103095A KR 20100103095 A KR20100103095 A KR 20100103095A KR 101756820 B1 KR101756820 B1 KR 101756820B1
- Authority
- KR
- South Korea
- Prior art keywords
- loop
- execution
- instruction
- information
- execution count
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000003672 processing method Methods 0.000 claims description 7
- 239000000284 extract Substances 0.000 abstract description 6
- 238000004904 shortening Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 15
- 230000008859 change Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 101100136062 Mycobacterium tuberculosis (strain ATCC 25618 / H37Rv) PE10 gene Proteins 0.000 description 2
- 101100136063 Mycobacterium tuberculosis (strain ATCC 25618 / H37Rv) PE11 gene Proteins 0.000 description 2
- 101100136061 Mycobacterium tuberculosis (strain ATCC 25618 / H37Rv) PE9 gene Proteins 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7885—Runtime interface, e.g. data exchange, runtime control
- G06F15/7892—Reconfigurable logic embedded in CPU, e.g. reconfigurable unit
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
중첩 루프에 포함된 내부 루프 및 외부 루프를 병합하고, 병합된 루프를 프로세싱 엘리먼트(processing element; PE)에 병렬적으로 할당함으로써, 중첩 루프의 처리 시간을 단축할 수 있는 재구성 가능 프로세서 및 방법이 개시된다. 재구성 가능 프로세서는 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하고, 추출된 루프 실행 횟수 정보에 기초하여 상기 내부 루프 및 상기 외부 루프를 병합한다.
Description
중첩 루프(nested loop)가 효율적으로 처리될 수 있도록, 중첩 루프에 포함된 명령어들을 다수의 프로세싱 엘리먼트에 할당하고 처리하는 기술과 관련된다.
재구성 가능 아키텍처(reconfigurable architecture)란 어떠한 작업을 수행하기 위한 컴퓨팅 장치의 하드웨어적 구성을 각각의 작업에 최적화되도록 변경할 수 있는 아키텍처를 의미한다.
어떠한 작업을 하드웨어적으로만 처리하면 고정된 하드웨어의 기능으로 인해 작업 내용에 약간의 변경이 가해지면 이를 효율적으로 처리하기가 어렵다. 또한, 어떠한 작업을 소프트웨어적으로만 처리하면 그 작업 내용에 맞도록 소프트웨어를 변경하여 처리하는 것이 가능하지만 하드웨어적 처리에 비해 속도가 늦다.
재구성 가능 아키텍처는 이러한 하드웨어/소프트웨어의 장점을 모두 만족시킬 수가 있다. 특히, 동일한 작업이 반복적으로 수행되는 디지털 신호 처리 분야에서는 이러한 재구성 가능 아키텍처가 많은 주목을 받고 있다.
한편, 디지털 신호 처리 과정은 그 신호 처리 특성상 동일한 작업이 반복되는 루프 연산 과정을 다수 포함하는 것이 일반적이다. 일반적으로, 루프 연산 속도를 높이기 위해서 루프 레벨 병렬화(loop level parallelism, LLP)가 많이 이용된다. 이러한 LLP로는 소프트웨어 파이프라이닝(software pipelining)이 대표적이다.
일반적으로, 중첩 루프의 내부 루프(inner loop) 및 외부 루프(outer loop)는 재구성 가능 아키텍처에서 직렬적으로 처리되고 있다. 이와 같이, 직렬적으로 처리하는 경우, 처리 시간이 현저하게 지연될 수 있다.
최근에는, 중첩 루프의 내부 루프(inner loop) 및 외부 루프(outer loop)를 재구성 가능 아키텍처에서 병렬적으로 처리하는 방법에 대한 연구가 활발히 진행되고 있다.
중첩 루프에 포함된 내부 루프 및 외부 루프를 병합하고, 병합된 루프를 프로세싱 엘리먼트(processing element; PE)에 병렬적으로 할당함으로써, 중첩 루프의 처리 시간을 단축할 수 있을 뿐만 아니라 코드 길이도 줄일 수 있는 재구성 가능 프로세서 및 방법과 관련된다.
발명의 일 실시예에 따른 중첩 루프를 처리하기 위한 재구성 가능 프로세서는 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하는 추출부 및 상기 추출된 루프 실행 횟수 정보에 기초하여 상기 내부 루프 및 상기 외부 루프를 병합하는 루프 병합부를 포함하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서를 포함한다.
중첩 루프를 처리하기 위한 재구성 가능 프로세서는 병합된 루프 중 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하고, 병합된 루프 중 외부 루프의 명령어를 내부 루프에 포함된 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당하는 스케줄러를 더 포함할 수 있다.
루프 병합부는 내부 루프의 제 1 루프 실행 횟수 정보 및 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하고, 제 3 루프 실행 횟수 정보만큼 병합된 루프의 명령어들이 실행되도록 제어하는 루프 컨트롤 명령어를 생성할 수 있다.
루프 병합부는 루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경할 수 있다.
중첩 루프를 처리하기 위한 재구성 가능 프로세서는 제 1 루프 실행 횟수 정보를 저장하는 주파수 레지스터 파일 및 설정된 시간마다 값을 증가시켜 카운터값을 출력하는 카운터를 포함하는 다수의 프로세싱 엘리먼트를 더 포함하고, 루프 병합부는 제 1 루프 실행 횟수 정보를 주파수 레지스터 파일에 저장하는 저장 명령어를 생성할 수 있다.
루프 병합부는 주파수 레지스터 파일 중 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 외부 루프의 명령어에 삽입할 수 있다.
프로세싱 엘리먼트는 할당된 명령어에 실행 오퍼랜드가 존재하는지 여부를 판단하고, 실행 오퍼랜드가 존재하는 경우, 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 카운터 값이 동일할 때마다, 할당된 명령어를 실행하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
카운터는 루프에 포함된 명령이 실행되는 시간마다 값을 증가시키거나 루프가 실행되는 시간마다 값을 증가시킬 수 있다.
루프 병합부는 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보를 외부 루프 및 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 추출할 수 있다.
제 3 루프 실행 횟수 정보는 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보의 곱일 수 있다.
본 발명의 일실시예에 따른 중첩 루프(nested loop) 처리 방법은 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하는 단계 및 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)를 추출된 루프 실행 횟수 정보에 기초하여 병합하는 단계를 포함한다.
중첩 루프(nested loop) 처리 방법은 병합된 루프 중 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하는 단계 및 병합된 루프 중 외부 루프의 명령어를 내부 루프의 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당하는 단계를 더 포함할 수 있다.
병합하는 단계는 내부 루프의 제 1 루프 실행 횟수 정보 및 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하는 단계; 및 제 3 루프 실행 횟수 정보만큼 병합된 루프의 명령어들이 실행되도록 제어하는 루프 컨트롤 명령어를 생성하는 단계를 포함할 수 있다.
병합하는 단계는 루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경하는 단계를 포함할 수 있다.
병합 단계는 제 1 루프 실행 횟수 정보를 프로세싱 엘리먼트에 포함된 주파수 레지스터 파일에 저장하는 저장 명령어를 생성하는 단계를 포함할 수 있다.
병합하는 단계는 주파수 레지스터 파일 중 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 외부 루프의 명령어에 삽입하는 단계를 포함할 수 있다.
중첩 루프(nested loop) 처리 방법은 할당된 명령어에 실행 오퍼랜드가 존재하는지 여부를 판단하는 단계 및 실행 오퍼랜드가 존재하는 경우, 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 카운터에 의해서 출력된 카운터 값이 동일할 때마다, 할당된 명령어를 실행하는 단계를 더 포함할 수 있다.
추출하는 단계는 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보를 외부 루프 및 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 추출하는 단계를 포함할 수 있다.
제 3 루프 실행 횟수 정보는 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보의 곱일 수 있다.
개시된 내용에 따르면, 중첩 루프에 포함된 내부 루프 및 외부 루프를 병합하고, 병합된 루프를 프로세싱 엘리먼트(processing element; PE)에 병렬적으로 할당함으로써, 중첩 루프의 처리 시간을 단축할 수 있을 뿐만 아니라 코드 길이를 줄일 수 있다.
도 1은 본 발명의 일 실시예와 관련된 재구성 가능 프로세서에 관한 도면이다.
도 2a, 도 2b, 도 2c 및 도 2d는 본 발명의 일실시예에 따른 루프 병합부가 중첩 루프를 병합하는 과정을 설명하기 위한 도면이다.
도 3은 내부 루프 및 외부 루프의 명령어들이 프로세싱 엘리먼트에 할당된 상태를 설명하기 위한 도면이다.
도 4는 본 발명의 일실시예에 따른 중첩 루프를 병합하는 방법을 설명하기 위한 흐름도이다.
도 5는 본 발명의 일실시예에 따른 중첩 루프를 처리하는 방법을 설명하기 위한 흐름도이다.
도 2a, 도 2b, 도 2c 및 도 2d는 본 발명의 일실시예에 따른 루프 병합부가 중첩 루프를 병합하는 과정을 설명하기 위한 도면이다.
도 3은 내부 루프 및 외부 루프의 명령어들이 프로세싱 엘리먼트에 할당된 상태를 설명하기 위한 도면이다.
도 4는 본 발명의 일실시예에 따른 중첩 루프를 병합하는 방법을 설명하기 위한 흐름도이다.
도 5는 본 발명의 일실시예에 따른 중첩 루프를 처리하는 방법을 설명하기 위한 흐름도이다.
이하, 첨부된 도면을 참조하여 발명을 실시하기 위한 구체적인 내용에 대하여 상세하게 설명한다.
도 1은 본 발명의 일 실시예와 관련된 재구성 가능 프로세서에 관한 도면이다.
도 1을 참조하면, 재구성 가능 프로세서(100)는 추출부(105), 루프 병합부(110) 및 스케줄러(120), 재구성 가능 어레이(130) 및 메모리(140)를 포함한다.
이하에서, 명령어란 프로세싱 엘리먼트에서 실행되는 오퍼레이션(operation) 또는 인스트럭션(instruction)을 의미할 수 있다. 예를 들면, 명령어란 루프 바디에 포함된 다수의 오퍼레이션(operation) 또는 인스트럭션(instruction)을 의미할 수 있다. 중첩 루프(nested loop)는 내부 루프(inner loop) 및 외부 루프(outer loop)를 포함하는 루프를 의미한다.
추출부(105)는 중첩 루프에 포함된 내부 루프 및 외부 루프의 루프 실행 횟수 정보를 추출할 수 있다. 예를 들면, 추출부(105)는 외부 루프 및 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 내부 루프의 제 1 루프 실행 횟수 정보 및 외부 루프의 제 2 루프 실행 횟수 정보를 추출할 수 있다. 루프 컨트롤 명령어란 루프가 실행되는 횟수를 제어할 수 있는 명령어이며, 루프 실행 횟수 정보를 포함할 수 있다.
루프 병합부(110)는 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)를 상기 추출된 루프 실행 횟수 정보에 기초하여 병합할 수 있다.
예를 들면, 루프 병합부(110)는 내부 루프의 제 1 루프 실행 횟수 정보 및 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하고, 제 3 루프 실행 횟수 정보만큼 병합된 루프의 명령어들을 실행할 수 있는 루프 컨트롤 명령어를 생성할 수 있다. 제 3 루프 실행 횟수 정보는 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보의 곱일 수 있다. 예를 들면, 제 1 루프 실행 횟수가 10이고, 제 2 루프 실행 횟수가 8인 경우, 제 3 루프 실행 횟수는 80이 된다.
루프 병합부(110)는 제 1 루프 실행 횟수 정보를 프로세싱 엘리먼트(132)의 주파수 레지스터 파일(150)에 저장하는 저장 명령어를 생성할 수 있다. 루프 병합부(110)는 생성된 루프 컨트롤 명령어가 병합된 루프에 포함된 명령어 중 가장 늦게 실행되도록, 생성된 루프 컨트롤 명령어의 위치를 이동시킬 수 있다. 다만, 생성된 루프 컨트롤 명령어가 반드시 병합된 루프에 포함된 명령어 중 가장 늦게 실행되어야 하는 것은 아니다. 루프 병합부(110)는 루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경할 수 있다. 루프 병합부(110)는 주파수 레지스터 파일(150) 중 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 생성하여 외부 루프의 명령어에 삽입할 수 있다. 위치 정보는 주소값일 수 있다. 이에 대한 구체적인 설명은 도 2a 내지 도 2d를 참조하여 설명하겠다.
스케줄러(120)는 중첩 루프에 포함된 다수의 명령어들을 재구성 가능 어레이(130)에 포함된 다수의 프로세싱 엘리먼트들에 할당할 수 있다. 예를 들면, 스케줄러(120)는 병합된 루프 중 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하고, 병합된 루프 중 외부 루프의 명령어를 내부 루프에 포함된 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당할 수 있다.
재구성 가능 어레이(130)는 레지스터 파일(131) 및 다수의 프로세싱 엘리먼트(processing element; PE)(132)를 포함한다. 재구성 가능 어레이(130)는 최적의 연산을 수행하도록 하드웨어적 구성을 변경하는 것이 가능하다. 예를 들면, 재구성 가능 어레이(130)는 연산의 종류에 따라 다수의 프로세싱 엘리먼트들 간의 연결 상태를 변경할 수 있다.
레지스터 파일(131)은 프로세싱 엘리먼트들(132) 간의 데이터 전달을 위해 사용되거나, 명령어 실행시 필요한 각종 데이터를 저장한다. 예를 들면, 각각의 프로세싱 엘리먼트(132)는 레지스터 파일(131)에 접속하여 명령어 실행 시 사용되는 데이터를 읽거나 쓰는 것이 가능하다. 다만, 모든 프로세싱 엘리먼트들(132)이 서로 연결되는 것이 아니기 때문에, 특정 프로세싱 엘리먼트의 경우에는 레지스터 파일(131)에 접속하기 위해 다른 프로세싱 엘리먼트를 경유할 수도 있다.
프로세싱 엘리먼트(132)들은 할당된 명령어를 실행할 수 있다. 프로세싱 엘리먼트(132)들의 연결 상태 및 동작 순서는 처리하고자 하는 작업에 따라 변경될 수 있다.
프로세싱 엘리먼트들(PE1, PE2, PE3, PE4, PE5, PE6, PE7, PE8, PE9, PE10, PE11, PE12)은 주파수 레지스터 파일 및 제어부를 포함할 수 있다. 예를 들면, 프로세싱 엘리먼트(PE1)는 주파수 레지스터 파일(150) 및 제어부(151)를 포함할 수 있다. 제어부(151)는 카운터(152)를 포함할 수 있다.
주파수 레지스터 파일(150)은 내부 루프의 제 1 루프 실행 횟수 정보를 저장할 수 있다.
제어부(151)는 프로세싱 엘리먼트의 구동을 제어할 수 있다.
카운터(152)는 설정된 시간마다 값을 증가시켜 카운터 값을 출력할 수 있다. 예를 들면, 카운터(152)는 루프에 포함된 명령어가 실행될 때마다 값을 증가시켜 카운터 값을 출력할 수 있다. 또 다른 예를 들면, 카운터(152)는 루프가 1번 실행될 때마다 값을 증가시켜 카운터 값을 출력할 수 있다. 루프에 포함된 명령어가 실행될 때마다 값을 증가시키는 방식('제 1 방식')이 루프가 1번 실행될 때마다 값을 증가시키는 방식('제 2 방식')보다 더 정밀한 방식일 수 있다. 예를 들면, 제 1 방식인 경우, 카운터 값에 기초하여 현재 실행되고 있는 명령어가 어디에 위치하는 명령어인지를 용이하게 인식할 수 있거나 실행이 정지되었을 때 어느 명령어에서 정지되었는지 등을 용이하게 인식할 수 있다. 반면에, 제 2 방식인 경우, 루프 단위로 카운터 되기 때문에 어떤 명령어가 실행되는지 등을 정밀하게 인식할 수 없다.
제어부(151)는 스케줄러(120)에 의해 할당된 명령어에 실행 오퍼랜드가 존재하는지 여부를 판단한다. 실행 오퍼랜드가 존재하는 경우, 제어부(151)는 주파수 레지스터 파일(150)에 저장된 제 1 루프 실행 횟수와 카운터(152)의 카운터 값이 동일할 때마다, 프로세싱 엘리먼트(PE1)에 할당된 명령어를 실행할 수 있다. 반면에, 실행 오퍼랜드가 존재하지 않는 경우, 제어부(151)는 제 1 루프 실행 횟수 및 카운터 값과 상관없이 프로세싱 엘리먼트(PE1)에 할당된 명령어를 실행할 수 있다. 실행 오퍼랜드가 존재하는 경우 외부 루프의 명령어가 프로세싱 엘리먼트에 할당된 것이고, 실행 오퍼랜드가 존재하지 않는 경우 내부 루프의 명령어가 프로세싱 엘리먼트에 할당된 것이다.
예를 들면, 제 1 루프 실행 횟수가 16이고, 제 2 루프 실행 횟수가 8인 경우, 제 3 루프 실행 횟수는 128로 가정한다. 외부 루프가 1번 실행될 때마다, 내부 루프는 16번 실행된다. 따라서, 루프 병합 전의 내부 루프의 총 루프 실행 횟수는 외부 루프가 8번 실행되므로, 내부 루프는 총 16*8=128번 실행된다.
제어부(151)는 할당된 명령어 중 실행 오퍼랜드가 존재하는지 여부를 판단한다. 실행 오퍼랜드가 존재하지 않는 경우, 제어부(151)는 프로세싱 엘리먼트(PE1)에 할당된 명령어를 제 3 루프 실행 횟수인 128번 실행할 수 있다. 다시 말해, 프로세싱 엘리먼트(PE1)은 내부 루프의 명령어('실행 오퍼랜드가 없음')을 제 3 루프 실행 횟수인 128번 실행한다.
반면에, 실행 오퍼랜드가 존재하는 경우, 제어부(151)는 카운터(152)에서 카운트된 값이 제 1 루프 실행 횟수 값인 16이 되면, 프로세싱 엘리먼트(PE1)에 할당된 명령어를 실행할 수 있다. 다시 말하면, 프로세싱 엘리먼트는 외부 루프의 명령어('실행 오퍼랜드가 있음')을 병합된 루프가 실행('총 128번')되는 동안 총 8번 실행한다.
내부 루프의 총 루프 실행 횟수('128') 및 외부 루프의 총 루프 실행 횟수('8')는 루프 병합 전과 루프 병합 후가 동일하다.
본 발명에 따른 재구성 가능 프로세서는 실행 오퍼랜드를 포함하는 외부 루프의 명령어인 경우, 주파수 레지스터 파일 및 제어부를 이용하여 프로세싱 엘리먼트가 외부 루프의 명령어가 병합전과 동일한 횟수만큼 실행되도록 조절할 수 있다.
메모리(140)는 프로세싱 엘리먼트들(132)간의 연결 상태에 관한 정보, 명령어들 등과 같이 프로세싱에 필요한 정보 및 프로세싱의 결과 정보가 저장될 수 있다.예를 들면, 메모리(140)는 처리할 데이터를 저장하거나 처리 결과를 저장할 수 있다. 또 다른 예를 들면, 메모리(140)에는 재구성 가능 프로세서(100)의 구동시 필요한 정보, 재구성 가능 어레이의 연결 상태 정보, 재구성 가능 어레이의 동작 방법에 대한 정보 등이 저장될 수 있다.
재구성 가능 프로세서는 중첩 루프에 포함된 내부 루프 및 외부 루프를 병합하고, 병합된 루프를 프로세싱 엘리먼트(processing element; PE)에 병렬적으로 할당함으로써, 중첩 루프의 처리 시간을 단축할 수 있을 뿐만 아니라 코드 길이를 줄일 수 있다.
도 2a, 도 2b, 도 2c 및 도 2d는 본 발명의 일실시예에 따른 루프 병합부가 중첩 루프를 병합하는 과정을 설명하기 위한 도면이다.
도 1 및 도 2a를 참조하면, 일 예에 따른 어셈블리 코드는 5개의 코드 블럭(code block; cb)으로 이루어질 수 있다. 'mov A, B'는 B의 값을 A에 저장하는 명령어이고, 'add A <- B, C'는 B와 C의 값을 더하여 A에 저장하는 명령어이고, 'bne A, B, C'는 A가 B와 동일하지 않으면 C에 대응되는 코드 블럭을 실행시키고, A가 B와 동일하면 현재 코드 블럭의 다음에 위치한 코드 블럭을 실행하는 명령어이다. #0x0, #0x10 등은 16진수 값을 의미한다. 'bne' 명령어는 루프 컨트롤 명령어이고, '#0x10'은 루프 실행 횟수 정보이다. '#0x10'을 10진수로 표현하면, '16'이다.
추출부(105)는 내부 루프(200)에 포함된 명령어 중 루프 컨트롤 명령어(201)으로부터 제 1 루프 실행 횟수 정보(202)를 추출한다. 제 1 루프 실행 횟수 정보(202)는 "#0x10"이며, 10진수로 표현하면 '16'이다. 추출부(105)는 외부 루프(210)에 포함된 명령어 중 루프 컨트롤 명령어(211)으로부터 제 2 루프 실행 횟수 정보(212)를 추출한다. 제 2 루프 실행 횟수 정보(202)는 "#0x8"이며, 10진수로 표현하면 '8'이다.
도 2b를 참조하면, 루프 병합부(110)는 내부 루프의 제 1 루프 실행 횟수 정보(202) 및 외부 루프의 제 2 루프 실행 횟수 정보(212)에 기초하여 제 3 루프 실행 횟수 정보(232)를 생성할 수 있다. 예를 들면, 루프 병합부(110)는 제 1 루프 실행 횟수 정보(202) 및 제 2 루프 실행 횟수 정보(212)를 곱하고, 곱한 값을 제 3 루프 실행 횟수 정보(232)로 생성할 수 있다. 예를 들면, 루프 병합부(110)는 제 1 루프 실행 횟수인 '16'과 제 2 루프 실행 횟수인 '8'을 곱한 값('128')을 제 3 루프 실행 횟수 정보(232)로 생성할 수 있다. 루프 병합부(110)는 제 3 루프 실행 횟수 정보(232)만큼 병합된 루프의 명령어들을 실행할 수 있는 루프 컨트롤 명령어(231)을 생성할 수 있다. 루프 병합부(110)는 내부 루프의 루프 컨트롤 명령어(201) 및 외부 루프의 루프 컨트롤 명령어(212)을 삭제할 수 있다.
루프 병합부(110)는 제 1 루프 실행 횟수 정보를 주파수 레지스터 파일(150)에 저장하는 저장 명령어(241)을 생성할 수 있다. 'freq A, B'는 B 값을 A에 저장하는 저장 명령어이다. 예를 들면, 'freq fO, #0x10'은 주파수 레지스터 파일(150) 중 f0에 대응되는 위치에 "#0x10"값을 저장하는 명령어이다. 루프 병합부(110)는 새로운 코드 블럭(242)을 생성하고, 생성된 코드 블럭(242)에 생성된 제어 명령어(241)을 삽입할 수 있다.
도 2c를 참조하면, 루프 병합부(110)는 루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경할 수 있다. 예를 들면, 루프 병합부(110)는 루프 벗기기(loop peeling) 기법을 사용하여 코드 블럭('cb1')에 존재하는 명령어들을 코드 블럭('cb') 및 코드 블럭('cb3')으로 복사시킬 수 있다. 루프 병합부(110)는 주파수 레지스터 파일 중 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드('f0')(250)를 외부 루프의 명령어에 삽입할 수 있다.
도 2d를 참조하면, 루프 병합부(110)는 루프 컨트롤 명령어(231)을 코드 블럭('cb3')의 가장 아래쪽으로 이동시킬 수 있다. 즉, 루프 컨트롤 명령어(231)이 내부 루프 및 외부 루프의 명령어 중 가장 늦게 실행된다. 예를 들면, 루프 병합부(110)는 루프 컨트롤 명령어(231)에 포함된 레지스터 'r11' 에 저장된 값을 다른 레지스터 'r21'에 저장시키는 이동 명령어(260)을 생성하여 삽입하고, 루프 컨트롤 명령어(231)에 포함된 레지스터 'r11'를 레지스터 'r21'로 변경할 수 있다. 변경된 루프 컨트롤(231) 명령어를 가장 아래쪽으로 이동시킬 수 있다.
루프 컨트롤 명령어(231)의 레지스터를 변경하지 않고 가장 아래쪽으로 이동시키면, 루프 컨트롤 명령어(231)의 레지스터 'r11'에 포함된 값이 코드 블럭('cb3')의 "mov r11, #0x0 (f0)"명령어에 의해서 변경된다. 따라서, 이를 방지하기 위해, 이동 명령어(260)을 생성하여 삽입하고, 루프 컨트롤 명령어의 레지스터를 변경하는 것이다.
루프 병합부는 위와 같은 과정을 통해 내부 루프 및 외부 루프는 하나의 루프(240)로 병합할 수 있다.
제어부(151)는 할당된 명령어에 실행 오퍼랜드('f0')가 존재하는지 여부를 판단한다. 실행 오퍼랜드가 존재하는 경우, 제어부(151)는 주파수 레지스터 파일(150)에 저장된 제 1 루프 실행 횟수와 카운터(152)의 카운터 값이 동일할 때마다, 프로세싱 엘리먼트(PE1)에 할당된 명령어를 실행할 수 있다. 반면에, 실행 오퍼랜드('f0')가 존재하지 않는 경우, 제어부(151)는 제 1 루프 실행 횟수 및 카운터 값과 상관없이 프로세싱 엘리먼트(PE1)에 할당된 명령어를 실행할 수 있다. 카운터(152)는 설정된 시간마다 값을 증가시킬 수 있다. 예를 들면, 카운터(152)는 루프에 포함된 명령어어가 실행될 때마다 값을 증가시킬 수 있다. 또 다른 예를 들면, 카운터(152)는 루프가 1번 실행될 때마다 값을 증가시킬 수 있다.
도 3은 내부 루프 및 외부 루프의 명령어들이 프로세싱 엘리먼트에 할당된 상태를 설명하기 위한 도면이다.
도 1 및 도 3 을 참조하면, 프로세싱 엘리먼트들은 1 사이클(cycle)마다 실행된다. 병합된 루프는 사이클 0, 1, 2가 모두 실행될 때마다, 1번 실행되는 것이다. 예를 들면, 병합된 루프가 8번 실행된다는 것은 사이클 0, 1, 2가 8번 실행된다는 것을 의미한다.
카운터(152)는 설정된 시간마다 값을 증가시킬 수 있다. 예를 들면, 카운터(152)는 루프에 포함된 명령어어가 실행될 때마다 값을 증가시킬 수 있다. 카운터(152)는 각각의 사이클마다 값을 증가시킬 수 있다. 또 다른 예를 들면, 카운터(152)는 루프가 1번 실행될 때마다 값을 증가시킬 수 있다. 카운터(152)는 사이클 0, 1, 2가 모두 실행될 때마다 값을 증가시킬 수 있다.
스케줄러(120)는 병합된 루프 중 내부 루프의 명령어를 다수의 프로세싱 엘리먼트(PE1, PE2, PE3, PE4, PE5, PE6, PE7, PE8, PE9, PE10, PE11, PE12) 중 일부에 할당할 수 있다. 그 다음, 스케줄러(120)는 병합된 루프 중 외부 루프의 명령어를 내부 루프에 포함된 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당할 수 있다.
이와 같이, 내부 루프에 포함된 명령어를 프로세싱 엘리먼트에 할당하고, 명령어가 할당되지 않은 프로세싱 엘리먼트에 외부 루프에 포함된 명령어를 할당함으로써, 재구성 가능 프로세서는 내루 루프를 처리하는 과정에 영향을 주지 않으면서 외부 루프를 병렬적으로 처리할 수 있는 것이다. 따라서, 재구성 가능 프로세서는 내부 루프 및 외부 루프를 포함하는 중첩 루프를 처리하는 시간을 단축할 수 있다.
도 4는 본 발명의 일실시예에 따른 중첩 루프를 병합하는 방법을 설명하기 위한 흐름도이다.
도 1 및 도 4를 참조하면, 외부 루프 및 내부 루프에 포함된 명령어 중 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보를 추출한다. 내부 루프의 제 1 루프 실행 횟수 정보 및 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성한다(400). 제 3 루프 실행 횟수 정보만큼 병합된 루프의 명령어들을 실행할 수 있는 루프 컨트롤 명령어를 생성할 수 있다(410). 제 3 루프 실행 횟수 정보는 제 1 루프 실행 횟수 정보 및 제 2 루프 실행 횟수 정보의 곱일 수 있다. 제 1 루프 실행 횟수 정보를 주파수 레지스터 파일에 저장하는 저장 명령어를 생성할 수 있다(420). 루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경할 수 있다(430). 제 1 루프 실행 횟수 정보를 저장하고 있는 주파수 레지스터 파일의 위치 정보를 포함하는 실행 오퍼랜드를 생성하여 외부 루프의 명령어에 삽입할 수 있다(440). 생성된 루프 컨트롤 명령어가 병합된 루프에 포함된 명령어 중 가장 늦게 실행되도록, 생성된 루프 컨트롤 명령어의 위치를 이동시킬 수 있다(450). 이와 같은 과정을 통해, 중첩 루프를 병합할 수 있다.
또한, 중첩 루프가 3개 이상인 경우, 위와 같은 과정을 통해 3개의 루프를 1개의 루프로 병합할 수 있다. 예를 들면, 제 1 루프, 제 2 루프 및 제 3 루프가 중첩 루프이고 제 1 루프가 가장 내부에 존재하는 루프인 경우, 제 1 루프 및 제 2 루프를 위와 같은 과정을 통해 병합한다. 그 다음, 병합된 루프 및 제 3 루프를 위와 같은 과정을 통해 병합한다.
도 5는 본 발명의 일실시예에 따른 중첩 루프를 처리하는 방법을 설명하기 위한 흐름도이다.
도 4 및 도 5를 참조하면, 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출한다. 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프를 추출된 루프 실행 횟수 정보에 기초하여 병합한다(500). 병합하는 과정은 도 4와 같은 과정을 통해 병합될 수 있다. 병합된 루프 중 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당한다(510). 병합된 루프 중 외부 루프의 명령어를 내부 루프의 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당한다(520). 할당된 명령어에 실행 오퍼랜드가 존재하는지 여부를 판단한다(530). 실행 오퍼랜드가 존재하는 경우, 프로세싱 엘리먼트가 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 카운터 값이 동일할 때마다, 할당된 명령어를 실행한다(540). 반면에, 실행 오퍼랜드가 존재하지 않는 경우, 프로세싱 엘리먼트가 제 1 루프 실행 횟수 및 카운터 값과 상관없이 프로세싱 엘리먼트(PE1)에 할당된 명령어를 실행할 수 있다(550).
중첩 루프 처리 방법은 중첩 루프에 포함된 내부 루프 및 외부 루프를 병합하고, 병합된 루프를 프로세싱 엘리먼트(processing element; PE)에 병렬적으로 할당함으로써, 중첩 루프의 처리 시간을 단축할 수 있다.
설명된 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
또한, 실시예는 그 설명을 위한 것이며, 그 제한을 위한 것이 아님을 주의하여야 한다. 또한, 본 발명의 기술분야의 통상의 전문가라면 본 발명의 기술사상의 범위에서 다양한 실시예가 가능함을 이해할 수 있을 것이다.
또한, 본 발명의 일 실시예에 의하면, 전술한 방법은, 프로그램이 기록된 매체에 프로세서가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 프로세서가 읽을 수 있는 매체의 예로는, ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장장치 등이 있으며, 캐리어 웨이브(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다.
Claims (20)
- 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하는 추출부;
상기 추출된 루프 실행 횟수 정보에 기초하여 상기 내부 루프 및 상기 외부 루프를 병합하는 루프 병합부
제 1 루프 실행 횟수 정보를 저장하는 주파수 레지스터 파일; 및
설정된 시간마다 값을 증가시켜 카운터 값을 출력하는 카운터를 포함하는 다수의 프로세싱 엘리먼트를 포함하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 1 항에 있어서,
상기 병합된 루프 중 상기 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하고, 상기 병합된 루프 중 상기 외부 루프의 명령어를 상기 내부 루프에 포함된 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당하는 스케줄러를 더 포함하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 1 항에 있어서,
상기 루프 병합부는,
상기 내부 루프의 제 1 루프 실행 횟수 정보 및 상기 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하고,
상기 제 3 루프 실행 횟수 정보만큼 상기 병합된 루프의 명령어들이 실행되도록 제어하는 루프 컨트롤 명령어를 생성하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 1 항에 있어서,
상기 루프 병합부는,
루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서. - 제 1 항에 있어서,
상기 루프 병합부는,
상기 제 1 루프 실행 횟수 정보를 상기 주파수 레지스터 파일에 저장하는 저장 명령어를 생성하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 5 항에 있어서,
상기 루프 병합부는,
상기 주파수 레지스터 파일 중 상기 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 상기 외부 루프의 명령어에 삽입하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 6 항에 있어서,
상기 프로세싱 엘리먼트는,
할당된 명령어에 상기 실행 오퍼랜드가 존재하는지 여부를 판단하고, 상기 실행 오퍼랜드가 존재하는 경우, 상기 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 상기 카운터 값이 동일할 때마다, 할당된 명령어를 실행하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 5 항에 있어서,
상기 카운터는,
루프에 포함된 명령이 실행되는 시간마다 값을 증가시키거나 루프가 실행되는 시간마다 값을 증가시키는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 3 항에 있어서,
상기 루프 병합부는
상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보를 상기 외부 루프 및 상기 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 추출하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 제 3 항에 있어서,
상기 제 3 루프 실행 횟수 정보는
상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보의 곱인, 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
- 중첩 루프를 처리하기 위한 재구성 가능 프로세서가,
중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하는 단계; 및
상기 추출된 루프 실행 횟수 정보에 기초하여 상기 내부 루프(inner loop) 및 상기 외부 루프(outer loop)를 병합하는 단계를 포함하되,
상기 병합하는 단계는,
제 1 루프 실행 횟수 정보를 프로세싱 엘리먼트에 포함된 주파수 레지스터 파일에 저장하는 저장 명령어를 생성하는 단계를 포함하는 중첩 루프(nested loop) 처리 방법.
- 제 11 항에 있어서,
상기 병합된 루프 중 상기 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하는 단계; 및
상기 병합된 루프 중 상기 외부 루프의 명령어를 상기 내부 루프의 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
- 제 11 항에 있어서,
상기 병합하는 단계는,
상기 내부 루프의 제 1 루프 실행 횟수 정보 및 상기 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하는 단계; 및
상기 제 3 루프 실행 횟수 정보만큼 상기 병합된 루프의 명령어들이 실행되도록 제어하는 루프 컨트롤 명령어를 생성하는 단계를 포함하는 중첩 루프(nested loop) 처리 방법.
- 제 11 항에 있어서,
상기 병합하는 단계는,
루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
- 삭제
- 제 11 항에 있어서,
상기 병합하는 단계는,
상기 주파수 레지스터 파일 중 상기 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 상기 외부 루프의 명령어에 삽입하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
- 제 16 항에 있어서,
할당된 명령어에 상기 실행 오퍼랜드가 존재하는지 여부를 판단하는 단계; 및
상기 실행 오퍼랜드가 존재하는 경우, 상기 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 카운터에 의해서 출력된 카운터 값이 동일할 때마다, 할당된 명령어를 실행하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
- 제 17 항에 있어서,
상기 카운터는
루프에 포함된 명령이 실행되는 시간마다 값을 증가시키거나 루프가 실행되는 시간마다 값을 증가시켜 카운터 값을 출력하는 중첩 루프(nested loop) 처리 방법.
- 제 13 항에 있어서,
상기 추출하는 단계는
상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보를 상기 외부 루프 및 상기 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 추출하는 단계를 포함하는 중첩 루프(nested loop) 처리 방법.
- 제 13 항에 있어서,
상기 제 3 루프 실행 횟수 정보는 상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보의 곱인, 중첩 루프(nested loop) 처리 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020100103095A KR101756820B1 (ko) | 2010-10-21 | 2010-10-21 | 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 |
US13/086,629 US8930929B2 (en) | 2010-10-21 | 2011-04-14 | Reconfigurable processor and method for processing a nested loop |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020100103095A KR101756820B1 (ko) | 2010-10-21 | 2010-10-21 | 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20120041581A KR20120041581A (ko) | 2012-05-02 |
KR101756820B1 true KR101756820B1 (ko) | 2017-07-12 |
Family
ID=45974099
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020100103095A KR101756820B1 (ko) | 2010-10-21 | 2010-10-21 | 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8930929B2 (ko) |
KR (1) | KR101756820B1 (ko) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10078620B2 (en) * | 2011-05-27 | 2018-09-18 | New York University | Runtime reconfigurable dataflow processor with multi-port memory access module |
CN103218347B (zh) * | 2013-04-28 | 2016-01-20 | 清华大学 | 面向可重构阵列的多参数融合性能建模方法 |
KR102062208B1 (ko) | 2013-05-03 | 2020-02-11 | 삼성전자주식회사 | 멀티스레드 프로그램 코드의 변환 장치 및 방법 |
US11106438B2 (en) * | 2020-03-27 | 2021-08-31 | Intel Corporation | Integration of automated complier dataflow optimizations |
CN112000370B (zh) * | 2020-08-27 | 2022-04-15 | 北京百度网讯科技有限公司 | 循环指令的处理方法、装置、设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090077351A1 (en) * | 2004-10-29 | 2009-03-19 | Takuya Nakaike | Information processing device and compiler |
US20090235052A1 (en) * | 2002-06-25 | 2009-09-17 | Seiko Epson Corporation | Data Processing Device and Electronic Equipment |
US20100153654A1 (en) * | 2002-08-07 | 2010-06-17 | Martin Vorbach | Data processing method and device |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2078315A1 (en) | 1991-09-20 | 1993-03-21 | Christopher L. Reeve | Parallel processing apparatus and method for utilizing tiling |
US6035125A (en) * | 1997-07-25 | 2000-03-07 | International Business Machines Corporation | Method and system for generating compact code for the loop unrolling transformation |
US6192515B1 (en) * | 1998-07-17 | 2001-02-20 | Intel Corporation | Method for software pipelining nested loops |
US6341371B1 (en) * | 1999-02-23 | 2002-01-22 | International Business Machines Corporation | System and method for optimizing program execution in a computer system |
US6820250B2 (en) | 1999-06-07 | 2004-11-16 | Intel Corporation | Mechanism for software pipelining loop nests |
US6539541B1 (en) * | 1999-08-20 | 2003-03-25 | Intel Corporation | Method of constructing and unrolling speculatively counted loops |
US6374403B1 (en) * | 1999-08-20 | 2002-04-16 | Hewlett-Packard Company | Programmatic method for reducing cost of control in parallel processes |
US6988266B2 (en) * | 2001-05-08 | 2006-01-17 | Sun Microsystems, Inc. | Method of transforming variable loops into constant loops |
CA2392122A1 (en) * | 2002-06-28 | 2003-12-28 | Ibm Canada Limited-Ibm Canada Limitee | An unrolling transformation on nested loops |
WO2005029318A2 (en) * | 2003-09-19 | 2005-03-31 | University Of Delaware | Methods and products for processing loop nests |
KR100722770B1 (ko) | 2005-01-31 | 2007-05-30 | 재단법인서울대학교산학협력재단 | 조건실행을 지원하는 재구성 가능한 프로세싱 요소의배열구조 |
US8902989B2 (en) * | 2005-04-27 | 2014-12-02 | Broadcom Corporation | Decoder system for decoding multi-standard encoded video |
GB0524720D0 (en) | 2005-12-05 | 2006-01-11 | Imec Inter Uni Micro Electr | Ultra low power ASIP architecture II |
US7926046B2 (en) * | 2005-12-13 | 2011-04-12 | Soorgoli Ashok Halambi | Compiler method for extracting and accelerator template program |
KR100707781B1 (ko) * | 2006-01-19 | 2007-04-17 | 삼성전자주식회사 | 컴퓨터 시스템에서 배열 연산을 효율적으로 처리하는 방법 |
US20080141013A1 (en) | 2006-10-25 | 2008-06-12 | On Demand Microelectronics | Digital processor with control means for the execution of nested loops |
US8108845B2 (en) * | 2007-02-14 | 2012-01-31 | The Mathworks, Inc. | Parallel programming computing system to dynamically allocate program portions |
ATE463788T1 (de) * | 2007-06-26 | 2010-04-15 | Ericsson Telefon Ab L M | Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen |
-
2010
- 2010-10-21 KR KR1020100103095A patent/KR101756820B1/ko active IP Right Grant
-
2011
- 2011-04-14 US US13/086,629 patent/US8930929B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090235052A1 (en) * | 2002-06-25 | 2009-09-17 | Seiko Epson Corporation | Data Processing Device and Electronic Equipment |
US20100153654A1 (en) * | 2002-08-07 | 2010-06-17 | Martin Vorbach | Data processing method and device |
US20090077351A1 (en) * | 2004-10-29 | 2009-03-19 | Takuya Nakaike | Information processing device and compiler |
Also Published As
Publication number | Publication date |
---|---|
KR20120041581A (ko) | 2012-05-02 |
US20120102496A1 (en) | 2012-04-26 |
US8930929B2 (en) | 2015-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102497178B1 (ko) | 재진입 큐를 사용하는 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 루프 실행 제어 | |
KR102545047B1 (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 중지 신호를 사용한 역압 제어 | |
US9672035B2 (en) | Data processing apparatus and method for performing vector processing | |
KR20200139741A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 다수의 유형의 스레드 식별자 | |
KR20200138353A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭의 루프 스레드 순서 실행 제어 | |
KR20200138787A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 효율적인 루프 실행 | |
KR20200138339A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 조건부 브랜칭 제어 | |
KR102504080B1 (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭 | |
CN101495959B (zh) | 组合微处理器内的多个寄存器单元的方法和设备 | |
KR20200139742A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭의 실행 제어 | |
KR101756820B1 (ko) | 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 | |
CN101373426A (zh) | 用于执行simd运算的数据处理系统及其方法 | |
JP2010532063A (ja) | 条件命令を無条件命令および選択命令へと拡張する方法およびシステム | |
US20140047218A1 (en) | Multi-stage register renaming using dependency removal | |
US11366669B2 (en) | Apparatus for preventing rescheduling of a paused thread based on instruction classification | |
KR101812912B1 (ko) | 자율 메모리를 위한 방법 및 시스템 | |
US20140317626A1 (en) | Processor for batch thread processing, batch thread processing method using the same, and code generation apparatus for batch thread processing | |
US20150100950A1 (en) | Method and apparatus for instruction scheduling using software pipelining | |
CN103970714A (zh) | 用于共享功能逻辑的设备和方法及其可重配置处理器 | |
CN103268223B (zh) | 在编译过程中改善乘加类指令执行性能的方法 | |
CN104035825A (zh) | 跳转源列表处理方法、装置及编译器 | |
US9383981B2 (en) | Method and apparatus of instruction scheduling using software pipelining | |
WO2023129546A1 (en) | Compiler-based input synchronization for processor with variant stage latencies | |
US9280330B2 (en) | Apparatus and method for executing code | |
CN112463218A (zh) | 指令发射控制方法及电路、数据处理方法及电路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
GRNT | Written decision to grant |