KR20110097716A - 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당 - Google Patents

기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당 Download PDF

Info

Publication number
KR20110097716A
KR20110097716A KR1020110016523A KR20110016523A KR20110097716A KR 20110097716 A KR20110097716 A KR 20110097716A KR 1020110016523 A KR1020110016523 A KR 1020110016523A KR 20110016523 A KR20110016523 A KR 20110016523A KR 20110097716 A KR20110097716 A KR 20110097716A
Authority
KR
South Korea
Prior art keywords
live
parallel
processor
mask
block
Prior art date
Application number
KR1020110016523A
Other languages
English (en)
Other versions
KR101360512B1 (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 KR20110097716A publication Critical patent/KR20110097716A/ko
Application granted granted Critical
Publication of KR101360512B1 publication Critical patent/KR101360512B1/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/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • 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/468Specific access rights for resources, e.g. using capability register

Abstract

SIMD(single instruction multiple data) 프로세서는 컴파일링 동안에 서로 양립하지 않는 기록 마스크(write mask)를 갖는 라이브 레인지(live range)를 식별함으로써 레지스터 할당을 성취할 수 있다. 이어서, 서로 양립하지 않는 기록 마스크를 갖는 라이브 레인지이 동일한 물리적 레지스터에 할당되지 않도록 에지가 그러한 라이브 레인지 사이에서 간섭 그래프 내에 부가된다.

Description

기록 마스크를 사용하는 SIMD 아키텍처에 의한 레지스터 할당{REGISTER ALLOCATION WITH SIMD ARCHITECTURE USING WRITE MASKS}
본 발명은 전반적으로 프로세서에 관한 것이며, 특히 SIMD(single instruction multiple data) 프로세서에 관한 것이다.
SIMD 프로세서는 단일 인스트럭션이 다수의 데이터 요소에 대해서 병렬로 동작할 수 있는 프로세서이다. 몇몇 SIMD 프로세서는 SIMD8, SIMD16 또는 SIMD32와 같은 서로 다른 길이로 동작할 수 있다.
물리적 SIMD 레지스터는 다수의 소형 데이터 요소를 저장하기 위해서 사용될 수 있는 다량의 비트를 갖는다. 동작 모드는 대략적으로 SIMDm×n로 표현되는데, 여기서 m은 벡터의 크기를 기술하는 수치 항이며 n은 SIMD에서 실행되는 동시적(concurrent) 프로그램 흐름의 개수이다. 가령, SIMD1×8의 단축형인 SIMD8은 단일 레지스터가 8 개의 벡터로 구성된 단일 데이터 요소(동일한 데이터 요소)를 포함하는 어레이 데이터 구조에 기초한 SIMD 동작을 나타낸다. 효과적으로, 8 개의 동시적 프로그램 흐름이 존재한다. 가령, SIMD1×16의 단축형인 SIMD16은 각 SIMD 인스트럭션이 16 개의 벡터로 구성된 단일 데이터 요소(동일한 데이터 요소)를 포함하는 한 쌍의 레지스터에 대해서 동작하는 SIMD 동작을 나타낸다. SIMD16은 16 개의 동시적 프로그램 흐름이 존재한다.
일 제어 흐름 브랜치를 통해서 레지스터의 일부가 계산되고 레지스터의 다른 부분은 다른 제어 흐름 브랜치를 통해서 계산될 수 있도록 기록 마스크가 사용될 수 있다. 일 제어 흐름 브랜치에서 일 마스크를 사용하여서 기록된 레지스터가 그와 병렬하는 제어 흐름 브랜치에서 상이한 마스크를 사용하여서 기록되면 실행 에러가 발생한다.
가령, 간단한 실행 에러는 "선행" 브랜치("then" branch)에서 또한 기록되었던 레지스터 내로 일정한 데이터를 블록 로딩하는 인스트럭션의 "병렬" 브랜치("parallel" branch)에서 "무 마스크(no mask)" 수정자(modifier)를 사용한다. 무 마스크 수정자를 사용하는 인스트럭션은 상기 선행 브랜치에서 기록된 데이터를 오버라이트(overwrite)할 수 있다. 무 마스크 수정자가 생략되거나 상이한 레지스터가 상기 블록 로딩에 대한 목적지로서 사용된다면, 어떠한 의미 있는 데이터도 오버라이트되지 않을 것이다. 그러나, 이 경우에는, 상기 무 마스크 수정자가 요구되며 대부분의 레지스터 할당 알고리즘은 동일한 목적지가 각 인스트럭션에 대해서 사용될 수 있게 한다.
통상적으로, 이는 모든 "병렬" 브랜치가 가령 동일한 폭을 갖는 마스크와 같이 동일한 타입의 마스크를 사용하지 않는다면 마스크 수정자 또는 기록 마스크가 사용될 수 없음을 의미한다. 상이한 타입의 기록 마스크로는 기록 마스크 또는 마스크 수정자를 사용할 수 없기 때문에 소수의 동시적 프로그램 흐름을 사용하게 되어서 효율이 감소할 수 있다.
본 발명은 SIMD(single instruction multiple data) 프로세서에서의 컴파일링 동안에 서로 충돌하는 기록 마스크(write mask)를 가질 수 없는 라이브 레인지(live range)를 판정하는 단계를 포함하는 방법을 제공한다.
도 1은 본 발명의 일 실시예에 따른 흐름도이다.
도 2는 본 발명의 일 실시예에 따라, 도 1의 흐름도의 구축 단계의 흐름도이다.
도 3은 가정적(hypotheticla) 제어 흐름 그래프이다.
도 4는 가정적 지배 구조 트리이다.
도 5는 본 발명의 다른 실시예에 따른 구축 단계의 흐름도이다.
도 6은 본 발명의 일 실시예에 따른 컴퓨터 시스템의 개략도이다.
본 발명의 몇몇 실시예에 따라서, 서로 양립하지 않는(즉, 충돌하는) 기록 마스크를 가질 수 없는 "라이브 레인지(live range)"는 레지스터 할당 알고리즘의 구축 단계 이전에 또는 그 동안에 검출될 수 있다. 이로써, 그러한 충돌이 검출되고 보정 동작이 수행될 수 있다. 이는 단지 충돌의 가능성 여부를 판정하되 실제로 충돌이 발생했는지에 대해서는 무관하게 보정 동작이 수행되는 종래의 방식과는 상이하다.
본 발명의 몇몇 실시예에 따라서, 이러한 충돌은 에지를 간섭 그래프(interference graph)에 부가함으로써 치유될 수 있다. 이는 2 개의 서로 다른 SIMD 모드의 사용을 단순히 금지하는 종래 방식과는 차이가 있다. 따라서, 가령 SIMD8 및 SIMD16 모두를 허용하는 아키텍처에서, 소수의 흐름(flow)을 사용하는 모드만이 사용되거나 기록 마스크의 하위 부분(lower portion)만이 사용되어서 몇몇 종래 방식에서의 충돌 가능성을 억제할 수 있다.
본 발명의 몇몇 실시예에 따라서, 변수 및 라이브 레인지를 특정 레지스터에 할당하기 위해 그래프 컬러링 레지스터 할당 알고리즘(graph coloring register allocation algorithm)이 사용될 수 있다. 이러한 경우에, 검출 및 충돌-분해능(conflict-resolution) 모두가 도 1에 도시된 바와 같은 레지스터 할당 알고리즘의 구축 단계에 부가될 수 있다. 레지스터 할당은 프로그램 변수를 소수의 프로세스 레지스터 상에 할당하는 프로세스이다. 이 프로세스의 목적은 레지스터 내에 가능한 한 많은 오퍼랜드를 유지시켜서 최종적인 프로그램의 실행 속도를 최대화시키는 것이다.
빈 패킹(bin packing) 방식, Chow 스타일 할당기와 같은 우선 순위 기반 그래프 컬러링(priority based graph coloring) 방식, Chaitin 스타일 할당기와 같은 상향식 그래프 컬러링 방식 및 (JIT(just-in-time) 컴파일러에서 공통적인) 선형 스캔 레지스터 할당 방식을 포함하는 상이한 레지스터 할당 메카니즘이 알려져 있다. 본 발명의 몇몇 실시예에 따라서, Chaitin-Briggs 컬러링 레지스터 할당 알고리즘이 사용되지만, 다른 실시예에서는, 다른 레지스터 할당 알고리즘이 사용될 수 있다.
레지스터 할당 알고리즘은 레지스터이 병렬 제어 흐름 브랜치에서 상호 양립하지 않은 마스크를 사용하여서 기록되지 않도록 보장하고자 한다. 몇몇 실시예에서, 이는 도 1에 도시된 그래프 컬러링 레지스터 할당 알고리즘(10)을 사용하여서 수행될 수 있다. 이 기술적 사상은 가능한 한 많은 변수를 레지스터에 할당하고 오직 필요한 변수를 메인 메모리로 스필(spill)하는 것이다. Chaitin-Briggs 그래프 컬러링 방식을 사용하는 실시예에 따르면, 리넘버링(renumbering) 단계(12)에서, 각 변수는 고유하게 넘버링된 자신의 논리적 레지스터에 제공된다. 이러한 리넘버링 단계는 레지스터 변수 인식 동작으로서 알려진다.
구축 단계(14)에서, 간섭 그래프가 전개된다. 변수 및 라이브 레인지는 무방향성 그래프(undirected graph)에서 버텍스(vertex)로서 표현되고, (종종 "노드"로서 지칭되는) 2 개의 버텍스는 이들의 대응하는 변수가 이이 동시에 존재하기 때문에 간섭할 때에 에지(edge)에 의해서 접속될 수 있다. 이 그래프의 버텍스 컬러링은 레지스터 할당으로 볼 수 있고, 이때 각 레지스터는 버텍스 컬러에 의해서 표현되며, 어떠한 버텍스도 그의 이웃하는 버텍스와 동일한 컬러를 가지지 않는다. 라이브 레인지는 변수가 활성 상태에 있는 시간 간격(time interval)이다. 변수 및 라이브 레인지는 몇몇 실시예에서 상호 교환 가능하게 다루어질 수 있다.
2 개의 변수가 동일한 시간에 존재하고 이로써 간섭하게 되면 에지는 이 2 개의 변수 간에서 그려진다. 따라서, 충돌을 억제하기 위해 간섭을 일으키는 변수는 서로 다른 레지스터 위치에 존재하거나 그래프 내에서 서로 다른 컬러를 가질 필요가 있다.
다음으로, 합병 단계(16)에서는 각 그래프에 대한 경로가 최적화된다. 가능하다면 그래프 컬러링 문제의 크기가 감소되도록 2 개의 비간섭 변수를 단일 변수로 대체함으로써 노드이 병합된다.
다음으로, 스필 비용이 단계(18)에서 계산된다. 간섭 그래프가 구축된 후에, 한정된 개수의 레지스터가 주어진다면, 모든 노드를 레지스터에 맵핑하는 것은 불가능할 수 있다. 그래서, 몇몇 노드는 외부 메모리로 스필되거나 이동될 수 있다.
그 목적은 그러한 노드를 스필하여서 최소의 스필 비용이 되도록 하는 것이다. 스필 비용은 노드를 외부 메모리에 스필하는 비용이며 이는 변수이 사용되는 횟수를 포함하는 다수의 요인에 의존한다. 스필되는 노드들의 우선 순위를 정하기 위해 이러한 스필로 인한 실행 성능 저하의 경험적(heuristic) 측정이 사용될 수 있다. 이러한 우선 순위 결정은 노드이 외부 메모리로 이동하는 순서를 결정한다.
이어서, 간소화/선택 단계(20)에서, 서로 다른 레지스터에 대응하는 가용한 여러 컬러를 각 버텍스 노드에 적용함으로써 그래프에 대한 실제 컬러링이 수행된다. 이는 블록별로 차례차례 수행될 수 있다. 블록은 간단히 말하면 컴파일링될 상당량의 코드이다.
단계(20) 후에, 스필 코드가 단계(22)에서 실제적으로 결정된다. 이 스필 코드는 변수가 외부 메모리로 스필되도록 하는데 필요한 코드이다. 흐름이 모든 블록에 대해서, 또한 다음 단계로 진행하기 이전에 실행된다. 이어서, 간소화/선택 단계 후에, 다음 단계는 스필 코드를 결정한 후에 다시 시작 위치로 순환적으로 돌아가는 것이다.
도 2에서는, 본 발명의 일 실시예에 따라서, 상기 구축 단계(14)가 다이아몬드 형태로 표시된 단계(30)에서 2 개의 기록 마스크 간의 충돌이 가능한지의 여부를 판정함으로써 시작된다. 만일 그렇다면, 단계(32)에서, 서로 양립하지 않는 기록 마스크를 구비할 수 없는 라이브 레인지가 실제적으로 판정된다. 다음으로, 단계(34)에서, 에지가 간섭 그래프에 부가되며 이로써 서로 양립하지 않는 기록 마스크를 갖는 라이브 레인지는 동일한 물리적 레지스터에 할당되지 않는다.
따라서, 도 3에 도시된 바와 같이, 가정적 제어 흐름 그래프는, 본 실례에서는 진출 블록(exit block) 이전에 본 실례에서는 BB0 내지 BB7로 표시된 일련의 블록들보다 선행하는 진입 블록(entry block)을 포함할 수 있다. 이 제어 흐름 그래프는 컴파일링될 알고리즘의 논리적 흐름을 나타내고 있다.
도 4는 도 3에 도시된 제어 흐름 그래프에 대한 가정적 지배 구조 트리(dominance tree)를 나타내고 있다. 이 지배 구조 트리는 어느 기본 블록이 이 트리 내에서 다른 기본 블록의 자 블록(child block)인지를 판정하기 위해서 컴파일러 내에서 사용된다. 흐름이 부모 블록(parent block)을 통과하여서 자식 블록에 이르게 되는 것이 보장되면 이 블록은 자식 블록의 부모 블록이 된다. 가령, 도 3의 제어 흐름 그래프에서, 기본 블록 1(BB1)은 도 4의 지배 구조 트리에서 표시된 바와 같이 기본 블록 2(BB2)의 모 블록이다.
따라서, 이 지배 구조 트리는 (부모 노드로 지칭되는) 어느 노드가 (자식 노드로 지칭되는) 다른 노드에 이르도록 거치게 되어 있는지를 나타내고 있다. 이 지배 구조 트리는 컴파일러에 의해서 제어 흐름 그래프로부터 도출될 수 있지만, 컴파일러는 이 지배 구조 트리로부터 제어 흐름 그래프를 도출할 수 없다. 이 지배 구조 트리는 일 실시예에서 병렬 브랜치 및 병렬 라이브 세트를 찾는 데 사용된다. 병렬 라이브 세트는 서로 양립하지 않는 마스크를 가질 수 없는 라이브 레인지들로 구성된 세트이다.
다른 기본 블록에 대해 병렬적인 기본 블록은 이 기본 블록의 지배 경로(dominance path) 내에 존재하지 않는 진출 블록을 지배하는(dominate) 선행 블록까지 기본 블록을 지배하는 선행 블록의 바로 후행 블록이다. 달리 말하면, 병렬 블록는 병렬 실행 브랜치들로의 진입 노드를 포함할 수 있다. 기본 블록 2는 기본 블록 6에 대한 병렬 실행 브랜치로의 진입 노드이다. 또한, 병렬 블록는 병렬 실행 브랜치로부터의 "합류 노드"를 포함한다. 기본 블록 7은 본 실례에서 기본 블록 6에 대한 합류 노드이다. 병렬 블록은 또한 "임계 에지 노드(critical edge node)"를 포함한다. 기본 블록 5는 본 실례에서 기본 블록 6에 대한 임계 에지 노드이다. 표시된 바와 같이, 기본 블록에 대한 라이브-인 세트(live-in set)는 기본 블록 6에 대해 병렬인 기본 블록에 대해서 도 3 및 도 4에서 모서리가 둥글게 된 형태(LIVEIN)로 표시되어 있다. 이 라이브-인 세트는 집합적으로 병렬 라이브 세트를 기술한다. 따라서, 몇몇 실시예에서, 병렬 블록는 병렬 실행 브랜치로의 진입 노드, 병렬 실행 브랜치로부터의 합류 노드 또는 임계 에지 노드로서 자동적으로 검출될 수 있다.
진입 노드, 기본 블록 1, 기본 블록 3 및 기본 블록 4는 기본 블록 6에 대해서 병렬로 배열되었다고 간주되지 않는데, 이이 기본 블록 6을 포함하는 동일한 지배 경로 상에 있기 때문이다. 또한, 기본 블록 0은 병렬로 되었다고 간주되지 않는데 그 이유는 기본 블록 1이 진출 노드를 지배하고 있으며 기본 볼록 1의 상류(upstream)의 노드는 검사되지 않기 때문이다. 마지막으로, 기본 블록 7이 기본 블록 6에 대해서는 직관적으로는 병렬이지 않을지라도, 기본 블록 7의 라이브-인 세트는 기본 블록 6에 대해서 병렬이다. 이는 기본 블록 7 노드에 대해서 라이브-인(live-in)인 라이브 레인지가 기본 블록 6에 대해서 병렬인 노드들의 라이브-아웃 세트(live-out set) 내에 있기 때문이다. 구체적으로 말하자면, 기본 블록 7의 라이브-인 세트는 기본 블록 2 및 기본 블록 5의 라이브-아웃 세트로 구성된다. 보다 일반적으로 말하자면, 합류 노드들의 라이브-인 세트는 그들의 선행 노드들의 라이브-아웃 세트와 동일한 세트이다. 합류 노드들의 라이브-인 세트를 병렬 라이브 세트 내에 포함시킴으로써, 알고리즘은 라이브-아웃 세트를 고려할 필요가 없게 된다.
일단 기본 블록에 대한 병렬 라이브 세트가 구해졌으면, 그 기본 블록에 있어서의 각 인스트럭션이 조사되고 그의 기록 마스크가 이 병렬 라이브 세트 내의 각 라이브 레인지의 마스크와 양립하지 않는지의 여부가 판정된다. 만일 그렇다면, 알고리즘은 (원래의 Chaitin-Briggs 알고리즘에서는 간섭하지 않을 수 있는) 인스트럭션의 목적지와 라이브 레인지 간에 간섭을 삽입시킨다.
2 개의 마스크가 병렬 브랜치에서 동일한 SIMD 서브 채널에 기록할 수 있다면 이는 서로 양립하지 않는다. 몇몇 실시예에서, 서로 양립하지 않는 기록 마스크를 갖는 인스트럭션를 회피할 필요는 회피될 수 있으며 거의 효율 손실이 없게 처리될 수 있다.
도 5를 참조하면, 더 상세한 실시예에 따라, 단계(40)에서, 초기 기본 블록이 선택된다. 단계(42)에서, 선택된 기본 블록의 지배 경로 상에 있지 않은 병렬 기본 블록이 식별된다. 이어서, 단계(44)에서, 병렬 라이브-인 세트를 확립하기 위해 이 병렬 기본 블록에 대한 라이브-인 세트이 판정된다.
이어서, 단계(46)에서, 선택된 기본 블록에 있어서의 각 인스트럭션이 검사되어서 자신의 마스크가 병렬 라이브-인 세트 내의 마스크과 양립하지 않는지의 여부가 판정될 수 있다. 다이아몬드 형태로 표시된 단계(48)에서, 만일 서로 양립한다면, 다이아몬드 형태로 표시된 단계(52)에서, 이 블록이 최종 블록인지의 여부가 판정된다. 만일 그러하다면, 이 흐름은 종료되고, 그렇지 않으면, 이 흐름은 단계(40)로 돌아가서 반복된다.
만일 단계(52)에서 서로 양립하지 않으면, 단계(50)에서, 에지가 간섭 그래프에 삽입되고 이 흐름은 반복된다.
도 6에 도시된 컴퓨터 시스템은 하드 드라이브(134) 및 버스(104)에 의해서 칩세트 코어 로직(110)에 연결된 분리가능한 매체(136)를 포함한다. 이 코어 로직은 일 실시예에서 (버스(105)를 통해서) 그래픽 프로세서(112)에 연결될 수 있고 메인 프로세서(100)에 연결될 수 있다. 또한, 그래픽 프로세서(112)는 버스(106)에 의해서 프레임 버퍼(114)에 연결될 수 있다. 이 프레임 버퍼(114)는 버스(107)에 의해서 디스플레이 스크린(118)에 연결되고, 이 디스플레이 스크린(118)은 버스(108)에 의해서 키보드 또는 마우스(120)와 같은 통상적인 구성 요소에 연결될 수 있다.
소프트웨어적 구현의 경우에, 도 2 및 도 5의 단계들의 시퀀스를 구현하기에 적합한 코드가 때때로 본 명세서에서 외부 메모리로 지칭되었던 메인 메모리(132)를 포함하는 임의의 적합한 반도체, 자기 또는 광학 메모리 내에 저장될 수 있다. 일 실시예에서, 코드(139)가 프로세서(100) 또는 그래픽 프로세서(112)와 같은 프로세서에 의해서 실행되기 위해서 메인 메모리(132) 또는 프레임 버퍼(114)와 같은 머신 판독 가능한 매체 내에 저장될 수 있다.
소프트웨어 실시예에서, 도 2 및 도 5의 단계들의 시퀀스는 그래픽 프로세서(112)의 일부일 수 있다. 그러나, 이 시퀀스는 참조 부호(139)로 표시된 바와 같이 메인 메모리(132) 또는 프레임 버퍼(114) 내에 저장된 소프트웨어로 구현될 수도 있다. 물론, 이러한 소프트웨어는 그래픽 프로세서(112) 또는 임의의 다른 저장 디바이스 상에 상주할 수 있다.
본 명세서에서 기술된 그래픽 프로세싱 기술는 다양한 하드웨어 아키텍처로 해서 구현될 수 있다. 가령, 그래픽 기능은 칩세트 내에 통합될 수 있다. 이와 달리, 개별 그래픽 프로세서가 사용될 수 있다. 또 다른 실시예에서, 그래픽 기능은 멀티코어 프로세서를 포함하는 범용 프로세서에 의해서 구현될 수 있다.
본 명세서 전반에 걸쳐서 "일 실시예" 및 "실시예"를 참조하는 바는 이 실시예와 관련하여서 기술되는 특징, 구조 또는 특성이 본 발명 내에 포함되는 적어도 하나의 구현에 포함됨을 의미한다. 따라서, "일 실시예" 또는 "실시예"라는 구절이 등장한다고 하여서 이이 반드시 동일한 실시예를 지칭하는 것은 아니다. 또한, 상기 특징, 구조 또는 특성은 기술된 특정 실시예가 아닌 다른 적합한 형태로 도입될 수 있으며 이러한 형태는 모두 본 출원의 청구 범위 내에 포함될 수 있다.
본 발명이 한정된 수의 실시예를 참조하여서 기술되었지만, 본 기술 분야의 당업자는 수많은 수정 및 변경이 이들 실시예로부터 가능하다는 사실을 잘 알 것이다. 첨부된 청구 범위는 본 발명의 기술적 사상 및 범위 내에 포함되는 이러한 모든 수정 및 변경 사항를 포함한다.

Claims (20)

  1. SIMD(Single Instruction Multiple Data) 프로세서의 컴파일링 동안에 서로 충돌하는 기록 마스크(colliding write masks)를 가질 수 없는 라이브 레인지(live range)를 판정하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    서로 양립하지 않는 기록 마스크를 갖는 라이브 레인지는 동일한 물리적 레지스터에 할당되지 않도록 에지(edge)를 간섭 그래프(interference graph)에 부가하는 단계를 포함하는 방법.
  3. 제 1 항에 있어서,
    충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하기 위해 지배 구조 트리(dominance tree)를 사용하는 단계를 포함하는 방법.
  4. 제 3 항에 있어서,
    선택된 기본 블록의 지배 경로(dominance path) 상에 존재하지 않는 병렬 기본 블록을 탐색하는 단계를 포함하는 방법.
  5. 제 4 항에 있어서,
    병렬 라이브-인 세트(parallel live-in set)를 확립하기 위해 병렬 기본 블록에 대한 라이브 세트(live set)를 판정하는 단계를 포함하는 방법.
  6. 제 5 항에 있어서,
    상기 선택된 기본 블록에 있어서의 각 인스트럭션을 자신의 마스크가 상기 병렬 라이브-인 세트 내의 마스크과 양립하지 않는지의 여부를 확인하기 위해 검사하는 단계를 포함하는 방법.
  7. 컴퓨터로 하여금, 서로 양립하지 않는 기록 마스크를 갖는 라이브 레인지이 동일한 물리적 레지스터에 할당되지 않도록 에지를 간섭 그래프에 부가하게 하는 인스트럭션를 저장하는 컴퓨터 판독가능한 매체.
  8. 제 7 항에 있어서,
    SIMD(single instruction multiple data) 프로세서의 컴파일링 동안에 서로 충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하게 하는 인스트럭션를 또한 저장하는 컴퓨터 판독가능한 매체.
  9. 제 7 항에 있어서,
    충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하기 위해 지배 구조 트리를 사용하게 하는 인스트럭션를 또한 저장하는 컴퓨터 판독가능한 매체.
  10. 제 9 항에 있어서,
    선택된 기본 블록의 지배 경로 상에 존재하지 않는 병렬 기본 블록을 탐색하게 하는 인스트럭션를 또한 저장하는 컴퓨터 판독가능한 매체.
  11. 제 10 항에 있어서,
    병렬 라이브-인 세트(parallel live-in set)를 확립하기 위해 병렬 기본 블록에 대한 라이브 세트(live set)를 판정하게 하는 인스트럭션를 또한 저장하는 컴퓨터 판독가능한 매체.
  12. 제 11 항에 있어서,
    상기 선택된 기본 블록에 있어서의 각 인스트럭션을 자신의 마스크가 상기 병렬 라이브-인 세트 내의 마스크과 양립하지 않는지의 여부를 확인하기 위해 검사하게 하는 인스트럭션을 또한 저장하는 컴퓨터 판독가능한 매체.
  13. 컴파일링 동안에 서로 충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하는 SIMD 프로세서와,
    상기 프로세서에 커플링된 메모리를 포함하는 장치.
  14. 제 13 항에 있어서,
    상기 프로세서는 서로 양립하지 않는 기록 마스크를 갖는 라이브 레인지이 동일한 물리적 레지스터에 할당되지 않도록 에지를 간섭 그래프에 부가하는 장치.
  15. 제 13 항에 있어서,
    상기 프로세서는 충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하기 위해 지배 구조 트리를 사용하는 장치.
  16. 제 15 항에 있어서,
    상기 프로세서는 선택된 기본 블록의 지배 경로 상에 존재하지 않는 병렬 기본 블록을 탐색하는 장치.
  17. 제 16 항에 있어서,
    상기 프로세서는 병렬 라이브-인 세트(parallel live-in set)를 확립하기 위해 병렬 기본 블록에 대한 라이브 세트(live set)를 판정하는 장치.
  18. 제 17 항에 있어서,
    상기 프로세서는 상기 선택된 기본 블록에 있어서의 각 인스트럭션을 자신의 마스크가 상기 병렬 라이브-인 세트 내의 마스크과 양립하지 않는지의 여부를 확인하기 위해 검사하는 장치.
  19. 제 13 항에 있어서,
    상기 프로세서는 그래픽 프로세서인 장치.
  20. 제 13 항에 있어서,
    상기 메모리는 시스템 메모리인 장치.
KR1020110016523A 2010-02-24 2011-02-24 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당 KR101360512B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/711,319 US8434074B2 (en) 2010-02-24 2010-02-24 Register allocation with SIMD architecture using write masks
US12/711,319 2010-02-24

Publications (2)

Publication Number Publication Date
KR20110097716A true KR20110097716A (ko) 2011-08-31
KR101360512B1 KR101360512B1 (ko) 2014-02-07

Family

ID=44464385

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110016523A KR101360512B1 (ko) 2010-02-24 2011-02-24 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당

Country Status (3)

Country Link
US (1) US8434074B2 (ko)
KR (1) KR101360512B1 (ko)
CN (2) CN104156253B (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101636521B1 (ko) * 2010-03-26 2016-07-06 삼성전자주식회사 코드 오버레이 생성 장치 및 방법
WO2012025792A1 (en) * 2010-08-26 2012-03-01 Freescale Semiconductor, Inc. Optimization method for compiler, optimizer for a compiler and storage medium storing optimizing code
US8813054B2 (en) * 2010-12-13 2014-08-19 Hewlett-Packard Development Company, L. P. Sequential-code optimization of parallel code based on identifying siloed program references
US9141359B2 (en) 2010-12-13 2015-09-22 Hewlett-Packard Development Company, L.P. Procedural concurrency graph generator
US9015687B2 (en) 2011-03-30 2015-04-21 Intel Corporation Register liveness analysis for SIMD architectures
US9990202B2 (en) 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions
CN104731555A (zh) * 2013-12-23 2015-06-24 中兴通讯股份有限公司 一种避免寄存器冲突的方法及装置
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
CN108475242B (zh) * 2015-12-24 2021-09-28 英特尔公司 冲突掩码生成
US10235811B2 (en) 2016-12-29 2019-03-19 Intel Corporation Replicating primitives across multiple viewports
US10628910B2 (en) 2018-09-24 2020-04-21 Intel Corporation Vertex shader with primitive replication

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US6421824B1 (en) * 1999-04-23 2002-07-16 Sun Microsystems, Inc. Method and apparatus for producing a sparse interference graph
WO2001098898A1 (en) * 2000-06-21 2001-12-27 Bops, Inc. Methods and apparatus for indirect vliw memory allocation
US20040123072A1 (en) * 2002-12-18 2004-06-24 International Business Machines Corporation Method and system for modeling non-interlocked diversely bypassed exposed pipeline processors for static scheduling
US20070038984A1 (en) * 2005-08-12 2007-02-15 Gschwind Michael K Methods for generating code for an architecture encoding an extended register specification
US20080005722A1 (en) * 2006-06-28 2008-01-03 Hidenori Matsuzaki Compiling device, compiling method and recording medium
KR100874949B1 (ko) * 2006-11-15 2008-12-19 삼성전자주식회사 단일 명령 다중 자료 프로세서 및 그것을 위한 메모리어레이 구조
US8407715B2 (en) * 2007-04-30 2013-03-26 National Tsing Hua University Live range sensitive context switch procedure comprising a plurality of register sets associated with usage frequencies and live set information of tasks
US8225295B2 (en) * 2007-09-21 2012-07-17 Jens Palsberg Register allocation by puzzle solving
US8285670B2 (en) * 2008-07-22 2012-10-09 International Business Machines Corporation Dynamically maintaining coherency within live ranges of direct buffers
US8484630B2 (en) * 2008-12-23 2013-07-09 International Business Machines Corporation Code motion based on live ranges in an optimizing compiler

Also Published As

Publication number Publication date
CN104156253A (zh) 2014-11-19
CN102163142B (zh) 2014-08-27
CN102163142A (zh) 2011-08-24
US8434074B2 (en) 2013-04-30
KR101360512B1 (ko) 2014-02-07
US20110209127A1 (en) 2011-08-25
CN104156253B (zh) 2017-10-24

Similar Documents

Publication Publication Date Title
KR101360512B1 (ko) 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당
Chow et al. The priority-based coloring approach to register allocation
US7681187B2 (en) Method and apparatus for register allocation in presence of hardware constraints
US5790862A (en) Resource assigning apparatus which assigns the variable in a program to resources
US7313788B2 (en) Vectorization in a SIMdD DSP architecture
US9098298B2 (en) Optimization method for compiler, optimizer for a compiler and storage medium storing optimizing code
US9448778B2 (en) Optimizing compiler performance by object collocation
US20040216095A1 (en) Method and apparatus for recovering data values in dynamic runtime systems
JP2004302706A (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP2001147819A (ja) 最適化装置および記録媒体
Chen et al. Register allocation for intel processor graphics
JP2008009957A (ja) コンパイル装置
Desnos et al. On memory reuse between inputs and outputs of dataflow actors
US20100199270A1 (en) System, method, and computer-program product for scalable region-based register allocation in compilers
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
US11915056B2 (en) Combination of multiple data processing and machine learning frameworks for a target hardware
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
Hank Machine independent register allocation for the IMPACT-I C compiler
Zhuang et al. Balancing register allocation across threads for a multithreaded network processor
CN112925567A (zh) 分配寄存器的方法和装置及编译方法和装置及电子设备
Ottoni et al. Offset assignment using simultaneous variable coalescing
CN112925566A (zh) 建立虚拟寄存器生存区间的方法和装置及编译方法和装置
KR100912114B1 (ko) 디지털 신호처리 프로세서에서 효과적인 데이터 전송을위한 메모리 운용 방법
US11762641B2 (en) Allocating variables to computer memory
US20220100483A1 (en) Compiler for risc processor having specialized registers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20170201

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 6