2013-08-11 4 views
0

나는 병렬 알고리즘 최적화 (스파 스 매트릭스) 및 레지스터 차단 작업에 노력하고 있습니다. 사용 가능한 레지스터를 기반으로 내 코드를 조정하고 플랫폼에 독립적으로 만들기 위해 컴퓨터에서 사용할 수있는 레지스터 및 부동 소수점 레지스터 (구체적으로 부동 소수점 레지스터와 다른 유형)를 찾고 싶습니다. C++에서 이것을 수행 할 수있는 방법이 있습니까?부동 소수점 레지스터 programmaticaly의 수를 찾을 수

감사합니다. mjr

+3

휴대용이 아닌 C 또는 C++ - 그들은 CPU가 무엇인지 정의하지도 않고 레지스터도 정의하지 않습니다. 라이브러리 또는 OS 관련 호출을 통해 해당 정보를 얻을 수 있지만 OS 및 칩 관련 실행 파일을 만드는 것이 더 좋습니다. – Mat

+0

@mat 휴대용 C 또는 C++로 무엇을 할 수 있습니까? 어떤 도서관 알지? – mjr

+1

해당 표준에 정의 된 구문 만 사용하고 구현 관련 트릭은 사용하지 않는 C 또는 C++ 코드입니다. – Mat

답변

3

일반적으로 컴파일러는 이런 종류의 것들 (그리고 그것을 잘 사용하는 방법)을 알고 있으므로 컴파일러보다 현저히 뛰어나다 고 생각합니다. 어셈블러 코드, 나는 거의 컴파일러보다 현저하지 못하다.

작성자 코드 작성이 매우 어렵 기 때문에 얼마나 많은 레지스터가 있는지 등 지식을 사용하여 코드를 최적화하는 솔루션으로 간주하지 않습니다. 컴파일러가 레지스터를 사용하는 방법을 아는 것은 매우 어렵습니다. 당신이 간단한 예제로 int x = y + z;을 가지고 있다면, 그것은 얼마나 많은 레지스터를 취합니까? 컴파일러에 따라 다르지만, 최적의 레지스터 사용량을 밑도는 것없이 none, one, two, three, four, five 또는 six를 사용할 수 있습니다. 컴파일러가 사물, 기계 아키텍처, 변수의 처리 방법을 결정하는 방법에 따라 다릅니다. intdouble으로 변경하면 동일한 원칙이 부동 소수점 레지스터의 수에 적용됩니다. 이 문에서 얼마나 많은 레지스터가 사용되고 있는지를 알 수있는 확실한 방법은 없습니다 (하지만 3 개 이상은 의심 스럽지만 컴파일러가 결정한 것에 따라 0 또는 1이 될 수 있습니다).

프로세서 아키텍처와 컴파일러가 특정 유형의 코드를 다루는 방법을 알고 있으면서도 컴파일러가 다음 릴리스에서 동작을 변경하지 않는다고 가정 할 때 약간의 영리한 트릭을 수행 할 수 있습니다. 그러나 어떤 프로세서 아키텍처인지 알면 다양한 종류의 레지스터 수를 알 수 있습니다 ...

+0

레지스터 이름 바꾸기 또는 스택 슬롯에 레지스터 유출과 같은 컴파일러 기술로 인해 expere (s)에 사용될 레지스터의 수를 알 수 없습니다. 그러나 우리가 expereions가 8 레지스터 또는 16 레지스터 dosn't와 함께 컴퓨터에서 정상 상태에서 레지스터 또는 13 레지스터를 필요로하는 경우, 누설 레지스터에서 CPU를 중지하고 expersion (s)을 실행하는 루프의 속도를 줄이십시오. – mjr

+0

내 어휘에서 "레지스터 이름 바꾸기"라는 용어는 프로세서가 물리적으로 "보여주는"것보다 더 많은 레지스터를 가지고있는 곳입니다. x86 프로세서는 공식적으로 8 개의 레지스터를 가지고 있지만, AMD 프로세서에 내부적으로 32 개의 레지스터가 있다는 것을 알고 있습니다. 하지만 예, 컴파일러는 "기대하는 것"보다 더 많거나 적은 레지스터를 사용할 수 있습니다. 레지스터는 특정 표현식을 처리하는 방식에 따라 레지스터를 다소 교묘하게 사용할 수 있습니다.레지스터에 값을로드 한 다음 두 번째 레지스터에 추가하거나 간접 메모리 피연산자와 함께 add 명령어 사용). 그것은 다른 시간에 다르게 선택할 수 있습니다. –

2

나는 쉬운 휴대용 솔루션이 없습니다.

주어진 컴퓨터의 최적 블록 크기에 영향을 줄 수있는 요인은 여러 가지가 있습니다. 좋은 구성을 발견하는 한 가지 방법은 일련의 벤치 마크를 자동으로 실행하고 결과를 사용하여 런타임에 코드를 조정하는 것입니다.

또 다른 접근법은 소스 코드을 일부 벤치 마크 결과에 따라 자동 조정하는 것입니다. 이것은 Automatically Tuned Linear Algebra Software (ATLAS)의 기능입니다.