KR100854720B1 - 루프 통합 방법 및 루프 통합 장치 - Google Patents

루프 통합 방법 및 루프 통합 장치 Download PDF

Info

Publication number
KR100854720B1
KR100854720B1 KR1020070028856A KR20070028856A KR100854720B1 KR 100854720 B1 KR100854720 B1 KR 100854720B1 KR 1020070028856 A KR1020070028856 A KR 1020070028856A KR 20070028856 A KR20070028856 A KR 20070028856A KR 100854720 B1 KR100854720 B1 KR 100854720B1
Authority
KR
South Korea
Prior art keywords
guard
loop
register
instruction
period
Prior art date
Application number
KR1020070028856A
Other languages
English (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 KR1020070028856A priority Critical patent/KR100854720B1/ko
Priority to US11/843,357 priority patent/US8549507B2/en
Application granted granted Critical
Publication of KR100854720B1 publication Critical patent/KR100854720B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Abstract

루프 통합 방법 및 루프 통합 장치가 개시된다. 본 발명의 루프 통합 방법은 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거하는 단계, 상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성하는 단계 및 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 상기 가드 코드의 가드를 산출하는 명령어로 상기 가드를 변환하는 단계를 포함하는 것을 특징으로 한다.
루프, 이프 컨버젼, 가드

Description

루프 통합 방법 및 루프 통합 장치 {LOOP COALESCING METHOD AND DEVICE USING THE SAME }
도 1은 본 발명의 일실시예에 따른 루프 통합 방법을 나타낸 동작 흐름도이다.
도 2는 본 발명의 일실시예에 따른 가장 안쪽 루프를 제거 전후의 프로그램 소스 코드이다.
도 3은 본 발명의 일실시예에 따른 이프 컨버젼하기 전 프로그램의 흐름도이다.
도 4는 본 발명의 일실시예에 따른 이프 컨버젼한 후 프로그램의 흐름도이다.
도 5는 본 발명의 일실시예에 따른 가드를 산출하는 레지스터를 나타낸 블록도이다.
도 6은 본 발명의 일실시예에 따른 가드를 산출하는 레지스터 및 카운터를 나타낸 블록도이다.
도 7은 본 발명의 일실시예에 따른 루프 통합 장치를 나타낸 블록도이다.
<도면의 주요 부분에 대한 부호의 설명>
110: 가장 안쪽 루프 제거 단계 510: 레지스터
120: 가드 코드 생성 단계 620: 카운터
130: 가드 변환 단계 630: 비교기(comparator)
본 발명은 컴파일러(compiler)에 관한 것으로, 특히 다중 루프(multiple loop)의 루프 통합(loop coalescing)에 관한 것이다.
프로세서 개발자들의 궁극적인 관심사는 프로세서의 동작을 보다 고속으로 만들기 위한 것이다. 이를 위해서 최근 프로세서 개발자들은 프로세서가 다수의 인스트럭션을 병렬적으로 수행하도록 하는 기술에 대해 연구를 집중하고 있다.
최근 연구되고 있는 기술 중에는 프로세서가 다수의 인스트럭션을 병렬적으로 수행하도록 하도록 하는 소프트웨어 파이프라인(software pipeline) 기법이 있다. 소프트웨어 파이프라인 기법에서 인스트럭션의 실행은 스테이지(stage)라고 불려지는 여러 단계로 부분 분류된다. 각 명령어는 각 스테이지를 통하여 순차적으로 처리된다. 각 명령어의 연산이 많은 스테이지에서 병렬적으로 수행되기 때문에 명령어의 처리 속도는 증가된다.
다만, 소프트웨어 파이프라인 기법을 효과적으로 적용하기 위해서는 다중 루프로 구성된 프로그램을 가장 안쪽 루프(inner-most loop)로 통합할 필요성이 있다.
또한, 소프트웨어 파이프라인 기법에서 명령어의 처리 속도는 제한될 수 있 다. 처리 속도가 제한되는 주요 원인은 프로그램 흐름의 변경, 데이터 의존성 등이 있을 수 있다.
프로그램 흐름의 변경은 조건문에 기인하여 일어날 수 있다. 조건문의 존재로 말미암아 발생되는 브랜치(branch)의 수가 증가할수록 명령어의 처리 속도는 감소하게 된다. 따라서, 조건문의 브랜치 수를 감소시킬 필요성이 절실하게 대두된다.
또한, 조건문에 있어서 조건을 판단하는 데에는 복잡한 연산을 필요로 하는 경우가 많다. 특히, 조건에 모듈로(modulo)과 같은 연산이 포함되어 있는 경우 이는 프로세서의 오버헤드(over head)를 증가시키는 원인이 된다.
따라서, 조건문의 브랜치 수를 줄일 필요가 있으며, 조건문에서 조건을 간단한 연산 등으로 대체하는 효과적인 루프 통합 방법 및 장치의 필요성이 절실하게 대두된다.
본 발명은 상술한 바와 같은 종래기술의 문제점을 해결하기 위해 안출된 것으로서, 다중 루프를 효율적으로 통합하는 것을 목적으로 한다.
또한, 본 발명은 프로그램의 흐름이 변경되지 않도록 조건문의 브랜치를 효율적으로 없애는 것을 목적으로 한다.
또한, 본 발명은 주기적으로 세팅되는 가드를 새로운 명령어를 이용하여 산출함으로써 간단한 연산만으로 가드를 산출하는 것을 목적으로 한다.
또한, 본 발명은 프로세서 자원을 재활용하여 효율적으로 루프 연산을 실행 하는 것을 목적으로 한다.
상기의 목적을 달성하고 종래기술의 문제점을 해결하기 위하여, 본 발명의 일실시예에 따른 루프 통합 방법은 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거하는 단계, 상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성하는 단계 및 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 상기 가드 코드의 가드를 산출하는 명령어로 상기 가드를 변환하는 단계를 포함하는 것을 특징으로 한다.
이 때, 상기 명령어는 상기 주기와 관련된 정보가 저장된 레지스터의 특정 비트를 그대로 출력하거나, 상기 레지스터 값을 카운터 값과 비교하여 상기 가드를 산출하는 것일 수 있다.
이 때, 상기 가드를 변환하는 단계는 상기 주기 그대로를 상기 레지스터에 저장하고, 상기 명령어가 호출될 때마다 1씩 증가하는 카운터 값을 상기 레지스터와 비교하여 상기 가드를 산출하는 것일 수 있다.
이 때, 상기 가드를 변환하는 단계는 상기 레지스터의 상기 주기에 상응하는 주소에만 제1 레벨값을 저장하고, 상기 명령어가 호출될 때마다 상기 레지스터의 리드 주소를 증가시켜서 상기 가드를 산출하는 것일 수도 있다.
이 때, 본 발명의 루프 통합 방법은 상기 변환된 가드의 논리값에 따라 상기 가장 안쪽 루프의 외부 연산을 실행하는 단계를 더 포함할 수 있다.
또한, 본 발명의 일실시예에 따른 루프 통합 장치는 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거하는 루프 제거부, 상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성 가드 코드 생성부 및 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 상기 가드 코드의 가드를 산출하는 명령어로 상기 가드를 변환하는 가드 변환부를 포함하는 것을 특징으로 한다.
이 때, 상기 명령어는 상기 주기와 관련된 정보가 저장된 레지스터의 특정 비트를 그대로 출력하거나, 상기 레지스터 값을 카운터 값과 비교하여 상기 가드를 산출하는 것일 수 있다.
이 때, 상기 가드 변환부는 상기 주기 그대로를 상기 레지스터에 저장하고, 상기 명령어가 호출될 때마다 1씩 증가하는 카운터 값을 상기 레지스터와 비교하여 상기 가드를 산출하는 것일 수 있다.
이 때, 상기 가드 변환부는 상기 레지스터의 상기 주기에 상응하는 주소에만 제1 레벨값을 저장하고, 상기 명령어가 호출될 때마다 상기 레지스터의 리드 주소를 증가시켜서 상기 가드를 산출하는 것일 수도 있다.
이 때, 본 발명의 일실시예에 따른 루프 통합 장치는 상기 변환된 가드의 논리값에 따라 상기 가장 안쪽 루프의 외부 연산을 실행하는 연산 실행부를 더 포함할 수 있다.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일실시예에 따른 루프 통합 방법을 나타낸 동작 흐름도이다.
도 1을 참조하면, 본 발명의 일실시예에 따른 루프 통합 방법은 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거한다(S110).
다만, 상기 가장 안쪽 루프를 제거한 프로그램이라도 궁극적으로는 원래의 프로그램과 같은 결과값을 반환해야 한다.
이 때, 상기 다중 루프는 이중 루프일 수 있다. 다만, 이중 루프를 초과하는 다중 루프일지라도, 가장 안쪽 루프를 제거하는 단계(S110)를 반복할 수 있다.
또한, 본 발명의 일실시예에 따른 루프 통합 방법은 상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성한다(S120).
이프 컨버젼을 통하여 여러 브랜치를 갖는 조건문이 단일 브랜치를 갖도록 변환될 수 있다. 또한, 이를 통하여 소프트웨어 파이프라인 기법을 적용하여 인스트럭션을 실행하는 경우 처리 속도를 크게 향상시킬 수 있게 된다.
가드 코드는 인스트럭션들과 인스트럭션들의 실행 여부를 결정하는 가드로 구성된다.
또한, 본 발명의 일실시예에 따른 루프 통합 방법은 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 상기 가드 코드의 가드의 논리값을 결정하는 명령어를 이용하여 상기 가드를 변환한다(S130). 즉, 본 발명의 일실시예에 따른 루프 통합 방법에서, 도 5 및 도 6을 통해 설명하겠지만, 레지스터에는 가장 안쪽 루프의 반복 횟수에 상응하는 주기와 관련된 정보가 저장될 수 있다. 이 때, 레지스터에 저장된 주기와 관련된 정보들에 포함된 복수의 비트들 중 적어도 하나의 비트가 상기 명령어를 통해 호출될 수 있다. 그리고, 호출된 적어도 하나의 비트를 기초로 상기 가드가 변환될 수 있다.
이 때, 상기 가드를 변환하는 단계(S130)는 상기 주기 그대로를 상기 레지스터에 저장하고, 상기 명령어가 호출될 때마다 1씩 증가하는 카운터 값을 상기 레지스터와 비교하여 상기 가드를 산출하는 것을 특징으로 할 수 있다.
이 때, 상기 가드를 변환하는 단계(S130)는 상기 레지스터의 상기 주기에 상응하는 주소에만 제1 레벨값을 저장하고, 상기 명령어가 호출될 때마다 상기 레지스터의 리드 주소를 증가시켜서 상기 가드를 산출할 수 있다. 레지스터에 저장된 주기와 관련된 정보를 이용하여 가드가 변환되는 구성에 대해서는 도 5 및 도 6을 통해 상세히 설명한다.
본 발명의 일실시예에 따른 루프 통합 방법은 변환된 가드의 논리값에 따라 상기 가장 안쪽 루프의 외부 연산을 실행하는 단계를 더 포함하는 것일 수 있다. 예를 들어, 가드가 참인 경우에만 인스트럭션을 실행하고, 가드가 거짓인 경우에는 인스트럭션을 실행하지 않는 것을 수 있다.
도 1에 도시된 각 단계는 도 1에 도시된 순서, 역순 또는 동시에 수행될 수 있다.
도 2는 본 발명의 일실시예에 따른 가장 안쪽 루프를 제거 전후의 프로그램 소스 코드이다.
도 2를 참조하면, 도면부호 210은 이중 루프로 구성된 프로그램 코드를 나타낸다. 가장 안쪽 루프(211)는 M 번에 걸쳐 *p++라는 연산을 반복하게 된다. 또한, 가장 안쪽 루프(211)가 M 번 연산을 반복한 후에 가장 안쪽 루프(211)의 외부 연산(212)인 p+=SIZE_X 가 실행된다.
외부 루프는 i=0 에서 i=N-1까지 반복된다. 따라서, 가장 안쪽 루프(211)가 반복되는 횟수는 M 번이고, 외부 루프가 반복되는 횟수는 N 번이므로 전체적으로 프로그램이 루프를 반복하는 횟수는 총 N x M 번 이다.
또한, 상기 가장 안쪽 루프(211)의 외부 연산(212)은 가장 안쪽 루프(211)가 M 번 반복할 때마다 한번씩 실행되어 총 N 번 실행된다.
우리는 이중 루프 중 가장 안쪽 루프(211)의 외부 연산(212)이 조건문의 조건이 만족되는 경우에 실행되도록 하여 가장 안쪽 루프(211)를 제거할 수 있다.
도 2의 도면부호 220은 도면부호 210에 나타난 이중 루프 중 가장 안쪽 루프(211)의 외부 연산(212)이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프(211)를 제거한 프로그램 코드를 나타낸다.
도면부호 220에 나타난 프로그램은 도면부호 210에 나타난 프로그램과 궁극적으로 같은 연산 결과를 반환한다.
도면부호 220은 도면부호 210의 프로그램 코드에서 가장 안쪽 루프(211)를 제거한 것이다. 도면부호 210에 존재하는 가장 안쪽 루프(211)가 제거되는 대신 조건문(221)이 포함되었고, 가장 안쪽 루프(211)의 외부 연산(212, 222)은 변함이 없다.
도면부호 220에 나타난 프로그램 코드의 동작을 분석하면, i=0 에서부터 N*M-1 까지 루프가 반복되므로 루프는 총 N x M 번 돌게 된다.
그리고 도면부호 222에 있는 연산은 도면부호 212와 같은 연산으로서 루프 가 M 번 돌 때마다 한번씩 실행되어 총 N 번 실행된다.
왜냐 하면, 도면부호 221에 포함된 조건문에서 '%'는 나머지 연산자를 나타내므로, 상기 조건문의 조건인 'i+1%M' 이 '거짓'을 반환하는 경우에만 도면부호 222에 있는 연산이 실행되기 때문이다.
따라서, 도면부호 220에 있는 프로그램은 궁극적으로 도면부호 210에 있는 프로그램과 같은 결과를 반환하게 되는 것이다.
결국, 다중 루프로 구성된 프로그램에서 우리는 다중 루프 중 가장 안쪽 루프의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거할 수 있다.
여기서, 우리는 도면부호 221에 있는 'i+1%M' 이 루프가 M 번 반복할 때마다 '거짓' 을 반환하여, 도면부호 222에 있는 연산이 실행됨을 주목할 필요가 있다. 즉, 조건문의 조건이 주기적으로 참 또는 거짓으로 변한다는 것이다. 그리고, 상기 조건이 주기적으로 변한다는 것은 도면부호 222에 있는 연산이 실행되는 간격이 일정하다는 것을 의미한다.
또한, '%'(모듈로, modulo) 연산은 복잡하고, 오버헤드가 큰 연산이므로 이를 간단한 연산 또는 코드로 변환할 필요가 있다. 이 때, 본 발명의 일실시예에 따르면, 'i+1%M'에 상응하는 값이 주기와 관련된 정보를 별도로 저장하는 레지스터로부터 공급될 수 있다. 따라서, 본 발명의 일실시예에 따르면, 'i+1%M' 연산을 수행하지 않고도, 명령어를 통해 'i+1%M'에 상응하는 값을 레지스터로부터 호출함으로써 도면부호 222에 있는 연산이 주기적으로 수행될 수 있는 것이다.
도면부호 221에 있는 조건이 주기적으로 참 또는 거짓으로 변하는 성질을 이용하여 가드 코드의 가드를 변환하는 구성에 대한 상세한 설명은 나중에 기술하기로 한다.
결론적으로 도 2의 도면부호 210과 도면부호 220은 같은 연산 결과를 반환 하지만, 도면부호 220은 이중 루프로 구성된 가장 안쪽 루프(211)를 제거한 것이다.
도 3은 본 발명의 일실시예에 따른 이프 컨버젼(if conversion)하기 전 프로그램의 흐름도이다.
도 3을 참조하면, 두 개의 인스트럭션 블록(310, 320)이 존재한다.
조건문(330)의 조건이 참(True)인 경우 then-block(310)에 있는 인스트럭션 블록이 실행된다. 반면에, 이프문의 조건이 거짓(False)인 경우에는 else-block(320)에 있는 인스트럭션 블록이 실행된다. 또한, 조건문(330)의 조건에 따라 어느 하나의 인스트럭션 블록이 실행되는 루프가 반복된다.
따라서, 조건문(330)의 조건에 따라 두 개의 브랜치(branch)가 존재하게 된다.
소프트웨어 파이프라인 기법을 이용하여 각 인스트럭션을 병렬적으로 처리하는 데 있어서, 브랜치가 다수 존재하면 프로세서의 처리 속도를 지연시키는 주요 원인이 된다. 따라서, 수 개의 브랜치를 하나의 데이터 플로우로 바꿀 필요가 있다. 즉, 이프 컨버젼 테크닉이 필요하게 된다.
이프 컨버젼(if conversion)이란 조건문 내에 있는 조건의 값에 따라 실행되는 인스트럭션 블록이 서로 다른 경우에, 가드 코드를 이용하여 하나의 인스트럭션 블록이 실행되는 것으로 변환하는 것이다.
도 4는 본 발명의 일실시예에 따른 이프 컨버젼한 후 프로그램의 흐름도이다.
도 4를 참조하면, 브랜치가 제거되어 하나의 인스트럭션 블록(410)만이 존재한다. 조건문을 이프 컨버젼하는 경우 가드 코드가 생성된다. 가드 코드는 가드와 명령어들로 구성될 수 있다.
예를 들어, 가드 코드가 '<q> A'일 경우 <q>는 가드이고 A는 인스트럭션을 나타낸다. 이 때, 가드 코드 '<q> A'는 'q' 가 참인 경우에만 인스트럭션 A를 실행하게 된다. q가 거짓이라면 인스트럭션 A는 실행되지 않는다. 즉, 이프 컨버젼은 인스트럭션을 실행하기에 앞서 가드가 참인지를 판단하고, 가드가 참인 경우에만 인스트럭션을 실행하게 한다.
다시 도 2의 도면부호 220을 참조하면, 도면부호 220의 프로그램 소스 코드는 이프 컨버젼을 통하여 다음과 같이 변환된다.
Figure 112007023304306-pat00001
즉, 도 2의 도면부호 220에서 if else문은 조건이 참인 경우와 거짓인 경우에 서로 다른 인스트럭션을 실행하므로 두 개의 브랜치를 갖게 된다.
이프 컨버젼을 통하여 도면부호 220에 나타난 프로그램 코드는 if문 형태로 변환되었으며, 'if(NEW_INSTRUCTION)' 이라는 가드와 'p+=SIZE_X' 라는 외부 연산으로 구성된 가드 코드가 생성된 것으로 볼 수 있다. 즉, 가드의 논리값에 따라 명령어 'p+=SIZE_X' 의 실행 여부가 결정된다.
따라서, 이프 컨버젼을 통해 두 개 이상의 브랜치를 갖는 프로그램이 하나의 데이터 플로우를 갖는 프로그램으로 변환으로 변환될 수 있다.
다만, 문제는 가드를 어떻게 산출할 것인지에 있다.
본 발명의 일실시예에 따른 루프 통합 방법은 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 가드 코드의 가드를 산출하는 명령어로 상기 가드를 변환한다.
즉, 가드 코드의 가드를 산출하는 새로운 명령어를 정의하고, 상기 새로운 명령어는 레지스터를 이용하여 상기 가드를 변환하는 것이다. 상술한 예에서, 명령어 'NEW_INSTRUCTION'는 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기에 따라 '참' 또는 '거짓' 중 어느 하나의 논리값을 호출할 수 있다. 여기서, 명령어 'NEW_INSTRUCTION'가 주기적으로 '참' 또는 '거짓'을 호출하는 다양한 방법들이 존재할 수 있다. 특히, 레지스터에 주기와 관련된 정보가 저장된 경우, 명령어 'NEW_INSTRUCTION'는 레지스터에 저장된 주기와 관련된 정보를 호출함으로써 가드를 변환/결정할 수 있다.
다시 도 2를 참조하면, 도 2의 도면부호 210에서 가장 안쪽 루프(211)의 반복 횟수는 M 이다. 예를 들어, M=4라고 가정한다.
이 경우 상기 가장 안쪽 루프(211)의 반복 횟수(M=4)에 상응하는 주기와 관련된 정보가 레지스터에 저장되고, 이를 이용하여 가드 코드의 가드를 산출하는 명령어로 상기 가드를 변환한다.
도 5는 본 발명의 일실시예에 따른 가드를 산출하는 데에 사용되는 레지스터를 나타낸 블록도이다.
도 5를 참조하면, 가장 안쪽 루프의 반복 횟수(M=4)에 상응하는 주기와 관련된 정보가 레지스터(510)에 저장되어 있다.
상기 레지스터(510)의 상기 주기에 상응하는 주소(511, 512, 513)에만 제1 레벨값을 저장하고, 명령어가 호출될 때마다 상기 레지스터(510)의 리드 주소를 증가시켜서 가드를 산출하게 된다. 즉, 명령어가 1, 2, 3 번째 호출되는 경우, 0, 0, 0이 가드로 결정되나, 명령어가 4 번째 호출되는 경우, '1'로 결정될 수 있다. 이러한 경우, 상술한 예에서, 'p+=SIZE_X'는 명령어가 4번째 호출될 때, 실행될 수 있다.
즉, 주기와 관련된 정보를 '4' 로 설정할 수 있으므로, 상기 레지스터(510)에는 상기 주기에 상응하는 주소인 레지스터(511, 512, 513)에만 제1 레벨값인 '1(하이, high)' 을 저장한다.
그리고 상기 명령어가 호출될 때마다 레지스터(510)의 리드(read) 주소를 증가시키게 된다. 이 경우 M=4이므로 명령어가 4 번 호출될 때마다 제1 레벨값인 '1' 이 가드로 산출된다.
다만, 도 5는 본 발명의 일실시예이며 다른 실시예도 얼마든지 구현될 수 있다.
예를 들어, M이 '4' 인 경우 레지스터(512, 513)은 사용되지 않을 수 있다.
즉, 도 5를 참조하면, 가장 안쪽 루프의 반복 횟수에 상응하는 주기는 '4'로 설정될 수 있다. 상기 주기에 상응하는 주소인 레지스터(511)에만 제1 레벨값 '1' 을 저장할 수 있다. 이 경우 도 5에서 '1' 이 저장된 레지스터(512, 513)는 사용되지 않는다.
상기 레지스터(511)에만 '1' 을 저장하고, 명령어가 호출될 때마다 레지스터(510)의 리드 주소를 증가시켜 가드를 산출할 수 있다. 레지스터(510)의 리드 주소가 초기화되어 있다면, 명령어가 4 번 호출될 때 상기 레지스터(511)에 저장된 제1 레벨값이 가드로 산출된다.
상기 레지스터(511)에 저장된 제1 레벨값을 가드로 산출한 후, 다시 상기 레지스터(510)의 리드 주소를 초기화한다. 그리고 다시 상기 명령어가 호출될 때마다 상기 레지스터(510)의 리드 주소를 증가시키므로, 명령어가 총 8번 호출될 때 상기 레지스터(511)에 저장된 제1 레벨값이 가드로 산출된다.
또한, 명령어가 호출될 때마다 레지스터의 리드 주소를 증가시키는 것으로 설명하고 있지만, 상기 레지스터의 리드 주소를 감소시키는 것으로 구현할 수도 있다. 또한, 상기 명령어가 호출될 때마다 스킵(skip)하는 레지스터 리드 주소의 간격도 다양하게 설정될 수 있다.
즉, 도 5에 도시된 레지스터 및 레지스터에 저장된 값들은 궁극적으로 주기적으로 제1 레벨값을 가드로 산출하기 위한 일예에 해당할 뿐이고, 쉽게 변형이 가능하다.
또한, 본 발명의 일실시예에 따른 루프 통합 방법은 상기 가장 안쪽 루프의 반복 횟수에 상응하는 주기 그대로를 레지스터에 저장하고, 명령어가 호출될 때마다 1씩 증가하는 카운터 값을 상기 레지스터와 비교하여 가드를 산출할 수 있다.
도 6은 본 발명의 일실시예에 따른 가드를 산출하는 레지스터 및 카운터를 나타낸 블록도이다.
도 6을 참조하면, 레지스터(610)에는 주기 가장 안쪽 루프의 반복 횟수에 상응하는 주기와 관련된 정보가 저장된다. 또한, 명령어가 호출될 때마다 1씩 증가하는 논리값을 갖는 카운터(620)의 출력과 상기 레지스터(610)에 저장된 상기 주기와 관련된 정보를 비교기(630)를 통해 비교하여 가드가 산출될 수 있다.
예를 들어, M=4인 경우라면 가장 안쪽 루프의 반복 횟수가 '4' 이므로 레지스터(610)에는 '4' 가 저장될 것이다. 즉, '0010' 이 저장된다.
카운터(620)는 '0000'으로 초기화되고, 명령어가 호출될 때마다, 카운터(620)의 논리값은 '1'씩 증가한다. 명령어가 4번 호출되면 카운터는 '0010'을 출력하게 될 것이므로 비교기(630)를 통해 '1'이 출력된다. 따라서 명령어가 4 번 호출될 때 가드의 논리값은 '1'(참)이 된다. 또한, 명령어가 8번, 12번, 16번 호출될 때에도 가드의 논리값은 '1'(참)이 된다.
본 발명에 따른 루프 통합 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 상기 매체는 프로그램 명령, 데이터 구조 등을 지정하는 신호를 전송하 는 반송파를 포함하는 광 또는 금속선, 도파관 등의 전송 매체일 수도 있다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
또한, 다중 루프 중 가장 안쪽 루프의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프가 제거되고 상기 조건문이 가드 코드로 이프 컨버젼되어있는 프로그램이 기록된 기록매체에 있어서, 상기 가장 안쪽 루프의 반복 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 상기 가드 코드의 가드가 산출되는 것을 특징으로 하는 프로그램이 다양한 컴퓨터 수단을 통해 구현될 수 있는 컴퓨터 판독 가능 매체에 기록될 수 있다.
도 7은 본 발명의 일실시예에 따른 루프 통합 장치를 나타낸 블록도이다.
도 7을 참조하면, 본 발명의 일실시예에 따른 루프 통합 장치는 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거하는 루프 제거부(710), 상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성 가드 코드 생성부(720) 및 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보가 저장된 레지스터를 이용하여 상기 가드 코드의 가드를 산출하는 명령어로 상기 가드를 변환하는 가드 변환부(730)를 포함한다.
상기 가드 변환부(730)는 상기 주기 그대로를 상기 레지스터에 저장하고, 상기 명령어가 호출될 때마다 1씩 증가하는 카운터 값을 상기 레지스터와 비교하여 상기 가드를 산출하는 것일 수 있다.
또한, 상기 가드 변환부(730)는 상기 레지스터의 상기 주기에 상응하는 주소에만 제1 레벨값을 저장하고, 상기 명령어가 호출될 때마다 상기 레지스터의 리드 주소를 증가시켜서 상기 가드를 산출하는 것일 수 있다.
또한, 본 발명의 일실시예에 따른 루프 통합 장치는 상기 변환된 가드의 논리값에 따라 상기 가장 안쪽 루프의 외부 연산을 실행하는 연산 실행부를 더 포함할 수 있다.
또한, 본 발명의 일실시예에 따른 루프 통합 장치는 이중 루프에 적용될 수 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
본 발명의 루프 통합 방법 및 그 장치는, 다중 루프를 효율적으로 통합할 수 있다.
또한, 본 발명은 프로그램의 흐름이 변경되지 않도록 조건문의 브랜치를 효율적으로 없앨 수 있다.
또한, 본 발명은 주기적으로 세팅되는 가드를 새로운 명령어를 이용하여 산출함으로써 간단한 연산만으로 가드를 산출할 수 있다.
또한, 본 발명은 프로세서 자원을 재활용하여 효율적으로 루프 연산을 실행할 수 있다.

Claims (14)

  1. 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거하는 단계;
    상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성하는 단계;
    레지스터에 저장된 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보를 기초로, 상기 가드 코드의 가드의 논리값을 결정하는 명령어를 이용하여 상기 가드의 논리값을 결정하는 단계; 및
    상기 결정된 가드의 논리값에 따라 상기 가장 안쪽 루프의 외부 연산을 실행하는 단계
    를 포함하는 것을 특징으로 하는 루프 통합 방법.
  2. 제1항에 있어서,
    상기 레지스터에 저장된 상기 주기와 관련된 정보는 복수의 비트들을 포함하고,
    상기 명령어는 상기 복수의 비트들 중 어느 하나의 비트를 상기 가드의 논리값으로 결정하는 것을 특징으로 하는 루프 통합 방법.
  3. 제1항에 있어서,
    상기 가드의 논리값을 결정하는 단계는
    상기 주기와 관련된 정보를 상기 레지스터에 저장하고, 상기 명령어가 호출될 때마다 1씩 증가하는 논리값을 갖는 카운터의 출력과 상기 레지스터에 저장된 상기 주기와 관련된 정보를 비교하여 상기 가드의 논리값을 결정하는 것을 특징으로 하는 루프 통합 방법.
  4. 제1항에 있어서,
    상기 가드의 논리값을 결정하는 단계는
    상기 레지스터의 상기 주기에 상응하는 주소에 제1 레벨값을 저장하고, 상기 명령어가 호출될 때마다 상기 레지스터에 대한 리드(read) 주소를 증가시켜서 상기 가드의 논리값을 결정하는 것을 특징으로 하는 루프 통합 방법.
  5. 삭제
  6. 제1항에 있어서,
    상기 다중 루프는 이중 루프인 것을 특징으로 하는 루프 통합 방법.
  7. 다중 루프 중 가장 안쪽 루프의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프가 제거되고 상기 조건문이 가드 코드로 이프 컨버젼되어있는 프로그램이 기록된 기록매체에 있어서, 레지스터에 저장된 상기 가장 안쪽 루프의 반복 횟수에 상응하는 주기와 관련된 정보를 기초로, 상기 가드 코드의 가드가 결정되는 것을 특징으로 하는 프로그램이 기록된 기록 매체.
  8. 제1항, 제3항, 제4항 또는 제6항 중 어느 한 항의 방법을 실행하기 위한 프로그램이 기록되어 있는 것을 특징으로 하는 컴퓨터에서 판독 가능한 기록 매체.
  9. 다중 루프 중 가장 안쪽 루프(inner-most loop)의 외부 연산이 조건문의 조건이 만족되는 경우에 실행되도록 하여 상기 가장 안쪽 루프를 제거하는 루프 제거부;
    상기 조건문을 이프 컨버젼(if conversion)하여 가드 코드를 생성 가드 코드 생성부;
    레지스터에 저장된 상기 가장 안쪽 루프의 반복(iteration) 횟수에 상응하는 주기와 관련된 정보를 기초로, 상기 가드 코드의 가드의 논리값을 결정하는 명령어를 이용하여 상기 가드의 논리값을 결정하는 가드 변환부; 및
    상기 결정된 가드의 논리값에 따라 상기 가장 안쪽 루프의 외부 연산을 실행하는 연산 실행부
    를 포함하는 것을 특징으로 하는 루프 통합 장치.
  10. 제9항에 있어서,
    상기 레지스터에 저장된 상기 주기와 관련된 정보는 복수의 비트들을 포함하고,
    상기 명령어는 상기 복수의 비트들 중 어느 하나의 비트를 상기 가드의 논리값으로 결정하는 것을 특징으로 하는 루프 통합 장치.
  11. 제9항에 있어서,
    상기 가드 변환부는
    상기 주기와 관련된 정보를 상기 레지스터에 저장하고, 상기 명령어가 호출될 때마다 1씩 증가하는 논리값을 갖는 카운터의 출력과 상기 레지스터에 저장된 상기 주기와 관련된 정보를 비교하여 상기 가드의 논리값을 결정하는 것을 특징으로 하는 루프 통합 장치.
  12. 제9항에 있어서,
    상기 가드 변환부는
    상기 레지스터의 상기 주기에 상응하는 주소에 제1 레벨값을 저장하고, 상기 명령어가 호출될 때마다 상기 레지스터의 리드 주소를 증가시켜서 상기 가드의 논리값을 결정하는 것을 특징으로 하는 루프 통합 장치.
  13. 삭제
  14. 제9항에 있어서,
    상기 다중 루프는 이중 루프인 것을 특징으로 하는 루프 통합 장치.
KR1020070028856A 2007-03-23 2007-03-23 루프 통합 방법 및 루프 통합 장치 KR100854720B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020070028856A KR100854720B1 (ko) 2007-03-23 2007-03-23 루프 통합 방법 및 루프 통합 장치
US11/843,357 US8549507B2 (en) 2007-03-23 2007-08-22 Loop coalescing method and loop coalescing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070028856A KR100854720B1 (ko) 2007-03-23 2007-03-23 루프 통합 방법 및 루프 통합 장치

Publications (1)

Publication Number Publication Date
KR100854720B1 true KR100854720B1 (ko) 2008-08-27

Family

ID=39775994

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070028856A KR100854720B1 (ko) 2007-03-23 2007-03-23 루프 통합 방법 및 루프 통합 장치

Country Status (2)

Country Link
US (1) US8549507B2 (ko)
KR (1) KR100854720B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9043774B2 (en) * 2008-02-12 2015-05-26 William G. Bently Systems and methods for information flow analysis
US10261793B2 (en) 2011-12-16 2019-04-16 International Business Machines Corporation Instruction predication using instruction address pattern matching
US20140189666A1 (en) * 2012-12-27 2014-07-03 Scott A. Krig Automatic pipeline composition
US11093224B2 (en) * 2019-04-24 2021-08-17 International Business Machines Corporation Compilation to reduce number of instructions for deep learning processor

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH064300A (ja) * 1992-06-18 1994-01-14 Fujitsu Ltd 多重ループの一重化装置

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5361354A (en) * 1991-12-17 1994-11-01 Cray Research, Inc. Optimization of alternate loop exits
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
JPH08115220A (ja) 1994-10-14 1996-05-07 Hitachi Ltd ループ最適化方法
US5848285A (en) * 1995-12-26 1998-12-08 Cypress Semiconductor Corporation Macrocell having a dual purpose input register for use in a logic device
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
JPH10124315A (ja) * 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
US5822593A (en) * 1996-12-06 1998-10-13 Xerox Corporation High-level loop fusion
GB2323190B (en) * 1997-03-14 2001-09-19 Nokia Mobile Phones Ltd Executing nested loops
US6041181A (en) * 1997-07-23 2000-03-21 International Business Machines Corporation Method of, system for, and computer program product for providing quick fusion in WHERE constructs
US6070011A (en) * 1997-10-21 2000-05-30 Hewlett-Packard Co. Compiler for performing a loop fusion, dependent upon loop peeling and/or loop reversal
US6301706B1 (en) * 1997-12-31 2001-10-09 Elbrus International Limited Compiler method and apparatus for elimination of redundant speculative computations from innermost loops
JP3324486B2 (ja) 1998-01-27 2002-09-17 日本電気株式会社 ループ最適化方式およびそのプログラム記録媒体
JP3887097B2 (ja) 1998-02-24 2007-02-28 富士通株式会社 コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
US6243734B1 (en) * 1998-10-30 2001-06-05 Intel Corporation Computer product and method for sparse matrices
US6820250B2 (en) * 1999-06-07 2004-11-16 Intel Corporation Mechanism for software pipelining loop nests
CA2288614C (en) * 1999-11-08 2004-05-11 Robert J. Blainey Loop allocation for optimizing compilers
US7302557B1 (en) * 1999-12-27 2007-11-27 Impact Technologies, Inc. Method and apparatus for modulo scheduled loop execution in a processor architecture
US6754893B2 (en) * 1999-12-29 2004-06-22 Texas Instruments Incorporated Method for collapsing the prolog and epilog of software pipelined loops
US20020144092A1 (en) * 2001-01-31 2002-10-03 Siroyan Limited. Handling of loops in processors
US7302680B2 (en) * 2002-11-04 2007-11-27 Intel Corporation Data repacking for memory accesses
US7249248B2 (en) * 2002-11-25 2007-07-24 Intel Corporation Method, apparatus, and system for variable increment multi-index looping operations
US7086047B1 (en) * 2002-12-04 2006-08-01 Xilinx, Inc. Determining hardware generated by high level language compilation through loop optimizations
CA2430383A1 (en) * 2003-05-30 2004-11-30 Ibm Canada Limited - Ibm Canada Limitee Efficiently releasing locks when an exception occurs
US9977674B2 (en) * 2003-10-14 2018-05-22 Intel Corporation Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
JP2005222262A (ja) 2004-02-05 2005-08-18 Hitachi Ltd ループ融合方法及びプログラムコードの生成方法
US7210024B2 (en) * 2005-02-10 2007-04-24 Qualcomm Incorporated Conditional instruction execution via emissary instruction for condition evaluation
US7689980B2 (en) * 2005-09-30 2010-03-30 Intel Corporation Splitting the computation space to optimize parallel code
US7757222B2 (en) * 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8146066B2 (en) * 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
US8136104B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
US8234636B2 (en) * 2006-09-12 2012-07-31 International Business Machines Corporation Source code modification technique
US8225295B2 (en) * 2007-09-21 2012-07-17 Jens Palsberg Register allocation by puzzle solving

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH064300A (ja) * 1992-06-18 1994-01-14 Fujitsu Ltd 多重ループの一重化装置

Also Published As

Publication number Publication date
US20080235657A1 (en) 2008-09-25
US8549507B2 (en) 2013-10-01

Similar Documents

Publication Publication Date Title
JP5707011B2 (ja) 統合分岐先・述語予測
KR100875836B1 (ko) 병렬 처리 vliw 컴퓨터를 위한 인스트럭션 명령어 압축장치 및 그 방법
US9946523B2 (en) Multiple pass compiler instrumentation infrastructure
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
JP2004302706A (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
KR100854720B1 (ko) 루프 통합 방법 및 루프 통합 장치
JP2000207223A (ja) 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
JP2001166947A (ja) コンパイル処理方式
US10325844B2 (en) Modifying execution flow in save-to-return code scenarios
US7673284B2 (en) Method and system for versioning codes based on relative alignment for single instruction multiple data units
KR102147355B1 (ko) 프로그램 변환 방법 및 장치
US8812410B2 (en) Efficient data profiling to optimize system performance
US10769063B2 (en) Spin-less work-stealing for parallel copying garbage collection
US20120017070A1 (en) Compile system, compile method, and storage medium storing compile program
US20080282237A1 (en) Method and Apparatus For Generating Execution Equivalence Information
KR20220067961A (ko) 프로세싱-인-메모리 및 프로세싱-인-메모리를 이용한 인스트럭션 출력 방법
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
JP2011039857A (ja) プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法
JP3276479B2 (ja) コンパイル方式
Koshelev et al. Interprocedural taint analysis for LLVM-bitcode
JP7244756B2 (ja) 分析プログラム、プログラム分析方法およびプログラム分析装置
JP2019185486A (ja) コード変換装置、コード変換方法、及びコード変換プログラム
JP6254352B2 (ja) ループのプロローグまたはエピローグの無効演算を処理する装置及び方法
JP3323147B2 (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JP5016288B2 (ja) 最適化処理方法、及びその言語処理系

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

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20130724

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140721

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150716

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160718

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170719

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180717

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20190717

Year of fee payment: 12