NEON의 12 개의 쿼드 레지스터를로드하는 간단한 asm 코드가 있으며, 이중 명령어 기능을 사용하기 위해로드 명령어와 함께 pairwise add 명령어를 병행했습니다. 여기 코드를 확인했습니다 하나는 볼 수 있듯이예상보다 많은 사이클을 소비하는 Neon VLD?
http://pulsar.webshaker.net/ccc/sample-d3a7fe78
이 코드는 약 13주기를하고있다. 그러나 보드에 코드를로드 할 때로드 명령은로드 당 1 사이클 이상 걸리는 것으로 보입니다. VPADAL이 명시된대로 1 사이클을 수행하지만 VLD1이 1 사이클 이상 걸리는 것으로 확인되었습니다. 왜 그런가요?
것은 나는 다음과 같은 신세를지고 있습니다 :
- 주소가 16 바이트로 정렬됩니다.
- 장소에서, 명령어 프리로드 명령
pld [r0, #192]
시도vld1.64 {d0, d1} [r0,:128]!
- 에 정렬 힌트를 제공했지만 그 대신 실제로 대기 시간을 줄이는주기에 추가 할 것 같다.
누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 왜이 대기 시간입니까?
기타 사항 :
는 코텍스 A8- 어셈블리 코딩에 코드로 인해 예상되는 것보다 훨씬 느리게 실행
더 많은 현실을 반영합니까? http://pulsar.webshaker.net/ccc/beta-sample-d3a7fe78 ('베타'시뮬레이터 사용) –
@AkiSuihkonen, 어떻게 가능합니까? VPADAL과 VLD는 병렬로 실행할 수 있어야하고, 제시 한 시뮬레이터 링크와 유사하지 않으며 NEON이 왜 그렇게 늦게 시작해야합니까? – nguns
한 번에로드가 완료 될 것으로 예상합니까? 거리 (l1, l2, 동적 램)에 따라 많은 사이클이 소요됩니다. 처음로드를 실행 한 다음 추가 할 경우 많은 이점이 있다고 생각합니다. – auselen