0

그래프 채색을 사용하여 레지스터 할당에 대한 조사/프로젝트를 수행하려고합니다. 다른 시나리오에서 레지스터 할당 알고리즘을 최적화하는 효율성을 테스트하려고합니다.레지스터 할당 알고리즘의 효율성

어떻게 시작합니까? 테스트 할 수있는 전제 조건과 근거는 무엇입니까? 어떤 알고리즘을 사용할 수 있습니까?


추가 : 난 사실이 밖으로 빠른 방법을 원하는

, 나는 훨씬 더 깊은 연구를 수행하지만 약간의 내 프로젝트에 (뻔뻔)를 쉽게 사용할 수 분석을 제출하지 않은

'효율성'에 대한 강조 어떤 종류의 최적화 기술이 다른 작업/컴파일러/해석기에 가장 적합한가?

내 주요 작업은 (내) 내 프로그램에서 레지스터 할당을 구현하는 방법입니다. Core2 Duo 컴퓨터에서 64 비트 Linux 시스템을 사용합니다. C, C++ 및 Java를 알고 있습니다.

감사합니다.

+1

이 질문을 좀 더 구체적으로하거나 CW로 만들어야 할 수도 있습니다. 그것이 의미하는대로 간단한 대답이 없습니다. –

답변

0

베이스 라인 - 아마도 단순한 것에서 복잡한 것까지 - 과도한 레지스터 사용, 특히 누출을 테스트하는 테스트 케이스 세트가 필요할 것입니다. 나는 이것을위한 몇 가지 공통/표준적인 것들이 있다고 생각한다. 기본 컴파일러와 높은 성능의 최신 컴파일러를 프로파일 링하고 어셈블리 출력을 분석하여 현재 진행중인 작업을 처리 할 수 ​​있습니다. 그러면 기준이됩니다.

개발 - 컴파일러를 선택하거나 작성하십시오. 이전 버전은 LCC입니다. 작고 간단하지만 간단하지만 전체를 설명하는 책이 있습니다. 새로운 대안은 LLVM 또는 아마도 GCC 일 수 있습니다. 일부 컴파일러는 이미 이러한 종류의 연구에 사용됩니다. 명령 행 스위치를 사용하여 할당 자 범위를 전환 할 수도 있습니다.

질문을 명확히하십시오 - 우리는 C 스타일의 언어를 사용하고 있습니까? 동적 인 것? JITted? 당신은 무엇을 찾으려고 노력하고 있습니까? 목표로 삼고있는 CPU는 무엇입니까?

+0

안녕하세요! 답장을 보내 주셔서 감사합니다, 나는 내 질문에 추가했습니다. 덕분에 ! – aksci

0

LCC가 최적화되지 않았습니까? 그게 전부 같은 컴파일러와 두 컴파일러의 두 버전이 같은 방식으로 동일한 최적화를 구현하려고하기 때문에 당신이 많은 다른 컴파일러를 원할 것이라고 가정합니다.

코드 역 분개기에 초점을 맞추고 코드 흐름을 분석 한 다음 사용법을 등록해야한다고 생각합니다. 실제로 ISA (명령어 세트)를 선택하기 전에 동일한 코드가 동일한 컴파일러가 특정 타겟, 심지어 동일한 제품군 내의 특정 타겟에 따라 동일한 최적화에 대해 다른 결과를 생성합니다.

최적화 알고리즘으로 인한 레지스터 할당 결과는 매우 넓고 매우 동적입니다. 그것은 벤치마킹과 동등합니다. 그것이 여전히 흥미로운 주제로 들리 겠지만, 수십 개의 범용 레지스터가 있거나없는 최적화의 유무에 관계없이 대부분의 컴파일러가 소수의 레지스터 만 사용한다는 것을 알게 될 것입니다. (인수를 전달하기위한 몇 가지 함수와 함수를 구현하는 소수의 함수)