나는 Matrix 클래스를 C++로 작성했다. Rdbberry Pi에서이 코드를 테스트하기위한 벤치 마크를 만들었다. 계산 시간은 0.4ms 였고, RTOS 인 ChibiOS를 사용했을 때 코드의 런타임은 2.5ms였다. . CPU 주파수는 모두 같았습니다 (700Mhz). 한 시스템에서 메모리 연산 (calloc, memcpy)이 더 느릴 수 있습니까?리눅스에서 RTOS보다 내 코드가 왜 더 빠릅니까?
답변
복식을 사용하고 있으므로 부드러운 float 대 hard float입니다.
하드 플로트를 지원하지 않는 OS에서 하드 플로트 바이너리를 실행하지 마십시오. 그렇게하면 하드 플로트를 사용하는 두 프로세스간에 컨텍스트가 전환 될 때까지 작동하는 것처럼 보입니다. OS는 컨텍스트 스위치에서 부동 소수점 상태를 저장하지 않으므로 서로의 부동 소수점 컨텍스트를 따라갈 것이고 결과는 예측할 수 없게됩니다.
나는 링커가 이것을 알아낼 것이므로 자신이 어셈블리를 작성하지 않고 라이브러리를 사용하지 않는다면 실수로이 문제를 해결하기가 어려워 질 것입니다.
하드 플로트 지원으로 컴파일되었으므로 런타임은 2.5ms에서 1.9ms입니다. 그러나 그것은 여전히 0.4ms에서 멀리 떨어져 있습니다. 이것은 크로스 컴파일러 최적화 문제 일 가능성이 있습니까? –
@iUngi : 그럴 수도 있습니다. 이를 파악하기 위해 프로파일 링 (또는 원시 어셈블리 비교)해야합니다. 시스템 호출이 많이 발생합니까? 그렇다면 선매 수표가 문제가 될 수 있습니다. –
- 1. 왜이 어셈블리 코드가 더 빠릅니까?
- 2. 왜 내 Java 응용 프로그램이 AMD 프로세서에서 더 빠릅니까?
- 3. 왜 코어보다 스레드 수가 더 빠릅니까?
- 4. 공개 필드가 속성보다 왜 더 빠릅니까?
- 5. 왜 순수 함수가 Mathematica 코드에서 더 빠릅니까?
- 6. 왜 함수가 C#의 Startswith보다 더 빠릅니까?
- 7. 버퍼와 문자열 속도 : 왜 문자열이 더 빠릅니까?
- 8. 테스트에서 왜 익명 메소드가 더 빠릅니까?
- 9. 반복이 더 많은 경우에도 한 코드가 다른 것보다 왜 더 빠릅니까?
- 10. 왜 String.IsNullOrEmpty가 String.Length보다 빠릅니까?
- 11. 왜 재귀가 Array.exists보다 빠릅니까?
- 12. 왜 PathPing이 Tracert보다 빠릅니까?
- 13. 왜 내 코드가 무한 루프가됩니까?
- 14. 왜 내 코드가 컴파일되지 않습니까?
- 15. 어느 것이 더 빠릅니까?
- 16. 리눅스에서 키 코드가 일치합니까?
- 17. 왜 file_get_contents가 memcache_get보다 빠릅니까?
- 18. 어떤 선택자가 더 빠릅니까?
- 19. 어느 것이 더 빠릅니까?
- 20. 정적 기능이 더 빠릅니까?
- 21. 이 jquery가 더 빠릅니까?
- 22. 왜이 정규 표현식이 더 빠릅니까?
- 23. 왜 LIKE가 =보다 빠릅니까?
- 24. 왜 Vim에서 \ % (\)가 \ (\)보다 빠릅니까?
- 25. 왜 파이썬에서 숫자의 mod를 지수로 사용하는 것이 더 빠릅니까?
- 26. 왜 fsock_open()을 사용하는 것보다 file_get_contents()가 더 빠릅니까?
- 27. 왜 Hadoop SequenceFile 쓰기가 읽기보다 속도가 더 빠릅니까?
- 28. 왜 foldl '로 구현할 때 Haskell의 MergeSort가 더 빠릅니까?
- 29. 내 코드가 더 많은 메모리를 소비합니까?
- 30. 서버리스이기 때문에 SQLite가 더 빠릅니까?
두 경우를 사용하는 컴파일러는 무엇입니까? 최적화 옵션은 무엇입니까? –
RTOS가 더 빨라야한다고 생각하는 이유는 무엇입니까? –
rtos에 많은 프로세스가 없으므로 –