2008-09-17 3 views
3

최신 ARM 프로세서에는 PLD 및 PLI 명령어가 포함되어 있습니다.ARM의 프리 페치 명령어

비 순차적 인 메모리 액세스 패턴을 가지고 있지만 내 코드가 자연스럽게 이해할 수있는 패턴이있는 (C++의) 엄격한 내부 루프를 작성하고 있습니다. 현재 메모리 위치를 처리하는 동안 다음 위치를 미리 가져올 수 있다면 상당한 속도 향상을 기대할 수 있습니다.이 속도가 빠르면 실험 가치가 있다고 기대할 수 있습니다!

저는 ARM의 새로운 고가의 컴파일러를 사용하고 있습니다.이 특별한 루프는 말할 것도없고, 어디서나 PLD 명령어를 포함하지 않는 것처럼 보입니다.

내 C++ 코드에 명시 적 프리 페치 명령어를 포함하려면 어떻게해야합니까?

+0

최적화 된 특정 루프의 예가 질문에 포함되어있는 경우 참여자는 PLD 지침과 별도로 최적화를 찾는 데 도움이 될 수 있으며 구체적인 예를 제시 할 수 있습니다. –

답변

5

컴파일러 관련 기능이 있어야합니다. C/C++에서는 표준 방법이 없습니다. 컴파일러 컴파일러 참조 안내서를 확인하십시오. RealView Compiler의 경우 this 또는 this을 참조하십시오.

0

이러한 루프에서 최대한의 성능을 추출하려면 어셈블러에서 전체 반복 구문을 작성하는 것이 좋습니다. 루프에 포함 된 데이터 구조에 따라 인라인 어셈블리를 사용할 수 있어야합니다. 루프의 일부를 풀 수 있다면 (비 순차적 인 액세스를 만드는 부분과 같은) 루프의 조각을 풀 수 있다면 더욱 좋습니다.

0

명백한 질문을 할 위험이 있습니다. 컴파일러의 타겟 아키텍처를 확인 했습니까? 예를 들어 (humor me), 기본적으로 컴파일러가 ARM7을 타겟으로한다면, 이 아닙니다. PLD 명령어를 보게 될 것입니다.

0

software pipeliningloop unrolling과 같은 다른 최적화가 프리 페칭 아이디어 (유용한 계산으로 오버레이하여로드의 대기 시간 감추기)와 동일한 효과를 얻을 수 있지만 추가 명령어 캐시가없는 가능성은 없습니다. 여분의 지시로 인한 압력. 나는 명령을 거의 갖지 않고 제어 흐름이 거의없는 꽉 짜인 내부 루프를 위해 이것이 더 자주 발생하지 않는다고 말하기까지 할 것이다. 귀하의 컴파일러가 이러한 유형의 전통적인 최적화를 대신 수행하고 있습니까? 그렇다면 파이프 라인 다이어그램을보고 프로세서가 작동하는 방식에 대한보다 자세한 비용 모델을 개발하고 프리 페칭이 도움이되는지 여부를보다 정량적으로 평가할 가치가 있습니다.