KR101360512B1 - 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당 - Google Patents
기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당 Download PDFInfo
- Publication number
- KR101360512B1 KR101360512B1 KR1020110016523A KR20110016523A KR101360512B1 KR 101360512 B1 KR101360512 B1 KR 101360512B1 KR 1020110016523 A KR1020110016523 A KR 1020110016523A KR 20110016523 A KR20110016523 A KR 20110016523A KR 101360512 B1 KR101360512 B1 KR 101360512B1
- Authority
- KR
- South Korea
- Prior art keywords
- live
- parallel
- processor
- block
- mask
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/468—Specific access rights for resources, e.g. using capability register
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
SIMD(single instruction multiple data) 프로세서는 컴파일링 동안에 호환되지 않는 기록 마스크(write mask)를 갖는 라이브 레인지(live range)를 식별함으로써 레지스터 할당을 성취할 수 있다. 이어서, 호환되지 않는 기록 마스크를 갖는 라이브 레인지가 동일한 물리적 레지스터에 할당되지 않도록 에지가 그러한 라이브 레인지 사이에서 간섭 그래프 내에 부가된다.
Description
본 발명은 전반적으로 프로세서에 관한 것이며, 특히 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은 본 발명의 일 실시예에 따른 컴퓨터 시스템의 개략도이다.
도 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)
- SIMD(Single Instruction Multiple Data) 프로세서의 컴파일링 동안에 서로 충돌하는 기록 마스크(colliding write masks)를 가질 수 없는 라이브 레인지(live range)를 판정하는 단계와,
선택된 기본 블록의 지배 경로 상에 있지 않은 병렬 기본 블록을 탐색하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
호환되지 않는 기록 마스크(incompatible write masks)를 갖는 라이브 레인지가 동일한 물리적 레지스터에 할당되지 않도록 에지(edge)를 간섭 그래프(interference graph)에 부가하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하기 위해 지배 구조 트리(dominance tree)를 사용하는 단계를 포함하는
방법.
- 삭제
- 제 1 항에 있어서,
병렬 라이브-인 세트(parallel live-in set)를 확립하기 위해 병렬 기본 블록에 대한 라이브 세트(live set)를 판정하는 단계를 포함하는
방법.
- 제 5 항에 있어서,
상기 선택된 기본 블록에 있어서의 각 인스트럭션을 자신의 마스크가 상기 병렬 라이브-인 세트 내의 마스크와 호환되지 않는지의 여부를 확인하기 위해 검사하는 단계를 포함하는
방법.
- 컴퓨터로 하여금, 호환되지 않는 기록 마스크를 갖는 라이브 레인지가 동일한 물리적 레지스터에 할당되지 않도록 에지를 간섭 그래프에 부가하게 하고,
선택된 기본 블록의 지배 경로 상에 있지 않은 병렬 기본 블록을 탐색하게 하는 인스트럭션을 저장하는
비일시적 컴퓨터 판독가능한 매체.
- 제 7 항에 있어서,
SIMD(single instruction multiple data) 프로세서의 컴파일링 동안에 서로 충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하게 하는 인스트럭션을 또한 저장하는
비일시적 컴퓨터 판독가능한 매체.
- 제 7 항에 있어서,
충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하기 위해 지배 구조 트리를 사용하게 하는 인스트럭션을 또한 저장하는
비일시적 컴퓨터 판독가능한 매체.
- 삭제
- 제 7 항에 있어서,
병렬 라이브-인 세트(parallel live-in set)를 확립하기 위해 병렬 기본 블록에 대한 라이브 세트(live set)를 판정하게 하는 인스트럭션을 또한 저장하는
비일시적 컴퓨터 판독가능한 매체.
- 제 11 항에 있어서,
상기 선택된 기본 블록에 있어서의 각 인스트럭션을 자신의 마스크가 상기 병렬 라이브-인 세트 내의 마스크와 호환되지 않는지의 여부를 확인하기 위해 검사하게 하는 인스트럭션을 또한 저장하는
비일시적 컴퓨터 판독가능한 매체.
- 컴파일링 동안에 서로 충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하고 선택된 기본 블록의 지배 경로 상에 있지 않은 병렬 기본 블록을 탐색하는 SIMD 프로세서와,
상기 프로세서에 커플링된 메모리를 포함하는
장치.
- 제 13 항에 있어서,
상기 프로세서는 호환되지 않는 기록 마스크를 갖는 라이브 레인지가 동일한 물리적 레지스터에 할당되지 않도록 에지를 간섭 그래프에 부가하는
장치.
- 제 13 항에 있어서,
상기 프로세서는 충돌하는 기록 마스크를 가질 수 없는 라이브 레인지를 판정하기 위해 지배 구조 트리를 사용하는
장치.
- 삭제
- 제 13 항에 있어서,
상기 프로세서는 병렬 라이브-인 세트(parallel live-in set)를 확립하기 위해 병렬 기본 블록에 대한 라이브 세트(live set)를 판정하는
장치.
- 제 13 항에 있어서,
상기 프로세서는 상기 선택된 기본 블록에 있어서의 각 인스트럭션을 자신의 마스크가 상기 병렬 라이브-인 세트 내의 마스크과 호환되지 않는지의 여부를 확인하기 위해 검사하는
장치.
- 제 13 항에 있어서,
상기 프로세서는 그래픽 프로세서인
장치.
- 제 13 항에 있어서,
상기 메모리는 시스템 메모리인
장치.
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 KR20110097716A (ko) | 2011-08-31 |
KR101360512B1 true 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) | CN102163142B (ko) |
Families Citing this family (22)
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 |
US9141359B2 (en) | 2010-12-13 | 2015-09-22 | Hewlett-Packard Development Company, L.P. | Procedural concurrency graph generator |
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 |
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 | 中兴通讯股份有限公司 | 一种避免寄存器冲突的方法及装置 |
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 |
US9952867B2 (en) | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US9946548B2 (en) | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
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 |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
US10871967B2 (en) | 2015-09-19 | 2020-12-22 | Microsoft Technology Licensing, Llc | Register read/write ordering |
US10678544B2 (en) | 2015-09-19 | 2020-06-09 | Microsoft Technology Licensing, Llc | Initiating instruction block execution using a register access instruction |
US10185562B2 (en) | 2015-12-24 | 2019-01-22 | Intel Corporation | Conflict mask generation |
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 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000353097A (ja) * | 1999-04-23 | 2000-12-19 | Sun Microsyst Inc | 低密回の干渉グラフを生成する方法および装置 |
US20080005722A1 (en) | 2006-06-28 | 2008-01-03 | Hidenori Matsuzaki | Compiling device, compiling method and recording medium |
Family Cites Families (10)
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 |
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 |
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 |
-
2010
- 2010-02-24 US US12/711,319 patent/US8434074B2/en not_active Expired - Fee Related
-
2011
- 2011-02-23 CN CN201110044003.1A patent/CN102163142B/zh not_active Expired - Fee Related
- 2011-02-23 CN CN201410381252.3A patent/CN104156253B/zh not_active Expired - Fee Related
- 2011-02-24 KR KR1020110016523A patent/KR101360512B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000353097A (ja) * | 1999-04-23 | 2000-12-19 | Sun Microsyst Inc | 低密回の干渉グラフを生成する方法および装置 |
US20080005722A1 (en) | 2006-06-28 | 2008-01-03 | Hidenori Matsuzaki | Compiling device, compiling method and recording medium |
JP2008009957A (ja) * | 2006-06-28 | 2008-01-17 | Toshiba Corp | コンパイル装置 |
Also Published As
Publication number | Publication date |
---|---|
US8434074B2 (en) | 2013-04-30 |
CN104156253B (zh) | 2017-10-24 |
US20110209127A1 (en) | 2011-08-25 |
CN104156253A (zh) | 2014-11-19 |
KR20110097716A (ko) | 2011-08-31 |
CN102163142A (zh) | 2011-08-24 |
CN102163142B (zh) | 2014-08-27 |
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 | |
US6128775A (en) | Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler | |
US5790862A (en) | Resource assigning apparatus which assigns the variable in a program to resources | |
US8266603B2 (en) | Technique for allocating register to variable for compiling | |
US9448778B2 (en) | Optimizing compiler performance by object collocation | |
US9098298B2 (en) | Optimization method for compiler, optimizer for a compiler and storage medium storing optimizing code | |
JP2004302706A (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
JP2001147819A (ja) | 最適化装置および記録媒体 | |
Chen et al. | Register allocation for intel processor graphics | |
US7480768B2 (en) | Apparatus, systems and methods to reduce access to shared data storage | |
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) | プログラム翻訳装置およびプログラム翻訳方法 | |
US20200012636A1 (en) | System and method for identifying maximal independent sets in parallel | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
US11915056B2 (en) | Combination of multiple data processing and machine learning frameworks for a target hardware | |
US11762641B2 (en) | Allocating variables to computer memory | |
Zhuang et al. | Balancing register allocation across threads for a multithreaded network processor | |
CN112925567A (zh) | 分配寄存器的方法和装置及编译方法和装置及电子设备 | |
Ottoni et al. | Offset assignment using simultaneous variable coalescing | |
KR100912114B1 (ko) | 디지털 신호처리 프로세서에서 효과적인 데이터 전송을위한 메모리 운용 방법 | |
US20230195599A1 (en) | Method for computing data dependence relationship in program, and computer readable storage medium | |
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 |