2012-12-04 6 views
0

나는 Matrix 클래스를 C++로 작성했다. Rdbberry Pi에서이 코드를 테스트하기위한 벤치 마크를 만들었다. 계산 시간은 0.4ms 였고, RTOS 인 ChibiOS를 사용했을 때 코드의 런타임은 2.5ms였다. . CPU 주파수는 모두 같았습니다 (700Mhz). 한 시스템에서 메모리 연산 (calloc, memcpy)이 더 느릴 수 있습니까?리눅스에서 RTOS보다 내 코드가 왜 더 빠릅니까?

+1

두 경우를 사용하는 컴파일러는 무엇입니까? 최적화 옵션은 무엇입니까? –

+2

RTOS가 더 빨라야한다고 생각하는 이유는 무엇입니까? –

+0

rtos에 많은 프로세스가 없으므로 –

답변

3

복식을 사용하고 있으므로 부드러운 float 대 hard float입니다.

하드 플로트를 지원하지 않는 OS에서 하드 플로트 바이너리를 실행하지 마십시오. 그렇게하면 하드 플로트를 사용하는 두 프로세스간에 컨텍스트가 전환 될 때까지 작동하는 것처럼 보입니다. OS는 컨텍스트 스위치에서 부동 소수점 상태를 저장하지 않으므로 서로의 부동 소수점 컨텍스트를 따라갈 것이고 결과는 예측할 수 없게됩니다.

나는 링커가 이것을 알아낼 것이므로 자신이 어셈블리를 작성하지 않고 라이브러리를 사용하지 않는다면 실수로이 문제를 해결하기가 어려워 질 것입니다.

+0

하드 플로트 지원으로 컴파일되었으므로 런타임은 2.5ms에서 1.9ms입니다. 그러나 그것은 여전히 ​​0.4ms에서 멀리 떨어져 있습니다. 이것은 크로스 컴파일러 최적화 문제 일 가능성이 있습니까? –

+0

@iUngi : 그럴 수도 있습니다. 이를 파악하기 위해 프로파일 링 (또는 원시 어셈블리 비교)해야합니다. 시스템 호출이 많이 발생합니까? 그렇다면 선매 수표가 문제가 될 수 있습니다. –

관련 문제