2013-07-11 5 views
1

i.MX6 ARM 프로세서가 포함 된 완다 보드 쿼드를 사용하고 있습니다. 이 프로세서에는 FPU가 있습니다. 먼저, 얼마나 많은 개선이 이루어질 것인지 테스트하고 싶습니다. 나는 벤치 마크 알고리즘을 가지고 있으며, 최적화없이 -mfpu = vfp를 시도해 보았고 개선이없는 것처럼 보였다. 최적화 = 3으로 향상되었다.팔 프로세서의 FPU 테스트

arm-linux-gnueabi 라이브러리를 사용하고있다. - 올바르지 않은 것에 대한 생각과 내가 FPU를 사용하고 있는지 어떻게 알 수 있습니까?

감사합니다, 아담

+0

vfp가 기본적으로 지원 될 수도 있습니다. 툴체인 빌드 옵션 인'gcc -v'를 확인하십시오. 최적화에 관한 내용도 사실이지만 벤치 마크가 좋지 않을 수도 있습니다. – auselen

답변

1

-S 플래그와 어셈블러 출력을보고 생성되는 모든 FPU 명령이 있는지. 아마도 가장 쉬운 방법 일 것입니다.

그 이상의 경우 FPU 레지스터를로드 및 언로드하여 마스크를 사용하는 경우가 거의 없으므로 알고리즘에서 부동 소수점을 사용하는 경우가 거의 없습니다. 이 경우 코드의 다른 부분에서 O3 최적화를 수행하면 FPU 사용과 별도로 이득을 얻을 수 있습니다.

1

-mfpu 옵션은 GCC가 벡터화를 수행 할 때만 작동합니다. 벡터화 자체에는 적절한 최적화 수준이 필요합니다 (최소는 -O2이고 -ftree-vectorize 옵션을 설정). 따라서 FPU를 활용하고 간단한 -O3 레벨과의 차이를 측정하려면 -O3 -ftree-vectorize -mfpu=vfp을 시도하십시오.

-funsafe-math-optimizations이 필요한 경우에는 ARM GCC docs도 참조하십시오.

0

최적화가 없으면 GCC의 출력이 너무 비효율적이어서 소프트웨어와 하드웨어 부동 소수점의 차이를 실제로 측정 할 수 없을 수도 있습니다.

는 일관된 최적화 레벨 테스트 할 필요는 FPU가 추가 혜택을보고, 다음 -msoft-float 또는 -mhard-float 하나를 사용하십시오.

이렇게하면 컴파일러가 다른 라이브러리에 연결되어 네이티브 명령을 사용하는 대신 부동 소수점 연산에 대한 함수 호출을 수행하게됩니다. 기본 라이브러리가 하드웨어 부동 소수점을 사용하는 것은 여전히 ​​가능하지만 너무 걱정하지는 않습니다.

-mfpu=을 사용하여 다른 FP 명령 세트를 선택할 수 있습니다. i.MX6의 경우 -mfpu=neon이 필요하다고 생각합니다. NEON 계열이 아닌 모든 해당 부동 소수점 명령어를 사용할 수 있어야합니다.