2010-12-05 2 views
0

, 나는 문서를 통해 보면서다음 ARM 명령어 세트가 스톨을 생성합니까? ARM11MP Vfpu 프로그래밍


    fmuls s0, s0, s4 
    fmacs s0, s1, s5 
    fmacs s0, s2, s6 
    fmacs s0, s3, s7 

가 accumuate합니까 (4 × 4 행렬 곱셈의 일환으로) 4 구성 요소 내적을 수행 할 때 다음이 심하게 정체 것이라고 걱정했습니다 여기에 실속을 발생시키는 단계? 그렇다면 실제로 작업 할 32 개의 단일 레지스터 만 가져온 다음 9 개가 그대로 걸리므로 실제로 변경해야합니다. 또한, 내가 1 명령어에서 이것을 수행하도록 벡터 레지스터를 설정할 수는 있지만, ARM 레지스터에 오버플로하지 않으면 메모리에 거의 즉시 저장소에 대한 설정을 해제해야하므로 3 명령어 사이클이 가치가 있는지 궁금합니다. . 내 진짜 SO 계정이없는 집에서 게시하기 ...

+1

's1'과's5'의 곱셈은's0'에 대한 이전의 덧셈이 완료 될 때까지 시작할 수 없습니까? – Gabe

+0

s0이 누적 된 올바른 또는 s2, s6 또는 ... –

답변

1

나는 ARM에 익숙하지 않으므로 소금 한 알로 이걸 가져 가야합니다. 이 답변은 약 20 분 동안 내 휴대 전화에서 문서를 검색하는 것을 기반으로합니다. 내가 누락 된 부분이있을 수 있으므로 올바르지 않을 수 있습니다.

어쨌든 저는 이것이 파이프 라인 노점을 야기 할 것이라고 믿습니다. VFP 보조 프로세서에는 8 단계 파이프 라인이 있지만 "전달"(각 명령어는 이전 명령어의 결과에 따라 다름) 때문에 각 명령어에 대해 정지 된 사이클 수를 7로 줄여야합니다. 그래도 4 가지 지시 사항이 주어지면 약 28 사이클 동안 정지 될 수 있습니다. 이는 그리 좋지 않습니다. 또한 레지스터를로드하는 데 필요한 시간도 고려하지 않으므로 문제가 악화 될 수 있습니다.

fmacs 지침에 "fld 명령"을 인터리브하여 성능을 향상시킬 수 있습니다.

체크 아웃 더 많은 정보를 원하시면 다음

fld s0 
fld s4 
fld s1 
fld s5 
fmuls s0, s0, s4 
fld s2 
fld s6 
fld s3 
fld s7 
fmacs s0, s1, s5 
famcs s0, s2, s6 
fmacs s0, s3, s7 
: 당신이 뭔가를 할 수 있다면 수단 (4) 사이클 내에서 사용할 수 있어야에 "FLD"명령의

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACBBDCE.html

결과

그런 다음 정지 된 총 사이클 수를 17로 줄일 수 있습니다.

루프에서이 작업을 수행한다고 가정하면 uld는 현재 반복이 실행되는 동안 "다음"루프 반복에 대한 작업을 시작함으로써 정지를 더 줄인다. 루프 언 롤링). 또한 데이터 저장 방법에 따라 루프 언 롤링을 수행하면 fld 명령 대신 fldm을 사용하여 상황을 더욱 향상시킬 수 있습니다.

어떤 경우 든 손으로 파이프 라인 동작을 최적화하는 것은 어렵습니다. 컴파일러가 당신을 위해 명령 스케줄링을 할 수없는 이유가 있습니까?

+0

내가 가지고있는 ARM 컴파일러가이 함수에서 악성 코드를 처리하고이 함수가 프로파일 링에 의해보고 된대로 실행되는 응용 프로그램에서 최고 3 성능에 도달했기 때문입니다. 나는 이것에 대해서 좀 더 자세히 살펴볼 것이다. 그러나 mla/fmac이 그렇게하도록 설계되어 있고 그것에 실속하는 것은 꽤 절름발이 인 것처럼 보인다. 곱셈에서 빼기 단계를 깨고 누적을 위해 별도의 레지스터를 사용하는 것을 고려해 보겠습니다. 약간의 보살핌을 받으면, 아마도 그것을 더 줄일 수있을 것입니다. 이것도 벡터 라이 제이션을 조사해야합니다. ARM 컴파일러는이를 시도하지 않기 때문에. –

관련 문제