NEON을 사용하는 ARM 프로세서 용 코드 최적화 작업을하고 있습니다. 그러나 문제가 있습니다 : 내 알고리즘에 다음 부동 소수점 계산이 포함되어 있습니다.ARM NEON 어셈블리 및 부동 소수점 올림 반올림
round(x*b - y*a)
여기서 결과는 양수와 음수 일 수 있습니다.
사실 저는 2 개의 VMUL과 1 개의 VSUB를 사용하여 병렬 계산을합니다 (Q 레지스터와 32 비트 부동 소수점을 사용하는 연산 당 4 개의 값).
이 문제를 해결할 수있는 방법이 있습니까? 결과가 모두 같은 기호 인 경우 간단히 더하거나 뺄 수 있습니다. 0.5
안녕하세요, 네 정수 부분을 반올림해야합니다. 의견을 보내 주셔서 감사합니다. 가능한 빨리 참조 가이드를 읽어 드리겠습니다. 블로그를 팔로우하고 있습니다. 매우 흥미 롭습니다. –
그러면 float 형식으로 반올림하지 않아도됩니다. vcvt.s32.f32를 사용하여 float를 int로 변환하고 1 분수 비트로 변환하면 vrshr.s32로 반올림을 수행 할 수 있습니다. 그게 내가 "당신의 문제에 더 구체적이라는 의미입니다." –
VCVT 명령에서 #fbits 옵션 값을 놓쳤습니다. 귀하의 솔루션을 테스트했습니다 : 양수 값은 괜찮지 만 음수 값은 반올림되지 않습니다. -0.9는 0으로 반올림되고 -1로 반올림되지 않습니다. –