KR100991091B1 - 멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터변환들 - Google Patents

멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터변환들 Download PDF

Info

Publication number
KR100991091B1
KR100991091B1 KR1020087007116A KR20087007116A KR100991091B1 KR 100991091 B1 KR100991091 B1 KR 100991091B1 KR 1020087007116 A KR1020087007116 A KR 1020087007116A KR 20087007116 A KR20087007116 A KR 20087007116A KR 100991091 B1 KR100991091 B1 KR 100991091B1
Authority
KR
South Korea
Prior art keywords
computer program
loops
nested
program
array
Prior art date
Application number
KR1020087007116A
Other languages
English (en)
Other versions
KR20080041271A (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 인텔 코오퍼레이션
Publication of KR20080041271A publication Critical patent/KR20080041271A/ko
Application granted granted Critical
Publication of KR100991091B1 publication Critical patent/KR100991091B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Operations Research (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

다차원 다면체를 나타내는 연립 부등식들을 생성하고, 하나 더 작은 차원들의 공간으로 다면체를 투영함에 의해 연립 부등식의 해를 구하고, 스트림 프로그램에 그 해를 매핑함으로써 스트림 연산자 처리를 최적화하기 위한 방법들이 제공된다. 아핀 파티셔닝에 기초한 다른 프로그램 최적화 방법들도 설명되고 청구된다.
프로그램 최적화, 아핀 파티션, 스트림 연산자, 다차원 다면체

Description

멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터 변환들{DATA TRANSFORMATIONS FOR STREAMING APPLICATIONS ON MULTIPROCESSORS}
본 발명은 컴퓨터 프로그램들을 최적화하기 위한 기술들에 관한 것이다. 보다 구체적으로, 본 발명은 컴퓨터 프로그램들에서 병렬 처리를 접하고 활용하는 기술들에 관한 것이다.
둘 이상의 중앙 처리 유닛("CPU")을 포함하는 컴퓨터 시스템들은 더욱 일반화되어 있다. 공교롭게도, 시스템내의 CPU들의 수를 증가시키는 것으로부터의 성능 이득(performance gain)들은 일반적으로 CPU들의 수에 대해 선형적으로 비례하지 않는다. 그러나, 어플리케이션들 - 스트리밍 매체 어플리케이션들 - 의 증가하는 부류(growing class)는 종종 다수의 CPU들에 대해 보다 효율적인 이용을 가능하게 만드는 처리 패턴들을 종종 제공한다. 그럼에도 불구하고, 스트리밍 매체 어플리케이션들이라 하더라도, 성능은 보통 CPU들의 수에 따라 완전히 선형적으로 비례하지 않으며, 다수의 CPU들의 병렬 처리 능력들을 이용하는 어플리케이션들을 설계하는 것은 어려운 일이다. 병렬 어플리케이션 설계를 단순화하고 병렬 어플리케이션 성능을 향상시키는 작업은, 새로운 컴퓨터 언어들의 설계 및 새로운 최적화 스킴들의 구현을 포함하는 여러 방면에서 진행된다.
컴퓨터 프로그램들은 일반적으로 C, C++ 또는 포트란과 같은 하이-레벨(high level) 언어로 표현된다. 프로그램은 분석되고 기계 명령어들의 시퀀스로 변환되어, 컴파일러로서 알려진 프로그램에 의해 특정 타입의 CPU에서 실행된다. 컴파일러들은 하이-레벨 프로그램에 의해 기술된 논리 프로세스들을 정확하게 구현하는 명령어 시퀀스들을 생성하는 역할을 한다. 컴파일러들은, 재정렬(reordering) 연산들에 의해 명령어 시퀀스의 성능을 향상시키는 최적화 함수들을 포함하여, 메모리 액세스 특성들을 향상시키거나 또는 결과들이 전혀 이용되지 않는 계산들을 제거한다. 일부 컴파일러들은 상호 의존성들이 없는 논리 프로그램 패시지(passage)들을 검출할 수도 있고, 이러한 패시지들이 다수의 CPU들을 갖는 머신들 상에서 병렬로 실행되도록 처리할 수 있다. 브룩(Brook) 및 스트림잇(StreamIt)과 같은 컴퓨터 언어들은 특히 컴파일러가 병렬 처리를 위한 기회들을 식별하도록 돕게끔 설계되어 있다.
현재의 컴파일러 최적화 전략들은 애드혹(ad hoc) 기반으로 진행하고, 프로그램의 중간 표현에 대해 일련의 발견적-주도형 변환(heuristic driven transformation)을 독립적인 "경로들(passes)"의 시퀀스로 수행한다. 예를 들어, "루프 교환(loop interchange)" 경로는 열-우선 순서보다는 행-우선 순서로 어레이의 데이터를 처리하도록 프로그램을 바꾸어, CPU의 캐시는 보다 효과적으로 작동할 수 있거나, 또는 "불필요한 코드(dead code)" 경로는 전혀 실행될 수 없는 명령어들을 찾아 제거할 수 있다. 이러한 경로들은 순서-의존적일 수 있다: 하나의 최적화 타입은 다른 최적화 타입에 대한 기회들을 숨기거나 제거할 수 있어, 최적화 경 로들의 순서를 변화하는 것은 컴파일된 프로그램의 성능을 변화시킬 수 있다. 공교롭게도, 상이한 최적화들의 대다수는, 어떤 순서가 주어진 프로그램에 대한 최상의 최적화를 제공하는지를 보여주는 상이한 최적화 경로 순서들로 프로그램을 컴파일할 수 없다.
본 발명의 실시예들은 유사한 참조번호들이 유사한 요소들을 나타내는 첨부하는 도면들에서 예시로서 도시되지만, 이에 한정되지 않는다. 본 명세서 내의 "실시예" 또는 "일 실시예"에 대한 참조들은 반드시 동일한 실시예에 대한 것은 아니며, 그러한 참조들은 "적어도 하나"를 의미한다는 것이 주목되어야 한다.
도 1은 2차원 데이터 어레이 및 컴퓨터 메모리로의 그의 매핑(mapping)의 특징들을 나타낸다.
도 2는 2개의 2차원 어레이들에 대해 동작하는 프로그램 단편(fragment)의 데이터 액세스 패턴들을 나타낸다.
도 3은 본 발명의 실시예에 따른 컴파일러 최적화 연산들에 대한 흐름도이다.
도 4는 본 발명의 실시예에 의해 최적화된 프로그램의 동작들을 시각화하는 다른 방법을 나타낸다.
도 5는 스트리밍 프로그램에 대한 컴파일러 최적화들에 대한 흐름도이다.
도 6은 본 발명의 실시예를 호스트(host)하고, 실시예에 의해 생성된 최적화된 프로그램들을 실행하기 위한 컴퓨터 시스템을 나타낸다.
본 발명의 실시예들은 참조의 집약성(locality)을 향상시키고, 컴퓨터 프로그램들에서의 병렬 실행을 위한 기회들을 검출할 수 있으며, 메모리 풋프린트들을 감소시키고 스레드 내(intra-thread) 의존성들을 증가시키도록 프로그램들을 재배열할 수 있다. 이러한 이로운 결과들을 달성하기 위한 분석 모델들은, 그것이 검색된 후 데이터에 수행된 연산들은 무관하기 때문에, (누적 합계(running sum)를 계산하는 것과 같은) 단순하고 및/또는 비효율적인 연산들을 종종 포함할 예제들을 참조하여 설명된다. 본 발명의 실시예들은 데이터에 대해 복잡한 계산들을 임의로 수행하는 프로그램들의 병행성(concurrency) 및 메모리 액세스 패턴들을 향상시킬 수 있지만, 복잡한 계산들로 이루어진 예제들은 기술하려는 특징들을 애매하게만 한다.
도 1은 데이터의 2차원 어레이(110)를 나타내고, 각각의 행(120, 130)의 컨텐츠가 열-우선 순서의 다차원 어레이들로 정렬된 컴퓨터 언어에 의해 주 메모리(140)의 메모리 위치들에 대한 1차원 어레이로 매핑될 수 있는 방법을 도시한다. (일부 언어들은 열-우선 순서로 다차원 어레이들을 저장하지만, 데이터 처리 연산들의 분석은 쉽게 적응된다. 다르게 지정되지 않는다면, 이후에는 행-우선 저장이 가정될 것이다.)
어레이(110)의 데이터를 처리하는 프로그램은 행들(15)로 좌-우, 열들(16)로 상-하, 또는 소정의 보다 복잡한 대각선 패턴(170)으로 구성요소들(elements)을 검사하거나 작용할 수 있다. 현대의 CPU들은 일반적으로 데이터를 연속된 멀티-워드 블록들(예를 들어, 180)로 메모리로부터 내부 캐시들로 로딩하기 때문에("캐시-라인 채움(cahe-line filling)"으로 알려진 프로세스), 새로운 캐시 라인을 로딩하도록 CPU에 요구하기 전에 하나의 캐시 라인에 로딩된 데이터 모두에 작용할 수 있는 처리 패턴들은, 캐시되지 않은 위치(un-cached location)로부터 데이터를 요구하기 전에 캐시 라인 내의 하나의 항목만에 작용하는 패턴들보다 상당히 더 빨리 실행할 수 있다.
따라서, 예로서, 어레이(110)의 행들의 데이터를 합하는 프로그램은 약 c/l 캐시 라인 채움(fill)으로 행을 완성할 수 있다(c는 어레이의 열 수이고, l은 캐시 라인의 워드 수이다). 반대로, 어레이(110)의 열들의 데이터를 합하는 프로그램은 열을 완성하기 위해 r 캐시 라인 채움들을 요구할 수 있다(r은 어레이의 행 수) - 프로그램은 CPU의 캐싱 능력들로부터 적은 혜택을 받거나 또는 전혀 혜택을 받지 않을 수 있다. 또한, 제1 열이 완성된 후, CPU는 어레이 [0][0] 내지 [0][l-1]로 부터의 데이터를 캐시 라인으로 다시 로딩하여, 제2 열의 처리를 시작한다(어레이의 행 수가 이용 가능한 캐시 라인들의 수를 초과하였다는 것을 가정하면, 이전-로딩된 데이터는 퇴거되었음).
다른 견해로, 캐시-라인 채움에 로딩된 데이터의 효율적인 이용은 처리하는 동안 데이터를 보유하는데 요구되는 캐시 메모리의 양을 감소시킨다. 캐시 사용효율(cache utilization)은 코드 시퀀스의 "메모리 풋프린트"로서 간주될 수 있다. 캐시 메모리는 부족한 리소스이므로, 메모리 풋프린트들을 감소시키는 것은 상당한 성능 이점들을 제공할 수 있다.
어레이 행들을 합하기 위한, 좌-우, 행단위의 액세스 패턴(150)은 개선의 여지가 적거나 전혀 없으며, 어레이 열들을 합하기 위한, 상-하, 열단위의 액세스 패턴(160)은 l 열들의 그룹들을 동시에 합산함으로써 개선될 수 있음을 쉽게 볼 수 있다. 후자는 종래 기술의 루프-교환 발견적 방법(loop-interchange heuristics)에 의해 적절히 수행될 수 있는 최적화이다. 그러나, 대각선(170)과 같은 보다 복잡한 패턴들을 갖는 발견적 방법은 덜 성공적이다.
도 2는 본 발명의 실시예들의 양태를 나타내기 위한 2개의 어레이의 최적화 문제를 제시한다. 어레이 A(210) 및 B(220)의 구성요소들은 조합된 어레이(230)에 겹쳐져 나타낸다; 2개의 어레이들은 의사-코드 프로그램 단편(240)에 따라 처리될 것이다. 루프들(234 및 246)은 어레이들에 대해 행단위 및 열단위로 반복하고, 명령문(statement)들 S1(250) 및 S2(260)은 어레이 구성요소들에 대해 단순 계산들을 수행한다(다시 말하면, 실제 계산들은 중요하지 않다; 메모리 액세스 패턴들만이 관련된다). 화살표들(270 및 280)은 명령문들 S1 및 S2가 상이한 행들 및 열들로부터 어떻게 어레이 구성요소들을 액세스하는 지를 보여준다.
본 발명의 실시예는 도 3의 흐름도에 따른 코드 단편(240)을 최적화할 수 있다. 우선, 프로그램 내의 다수의 포대기형 루프(nested loop)들이 식별되고(310) 분석된다(320). 그러한 포대기형 루프들은 종종 프로그램이 다차원 어레이의 데이터를 처리하는 경우 발생한다. 이러한 예에서, 포대기형 루프들(243 및 246)은 유도 변수들 ij를 갖는 어레이들 A 및 B의 행들 및 열들에 대해 반복한다. 다음으로, 다수의 루프들의 유도 변수들은 독립 유도 변수 P의 선형 함수들로 변환된 다(330). 명령문들 S1 및 S2에 대해, 다음의 일반적 형태의 선형 함수들이 가정된다:
P= ai + bj + c (명령문 S1)
P= di + ej + f (명령문 S2)
S1 및 S2는 루프들의 상이한 반복들 동안 동일 데이터를 액세스하기 때문에, 그들은 함께 다루어진다. 또는, 보다 정확하게는, 다음의 종속성들로 인해:
Figure 112008021287181-pct00001
Figure 112008021287181-pct00002
명령문들은 동일한 아핀 파티션(affine partition)에 놓인다:
Figure 112008021287181-pct00003
이러한 식들을 재정렬하면,
Figure 112008021287181-pct00004
또는
Figure 112008021287181-pct00005
를 얻을 수 있다.
일반성을 잃지 않고, c는 0과 균등하게 설정되고, a-f에 대한 다음의 해가 주어질 수 있다.
Figure 112008021287181-pct00006
S1 및 S2에 대한 결과적인 아핀 변환들은:
P=i-j (명령문 1)
P=i-j+1 (명령문 2)
마지막으로, 프로그램 단편(240)의 다수의 포대기형 루프들의 함수 컨텐트는 하기 나타낸 바와 같이 재기입될 수 있고(340), 여기서, 포대기형 루프들은 독립 유도 변수의 새로운 루프 내에 놓이고, 명령문들은 선형 함수들로부터 유도된 연립 부등식들에 따라 파티션들로 구분된다.
Figure 112008021287181-pct00007
Figure 112008021287181-pct00008
새로운 공식화가 최초 단편보다 훨씬 더 복잡하게 나타나더라도, 전통적인 불필요한-코드(dead-code) 제거 및 유사한 최적화 기술들은 이러한 일반적인-형태의 해의 많은 브랜치들을 종종 제거(비어있는 파티션들을 제거)할 수 있다(350). 또한, 외부 루프(outer loop) 및 조건적 표현들이 생성되었던 아핀 파티셔닝 방법으로 인해, 외부 루프의 반복 각각 (및 2개의 내부 루프들의 전체 실행)은 최초 단편의 2개의 루프들에 대한 전체 실행보다 더 작은 메모리 풋프린트를 갖는다. 외부 루프의 반복들 사이에 보다 적은 데이터 의존성들이 존재하고, 그러한 반복들은 병렬로 실행될 수 있는 방식으로 독립적이다. 따라서, 그 방법은 최초 프로그램에 고유한 병행성을 나타낸다. 본 발명의 실시예를 구현하는 컴파일러는, 각각 외부 루프의 한번 반복을 (병렬로) 실행하는 많은 스레드들을 시작하는 코드를 내보낸다. 결과 프로그램은 그의 개선된 메모리 액세스 패턴들 및 시스템 내의 다수의 프로세서들을 이용하는 그의 능력 때문에, 2개의 어레이에 대해 동일 동작들을 더욱 빠르게 수행할 수 있다.
파티션들 각각에 대해 수행될 계산들은 조건식들의 결과들에 놓이게 되고, 그 술어들(predicates)은 독립 유도 변수 및 최초의 다수의 루프들의 유도 변수를 비교하는 부등식들이다.
도 4는 아핀 파티셔닝에 의한 프로그램 최적화에 대해 생각할 수 있는 다른 방법을 나타낸다. 선형 방정식들의 변환 및 해는 어레이(410)를 통한 데이터 액세스(420)의 병렬 경로들을 일반적으로 발견한다. 이러한 병렬 경로들은 어레이(행들(430) 및 열들(440))의 2개의 주 축들 중 어느 하나에 정렬되지 않는다. 따라서, 소정의 영역들(450, 460, 470 및 480)은 외부 독립 루프의 처리에서 생략되어야 한다. 연립 부등식들은 독립 유도 변수의 보다 큰 공간 내의 어레이 다각형(이 경우, 단순하게 사각형, 보다 고차원적으로, 다면체)의 경계들을 기술한다.
이전 설명은 단순하고, 2차원 예제의 경우에 초점을 맞추었다. 그러나, 그러한 차원들의 어레이들은 이해하기 쉬운 도면으로 묘사하기 어렵지만, 그 방법은 임의의 큰 차원들에 이용가능하다. 브룩 및 스트림잇과 같은 컴퓨터 언어들은 크고 다양한 차원의 데이터 스트림들을 다루기 위한 준비 추상화(ready abstraction)들을 제공한다. 스트리밍 연산자들은 본질적으로 다수의 포대기형 루프들을 포함하므로, 프로그램은 스트리밍 데이터에 대해 동작할 수 있지만, 언어의 의미론(semantic)은, C 및 C++과 같은 비-스트리밍 언어들에서 소정의 최적화들을 방해하거나 또는 안전하지 않게 만들 수 있는 일부 프로그래밍 구성들을 방해한다. 본 발명의 실시예들은 도 5의 흐름도에 따라 스트리밍 프로그램들을 최적화하는데 유 용하게 이용될 수 있다.
우선, 스트림 연산자는 최초 컴퓨터 프로그램 내에서 식별되고(510), 그 후 다차원 다면체를 기술하는 것으로 생각될 수 있는 연립 부등식들이 연산자에 대해 생성된다(520). 다면체는 한 차원 낮은 공간으로 투영되어 연립 부등식들에 대한 해를 얻고(530), 마지막으로 그 해는 최초 프로그램으로 다시 매핑되어 프로그램의 최적화된 버전을 생성한다(540). 이전에 언급한 바와 같이, 최적화된 프로그램은 아마도 최초의 프로그램 보다 훨씬 더 복잡하게 나타날 것이지만, 실제 최초 프로그램보다 더 작은 메모리 풋프린트(그러한 풋프린트가 가능하다면) 및 더 작은 데이터 의존성들을 가질 것이다.
본 발명의 실시예를 구현하는 컴파일러에 의해 내보내진 최적화된 프로그램에서, 스트림 연산자들의 연관된 포대기형 반복 구조들은 독립 유도 변수의 최외곽 루프 내에 위치될 것이다. 루프들의 기능적 컨텐츠는, 독립 유도 변수를, 내부 루프들의 유도 변수들과 비교하는 조건문들에 의해 파티션들로 분리될 것이고, 프로그램은, 연산들에 대한 그의 정확한 순서가 아니라면, 최초 프로그램의 논리 함수를 유지할 것이다.
표 1은 브룩 연산자들 및 그들의 관련 부등식들을 나열한 것이다. 유사한 연립 부등식들은 다른 컴퓨터 언어들의 연산자들 및 패러다임들을 위해 준비될 수 있다.
Figure 112008021287181-pct00009
Figure 112008021287181-pct00010
본 발명의 실시예를 구현하는 최적화 컴파일러는 대용량 저장 장치의 파일로부터 최초 컴퓨터 프로그램을 판독할 수 있거나, 파이프 또는 다른 프로세스 간 통신 설비를 통해 전-처리하는 단계의 출력을 수신할 수 있다. 일부 컴파일러들은 프로그램 소스 파일 또는 다른 입력으로부터 계층적 데이터 구조를 구성할 수 있고, 데이터 구조 자체에 대해 동작할 수 있다. 컴파일러는 최적화된 프로그램을 파일에 기록하거나, 파이프 또는 프로세스 간 통신 메커니즘을 통해 프로그램을 송신하거나, 또는 최적화들을 포함하는 데이터 구조와 같은 새로운 혹은 수정된 중간 표현(representation)을 생성함으로써 출력을 내보낼 수 있다. 출력은 C, C++ 또는 어셈블리 언어와 유사한 다른 언어에서의 인간-판독가능한 프로그램 텍스트일 수 있어 제2 컴파일러에 의해 컴파일되거나 어셈블될 수 있거나; 또는, 다른 컴파일된 모듈들 또는 라이브러리들에 연결되거나 직접적으로 실행될 수 있는 머신 코드일 수 있다.
도 6은 본 발명의 실시예를 구현하는 컴파일러를 지원할 수 있는 컴퓨터 시스템을 나타낸다. 시스템은 하나 이상의 프로세서들(610, 620); 메모리(630); 및 대용량 저장 장치(640)를 포함한다. 프로세서들(610 및 620)은 어드레스 및 데이터 버스들과 같은 소정의 다른 내부 구조들, 캐시들, 및 관련 지원 회로를 공유하는 다수의 실행 코어들을 포함할 수 있다. 멀티-코어 CPU들은 물리적으로 구분된 CPU들과 논리적으로 균등할 수 있지만, 비용 또는 전력 절약을 제공할 수 있다. 본 도면에 나타낸 시스템에 의해 호스트되는 컴파일러는 시스템 자체를 목표로 하는 실행가능한 파일들, 또는 제2의 상이한 시스템에 대한 실행 파일들(executables) 을 생성할 수 있다. 다수의 CPU들(또는 단일의 물리적 CPU에서의 다수의 코어들)이 이용가능하다면, 실행 파일들은 상이한 CPU들에 대해 동시에 외부 루프들의 독립적 반복을 실행함으로써 그들을 이용할 수 있다. 컴파일러에 의해 생성된 최적화된 프로그램들은 동일 프로그램들의 최적화되지 않은 버전들 보다 더 빠르게 실행될 수 있고, 이용가능한 프로세서들 및 캐시 설비들을 보다 잘 이용할 수 있다. 시스템이 단일 프로세서만을 갖는다 하더라도, 향상된 캐시 사용효율은 최적화된 프로그램이 최적화되지 않은 프로그램보다 더 빠르게 실행되도록 할 수 있다.
본 발명의 실시예는 프로세서가 상술된 바와 같은 연산들을 수행하도록 하는 명령어들을 저장하는 머신-판독가능한 매체일 수 있다. 다른 실시예들에서, 연산들은 배선에 의한(hardwired) 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해 수행될 수 있다. 그러한 연산들은 프로그램된 컴퓨터 컴포넌트들 및 주문형 하드웨어 컴포넌트들의 임의의 조합에 의해 선택적으로 수행될 수 있다.
머신-판독가능한 매체는, CD-ROM(Compact Disc Read-Only Memory)들, ROM들, RAM(Random Access Memory), EPROM(Erasable Programmable Read-Only Memory) 및 인터넷을 통한 전송을 포함하지만 이에 한정되지 않는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있다.
본 발명의 어플리케이션들은 특정 예제들을 참조하여 소정의 하드웨어 및/또는 소프트웨어 컴포넌트들에 대한 기능성의 특정 할당들에 의해 주로 설명되었다. 그러나, 본 기술분야의 당업자들은 병렬 실행을 위한 프로그램 최적화는, 본원에 기술된 것과 상이하게 본 발명의 실시예들의 기능들을 분산시키는 소프트웨어 및 하드웨어에 의해 수행될 수도 있다는 것을 이해할 것이다. 그러한 다양성들 및 구현들은 다음의 특허청구범위들에 따라 파악될 것으로 이해된다.

Claims (20)

  1. 최초 컴퓨터 프로그램 내에서 스트림 연산자를 식별하는 단계;
    상기 스트림 연산자에 대한 연립 부등식들을 생성하는 단계 - 상기 연립 부등식들은 다차원 다면체를 기술함 - ;
    상기 다차원 다면체의 차원보다 1차원 더 작은 공간상에 상기 다차원 다면체를 투영하여 상기 연립 부등식들의 해를 획득하는 단계; 및
    상기 최초 컴퓨터 프로그램에 상기 연립 부등식들의 상기 해를 매핑하여 수정된 컴퓨터 프로그램을 생성하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 수정된 컴퓨터 프로그램은 상기 최초 컴퓨터 프로그램 보다 더 작은 메모리 풋프린트(footprint)를 갖는 방법.
  3. 제1항에 있어서,
    상기 수정된 컴퓨터 프로그램은 상기 최초의 컴퓨터 프로그램보다 더 작은 데이터 의존성들을 갖는 방법.
  4. 제1 컴퓨터 프로그램 내에서 다수의 포대기형 루프(nested loop)들 식별하는 단계;
    상기 포대기형 루프들의 다수의 유도 변수들을 독립 유도 변수의 선형 함수들로 변환하는 단계;
    상기 독립 유도 변수의 새로운 루프 내에서 상기 다수의 포대기형 루프들의 기능적 컨텐트를 포함하는 제2 컴퓨터 프로그램을 출력하는 단계
    를 포함하고,
    상기 다수의 포대기형 루프들의 기능적 컨텐트는 상기 선형 함수들로부터 유도된 연립 부등식들에 따라 파티션들로 분리되는 방법.
  5. 제4항에 있어서,
    상기 독립 유도 변수의 상기 새로운 루프를 다수 반복하는 것은 병렬로 수행되는 방법.
  6. 제4항에 있어서,
    상기 파티션들은 상기 독립 유도 변수 및 상기 다수의 유도 변수들 중 적어도 하나를 포함하는 조건식들의 결과들인 방법.
  7. 제4항에 있어서,
    상기 제2 컴퓨터 프로그램을 최적화하여 빈 파티션들을 제거하는 방법.
  8. 제1 컴퓨터 프로그램 내에서 다수의 포대기형 반복 구조들을 식별하는 단계;
    아핀 공간(affine space)에서 상기 다수의 포대기형 반복 구조들을 모델링하는 단계;
    상기 아핀 공간의 상기 모델을 파티셔닝(partitioning)하는 단계; 및
    제2 컴퓨터 프로그램 내에 제2 다수의 포대기형 반복 구조들을 내보내는 단계 - 상기 제2 컴퓨터 프로그램은 상기 제1 컴퓨터 프로그램의 논리 함수를 유지함 -
    를 포함하고,
    상기 제2 다수의 포대기형 반복 구조들의 최외각 반복 구조는 상기 제2 다수의 포대기형 반복 구조들 중 남은 반복 구조들에 독립적인 방법.
  9. 제8항에 있어서,
    상기 제1 컴퓨터 프로그램은 브룩(Brook) 컴퓨터 언어 및 스트림잇(StreamIt) 컴퓨터 언어 중 하나의 프로그램인 방법.
  10. 제8항에 있어서,
    상기 제2 컴퓨터 프로그램은 C 및 C++ 컴퓨터 언어 중 하나의 프로그램인 방법.
  11. 제8항에 있어서,
    상기 제2 컴퓨터 프로그램은 중간 표현(intermediate representation)의 데 이터 구조인 방법.
  12. 명령어들을 포함하는 머신-판독가능한 매체로서,
    데이터-처리 머신에 의해 실행된다면, 상기 머신으로 하여금 연산들을 수행하도록 하고,
    상기 연산들은,
    제1 컴퓨터 프로그램을 판독하는 단계;
    상기 제1 컴퓨터 프로그램에서 제1 다수의 포대기형 루프들을 식별하여 어레이의 데이터를 처리하는 단계;
    상기 제1 다수의 포대기형 루프들을 분석하는 단계; 및
    제2 컴퓨터 프로그램을 생성하여 상기 제1 컴퓨터 프로그램의 함수를 수행하는 단계
    을 포함하고,
    상기 제2 컴퓨터 프로그램은 제2 다수의 포대기형 루프들을 포함하여 어레이의 테이터를 처리하고, 상기 제2 다수의 포대기형 루프들은 상기 제1 다수의 포대기형 루프들보다 적어도 하나 더 많은 루프를 포함하며, 상기 제2 다수의 포대기형 루프들 중 제1 루프를 반복하는 것은 서로 독립적인 머신-판독가능한 매체.
  13. 제12항에 있어서,
    상기 제1 다수의 포대기형 루프들의 프로그램 명령문(statement)은 상기 제2 다수의 포대기형 루프들의 조건문 내에 나타나고, 상기 조건문은 상기 제1 루프의 유도 변수를 상기 제2 다수의 포대기형 루프들 중 제2 루프의 유도 변수와 비교하는 머신-판독가능한 매체.
  14. 제12항에 있어서,
    상기 제1 컴퓨터 프로그램은 다차원 어레이의 데이터를 처리하는 것인 머신-판독가능한 매체.
  15. 제12항에 있어서,
    상기 제1 다수의 포대기형 루프들을 분석하는 단계는,
    제1 선형 방정식으로서 제1 어레이 액세스를 나타내는 단계;
    제2 선형 방정식으로서 제2 어레이 액세스를 나타내는 단계; 및
    상기 제1 및 제2 선형 방정식들에 대한 동시 해(simultaneous solution)를 찾는 단계
    를 포함하는 머신-판독가능한 매체.
  16. 제15항에 있어서,
    상기 제2 다수의 포대기형 루프들 중 상기 제1 루프를 반복하는 것은 상기 제1 및 제2 선형 방정식들에 대한 상기 동시 해에 대응하는 머신-판독가능한 매체.
  17. 다수의 프로세서들;
    메모리; 및
    데이터 저장 장치
    를 포함하고,
    상기 데이터 저장 장치는, 상기 프로세서들로 하여금, 상기 메모리에 제1 컴퓨터 프로그램을 로딩하도록 하고, 우선 제1 다수의 포대기형 루프들을 식별하여 어레이 내의 데이터를 처리하고, 제2 컴퓨터 프로그램을 생성하여 상기 제1 컴퓨터 프로그램의 함수를 수행하도록 하는 명령어들을 포함하고,
    상기 제2 컴퓨터 프로그램은 제2 다수의 포대기형 루프들을 포함하여 어레이 내의 데이터를 처리하고, 상기 제2 다수의 포대기형 루프들은 상기 제1 다수의 포대기형 루프들보다 한 루프를 더 포함하며,
    상기 제2 다수의 포대기형 루프들 내의 프로그램 명령문들은 외부 루프의 유도 변수와 내부 루프의 유도 변수를 연관시키는 조건식들에 의해 파티션들로 분리되는 시스템.
  18. 제17항에 있어서,
    상기 제2 다수의 포대기형 루프들 중 상기 외부 루프를 반복하는 것은 상기 다수의 프로세서들에 의해 병렬로 실행되는 시스템.
  19. 제17항에 있어서,
    상기 다수의 프로세서들은 단일 물리적 프로세서의 다수의 실행 코어들을 포 함하는 시스템.
  20. 제17항에 있어서,
    상기 다수의 프로세서들은 다수의 물리적 프로세서들을 포함하고, 물리적 프로세서 각각은 적어도 하나의 실행 코어를 포함하는 시스템.
KR1020087007116A 2005-09-23 2006-09-14 멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터변환들 KR100991091B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/234,484 US20070074195A1 (en) 2005-09-23 2005-09-23 Data transformations for streaming applications on multiprocessors
US11/234,484 2005-09-23

Publications (2)

Publication Number Publication Date
KR20080041271A KR20080041271A (ko) 2008-05-09
KR100991091B1 true KR100991091B1 (ko) 2010-10-29

Family

ID=37635770

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087007116A KR100991091B1 (ko) 2005-09-23 2006-09-14 멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터변환들

Country Status (6)

Country Link
US (1) US20070074195A1 (ko)
EP (2) EP1927048A1 (ko)
JP (1) JP5009296B2 (ko)
KR (1) KR100991091B1 (ko)
CN (1) CN101268444B (ko)
WO (1) WO2007038035A1 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7953158B2 (en) * 2005-06-30 2011-05-31 Intel Corporation Computation transformations for streaming applications on multiprocessors
US7757222B2 (en) * 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
US7793278B2 (en) * 2005-09-30 2010-09-07 Intel Corporation Systems and methods for affine-partitioning programs onto multiple processing units
CA2543304A1 (en) * 2006-04-11 2007-10-11 Ibm Canada Limited - Ibm Canada Limitee Code highlight and intelligent location descriptor for programming shells
US8413151B1 (en) 2007-12-19 2013-04-02 Nvidia Corporation Selective thread spawning within a multi-threaded processing system
US8819647B2 (en) * 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US8122442B2 (en) * 2008-01-31 2012-02-21 Oracle America, Inc. Method and system for array optimization
US8930926B2 (en) * 2008-02-08 2015-01-06 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
US9858053B2 (en) 2008-02-08 2018-01-02 Reservoir Labs, Inc. Methods and apparatus for data transfer optimization
US8661422B2 (en) * 2008-02-08 2014-02-25 Reservoir Labs, Inc. Methods and apparatus for local memory compaction
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
WO2010033622A2 (en) * 2008-09-17 2010-03-25 Reservoir Labs, Inc. Methods and apparatus for joint parallelism and locality optimization in source code compilation
US8688619B1 (en) 2009-03-09 2014-04-01 Reservoir Labs Systems, methods and apparatus for distributed decision processing
WO2010121228A2 (en) * 2009-04-17 2010-10-21 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
US9185020B2 (en) * 2009-04-30 2015-11-10 Reservoir Labs, Inc. System, apparatus and methods to implement high-speed network analyzers
US9438861B2 (en) * 2009-10-06 2016-09-06 Microsoft Technology Licensing, Llc Integrating continuous and sparse streaming data
US8892483B1 (en) 2010-06-01 2014-11-18 Reservoir Labs, Inc. Systems and methods for planning a solution to a dynamically changing problem
US8914601B1 (en) 2010-10-18 2014-12-16 Reservoir Labs, Inc. Systems and methods for a fast interconnect table
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) * 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9134976B1 (en) 2010-12-13 2015-09-15 Reservoir Labs, Inc. Cross-format analysis of software systems
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US9430596B2 (en) 2011-06-14 2016-08-30 Montana Systems Inc. System, method and apparatus for a scalable parallel processor
US9489180B1 (en) 2011-11-18 2016-11-08 Reservoir Labs, Inc. Methods and apparatus for joint scheduling and layout optimization to enable multi-level vectorization
US9830133B1 (en) 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
US9798588B1 (en) 2012-04-25 2017-10-24 Significs And Elements, Llc Efficient packet forwarding using cyber-security aware policies
US10936569B1 (en) 2012-05-18 2021-03-02 Reservoir Labs, Inc. Efficient and scalable computations with sparse tensors
US9684865B1 (en) 2012-06-05 2017-06-20 Significs And Elements, Llc System and method for configuration of an ensemble solver
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
WO2014142972A1 (en) * 2013-03-15 2014-09-18 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
WO2015050594A2 (en) * 2013-06-16 2015-04-09 President And Fellows Of Harvard College Methods and apparatus for parallel processing
US9110681B2 (en) 2013-12-11 2015-08-18 International Business Machines Corporation Recognizing operational options for stream operators at compile-time

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100334479B1 (ko) 1999-02-03 2002-04-26 포만 제프리 엘 컴퓨터 처리 시스템에서 로드 동작의 순서 변경 방법 및 장치

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6615366B1 (en) * 1999-12-21 2003-09-02 Intel Corporation Microprocessor with dual execution core operable in high reliability mode
US6772415B1 (en) * 2000-01-31 2004-08-03 Interuniversitair Microelektronica Centrum (Imec) Vzw Loop optimization with mapping code on an architecture
US6952821B2 (en) * 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
US7086038B2 (en) * 2002-10-07 2006-08-01 Hewlett-Packard Development Company, L.P. System and method for creating systolic solvers
US7797691B2 (en) * 2004-01-09 2010-09-14 Imec System and method for automatic parallelization of sequential code
US7487497B2 (en) * 2004-08-26 2009-02-03 International Business Machines Corporation Method and system for auto parallelization of zero-trip loops through induction variable substitution

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100334479B1 (ko) 1999-02-03 2002-04-26 포만 제프리 엘 컴퓨터 처리 시스템에서 로드 동작의 순서 변경 방법 및 장치

Also Published As

Publication number Publication date
JP2009509267A (ja) 2009-03-05
CN101268444A (zh) 2008-09-17
KR20080041271A (ko) 2008-05-09
US20070074195A1 (en) 2007-03-29
WO2007038035A1 (en) 2007-04-05
EP2345961A1 (en) 2011-07-20
CN101268444B (zh) 2016-05-04
JP5009296B2 (ja) 2012-08-22
EP1927048A1 (en) 2008-06-04

Similar Documents

Publication Publication Date Title
KR100991091B1 (ko) 멀티프로세서들의 스트리밍 어플리케이션들을 위한 데이터변환들
Wu et al. Red fox: An execution environment for relational query processing on gpus
Ding et al. Improving effective bandwidth through compiler enhancement of global cache reuse
Iglberger et al. Expression templates revisited: a performance analysis of current methodologies
Hijma et al. Optimization techniques for GPU programming
Prasad et al. Automatic compilation of MATLAB programs for synergistic execution on heterogeneous processors
Orchard et al. Ypnos: declarative, parallel structured grid programming
Samadi et al. Adaptive input-aware compilation for graphics engines
Yang et al. A unified optimizing compiler framework for different GPGPU architectures
Kandemir et al. A hyperplane based approach for optimizing spatial locality in loop nests
Hammami et al. An overview on loop tiling techniques for code generation
Hanxleden Handling irregular problems with Fortran D—A preliminary report
Neves et al. Compiler-assisted data streaming for regular code structures
Wu et al. Bandwidth-aware loop tiling for dma-supported scratchpad memory
Lueh et al. C-for-metal: High performance simd programming on intel gpus
Tian et al. Compiler transformation of nested loops for general purpose GPUs
CN112130848B (zh) 一种面向便笺式存储器的带宽感知循环分块优化方法、编译系统、设备及存储介质
Falch et al. ImageCL: An image processing language for performance portability on heterogeneous systems
Kelefouras et al. A methodology for efficient tile size selection for affine loop kernels
Funke et al. Low-latency query compilation
Hanxleden et al. Value-based distributions in fortran d| a preliminary report
Liu et al. Improving the performance of OpenMP by array privatization
Khan et al. RT-CUDA: a software tool for CUDA code restructuring
Yang et al. Cuda-np: Realizing nested thread-level parallelism in gpgpu applications
Gawade et al. Adaptive query parallelization in multi-core column stores.

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B701 Decision to grant
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee