KR101756820B1 - 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 - Google Patents

중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 Download PDF

Info

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
Application number
KR1020100103095A
Other languages
English (en)
Other versions
KR20120041581A (ko
Inventor
안민욱
유동훈
이진석
이강웅
김태송
김원섭
안희진
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020100103095A priority Critical patent/KR101756820B1/ko
Priority to US13/086,629 priority patent/US8930929B2/en
Publication of KR20120041581A publication Critical patent/KR20120041581A/ko
Application granted granted Critical
Publication of KR101756820B1 publication Critical patent/KR101756820B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • G06F15/7892Reconfigurable logic embedded in CPU, e.g. reconfigurable unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent 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

중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법{RECONFIGURABLE PROCESSOR AND METHOD FOR PROCESSING NESTED LOOP}
중첩 루프(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는 본 발명의 일실시예에 따른 중첩 루프를 처리하는 방법을 설명하기 위한 흐름도이다.
이하, 첨부된 도면을 참조하여 발명을 실시하기 위한 구체적인 내용에 대하여 상세하게 설명한다.
도 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)

  1. 중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하는 추출부;
    상기 추출된 루프 실행 횟수 정보에 기초하여 상기 내부 루프 및 상기 외부 루프를 병합하는 루프 병합부
    제 1 루프 실행 횟수 정보를 저장하는 주파수 레지스터 파일; 및
    설정된 시간마다 값을 증가시켜 카운터 값을 출력하는 카운터를 포함하는 다수의 프로세싱 엘리먼트를 포함하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  2. 제 1 항에 있어서,
    상기 병합된 루프 중 상기 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하고, 상기 병합된 루프 중 상기 외부 루프의 명령어를 상기 내부 루프에 포함된 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당하는 스케줄러를 더 포함하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  3. 제 1 항에 있어서,
    상기 루프 병합부는,
    상기 내부 루프의 제 1 루프 실행 횟수 정보 및 상기 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하고,
    상기 제 3 루프 실행 횟수 정보만큼 상기 병합된 루프의 명령어들이 실행되도록 제어하는 루프 컨트롤 명령어를 생성하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  4. 제 1 항에 있어서,
    상기 루프 병합부는,
    루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  5. 제 1 항에 있어서,
    상기 루프 병합부는,
    상기 제 1 루프 실행 횟수 정보를 상기 주파수 레지스터 파일에 저장하는 저장 명령어를 생성하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  6. 제 5 항에 있어서,
    상기 루프 병합부는,
    상기 주파수 레지스터 파일 중 상기 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 상기 외부 루프의 명령어에 삽입하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  7. 제 6 항에 있어서,
    상기 프로세싱 엘리먼트는,
    할당된 명령어에 상기 실행 오퍼랜드가 존재하는지 여부를 판단하고, 상기 실행 오퍼랜드가 존재하는 경우, 상기 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 상기 카운터 값이 동일할 때마다, 할당된 명령어를 실행하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  8. 제 5 항에 있어서,
    상기 카운터는,
    루프에 포함된 명령이 실행되는 시간마다 값을 증가시키거나 루프가 실행되는 시간마다 값을 증가시키는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  9. 제 3 항에 있어서,
    상기 루프 병합부는
    상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보를 상기 외부 루프 및 상기 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 추출하는 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  10. 제 3 항에 있어서,
    상기 제 3 루프 실행 횟수 정보는
    상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보의 곱인, 중첩 루프를 처리하기 위한 재구성 가능 프로세서.
  11. 중첩 루프를 처리하기 위한 재구성 가능 프로세서가,
    중첩 루프(nested loop)에 포함된 내부 루프(inner loop) 및 외부 루프(outer loop)로부터 루프 실행 횟수 정보를 추출하는 단계; 및
    상기 추출된 루프 실행 횟수 정보에 기초하여 상기 내부 루프(inner loop) 및 상기 외부 루프(outer loop)를 병합하는 단계를 포함하되,
    상기 병합하는 단계는,
    제 1 루프 실행 횟수 정보를 프로세싱 엘리먼트에 포함된 주파수 레지스터 파일에 저장하는 저장 명령어를 생성하는 단계를 포함하는 중첩 루프(nested loop) 처리 방법.
  12. 제 11 항에 있어서,
    상기 병합된 루프 중 상기 내부 루프의 명령어를 다수의 프로세싱 엘리먼트 중 적어도 하나에 할당하는 단계; 및
    상기 병합된 루프 중 상기 외부 루프의 명령어를 상기 내부 루프의 명령어가 할당되지 않은 프로세싱 엘리먼트에 할당하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
  13. 제 11 항에 있어서,
    상기 병합하는 단계는,
    상기 내부 루프의 제 1 루프 실행 횟수 정보 및 상기 외부 루프의 제 2 루프 실행 횟수 정보에 기초하여 제 3 루프 실행 횟수 정보를 생성하는 단계; 및
    상기 제 3 루프 실행 횟수 정보만큼 상기 병합된 루프의 명령어들이 실행되도록 제어하는 루프 컨트롤 명령어를 생성하는 단계를 포함하는 중첩 루프(nested loop) 처리 방법.
  14. 제 11 항에 있어서,
    상기 병합하는 단계는,
    루프 벗기기(loop peeling) 기법을 사용하여 명령어의 위치를 변경하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
  15. 삭제
  16. 제 11 항에 있어서,
    상기 병합하는 단계는,
    상기 주파수 레지스터 파일 중 상기 제 1 루프 실행 횟수 정보가 저장된 위치 정보를 포함하는 실행 오퍼랜드를 상기 외부 루프의 명령어에 삽입하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
  17. 제 16 항에 있어서,
    할당된 명령어에 상기 실행 오퍼랜드가 존재하는지 여부를 판단하는 단계; 및
    상기 실행 오퍼랜드가 존재하는 경우, 상기 주파수 레지스터 파일에 저장된 제 1 루프 실행 횟수와 카운터에 의해서 출력된 카운터 값이 동일할 때마다, 할당된 명령어를 실행하는 단계를 더 포함하는 중첩 루프(nested loop) 처리 방법.
  18. 제 17 항에 있어서,
    상기 카운터는
    루프에 포함된 명령이 실행되는 시간마다 값을 증가시키거나 루프가 실행되는 시간마다 값을 증가시켜 카운터 값을 출력하는 중첩 루프(nested loop) 처리 방법.
  19. 제 13 항에 있어서,
    상기 추출하는 단계는
    상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보를 상기 외부 루프 및 상기 내부 루프에 포함된 루프 실행 횟수에 관한 정보가 포함된 루프 컨트롤 명령어로부터 추출하는 단계를 포함하는 중첩 루프(nested loop) 처리 방법.
  20. 제 13 항에 있어서,
    상기 제 3 루프 실행 횟수 정보는 상기 제 1 루프 실행 횟수 정보 및 상기 제 2 루프 실행 횟수 정보의 곱인, 중첩 루프(nested loop) 처리 방법.
KR1020100103095A 2010-10-21 2010-10-21 중첩 루프를 처리하기 위한 재구성 가능 프로세서 및 방법 KR101756820B1 (ko)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
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