2010-01-21 3 views
1

현재 GCC 3.3.3 기반 크로스 컴파일러를 사용하여 Xscale PXA270 개발 보드 용으로 컴파일하고 있습니다. 그러나, 거기에 다른 Xscale 컴파일러가 리눅스 (또는 그 문제에 대한 Windows)에서 실행되는 경우 궁금 해서요? 내가 사용하고있는 크로스 컴파일러 설정은 대상 장치에서 끔찍한 성능을 보였습니다. 비슷한 프로그램 된 펜티엄 2보다 Xscale 프로세서에서 10 ~ 20 배 더 나쁜 수준의 수학 연산을 수행하는 특정 프로그램이있었습니다. 다른 컴파일러 옵션 거기에 또는 특정 컴파일러 플래그 나는 성능에 도움이 될 내 GCC 기반 컴파일러로 설정해야합니까?Linux 용 Xscale 컴파일러? (Xscale 컴파일 플래그 질문)

감사합니다, 펜티엄 2와 달리 벤

+3

GCC 3.3 !? 그게 5 년 이상 된 걸 당신은 알고 있습니까? '실제 프로그래머'가되어 자신의 GCC 4.4.2 툴 체인을 컴파일하십시오! – LiraNuna

+0

4.1 GCC 툴 체인을 컴파일했는데, 너무 심하게 맞았거나 놓친 것 같아서, 공급 업체가 제공 한 제품으로 돌아갔습니다. – user21293

+0

"실제 프로그래머"에 대한 정보는 없지만 최근 GCC의 연산을 측정 한 결과, ARM의 경우 최소한 4.2는 컴파일에 걸리는 로컬 최소 시간이었고, 메모리는 컴파일에 사용되었고, 결과 객체 코드의 크기는 오브젝트 코드가 실행되는 데 걸린 시간. 4.3 이후 모든 네 세트의 기하 급수적 인 성장. – martinwguy

답변

4

예, FPU가 없으므로 정수 연산에서 부동 소수점을 수행해야합니다. 그러나이 작업에는 두 가지 메커니즘이 있으며 한 작업은 다른 작업보다 11 배 더 빠릅니다.

GCC 타겟 arm-linux-gnu는 ARM의 첫 번째 FPU 인 "FPA"에 대한 코드에서 실제 부동 소수점 명령어를 일반적으로 포함하지만 현재는 거의 존재하지 않습니다. 이로 인해 불법적 인 명령 트랩이 야기되어 커널에서 에뮬레이트됩니다. 컨텍스트 전환으로 인해 매우 느립니다.

-msoft-float 대신 라이브러리 함수 (libgcc.a)에 대한 호출을 삽입합니다. 이렇게하면 커널 공간으로의 전환을 피할 수 있으며 에뮬레이트 된 FPA 명령보다 11 배 더 빠릅니다.

사용중인 부동 소수점 모델을 말할 필요가 없습니다. 이미 -msoft-float를 사용하여 전체 사용자 영역을 구축하고있는 것일 수 있지만, FPA 명령이없는 개체 파일인지 확인하는 것이 좋습니다. 다음을 사용하여 확인할 수 있습니다.

 
objdump -d file | grep '<space><tab>f' | less 
file은 컴파일러가 출력하는 개체 파일, 실행 파일 또는 라이브러리입니다. 모든 FPA 명령어는 f으로 시작하지만 다른 ARM 명령어는 시작하지 않습니다. 그것들은 실제 공간과 탭 문자이며, 여러분의 쉘보다 탭 문자를 얻기 위해서는 <control-V><tab>라고 말할 필요가 있습니다.

FPA insns를 사용하는 경우 -msoft-float를 사용하여 전체 사용자 랜드를 컴파일해야합니다.

이러한 문제에 대한 가장 포괄적 인 추가 정보는 입니다. 이는 arm-linux-gnueabi 컴파일러 사용, gcc-4.1.1부터 사용할 수 있으며 다른 특성을 가진 새로운 대안 ABI입니다. 자세한 내용은이 문서를 참조하십시오.

5

는 엑스 스케일 아키텍처는 기본 부동 소수점 명령이 없습니다. 즉, 부동 소수점 연산은 정수 명령을 사용하여 에뮬레이트되어야합니다. 오른쪽 방향으로 10-20 배의 속도 저하가 발생합니다.

성능을 향상시키기 위해, 당신은 몇 가지를 시도 할 수 있습니다 :

  • 수는, 부동 소수점의 사용을 최소화 - 어떤 장소에서, 당신은 일반 정수 또는 고정 소수점 계산을 subsitute가 할 수 있습니다를,
  • 가능한 경우 값 테이블을 미리 계산하여 속도를위한 메모리를 트레이드 오프합니다.
  • doubles 대신 s를 사용하십시오 (여기서 C99 float 버전의 math.h 함수 포함).
  • 정수와 부동 소수점 유형 간의 변환을 최소화하십시오.
+0

또는 장치에 GPU가있는 경우이를 사용할 수 있는지 확인하십시오. –

2

"기타 엑스 스케일 컴파일러"

오픈 소스 : LLVM과 PCC, LLVM이있는 리눅스 친화도 및 기능, 그리고 gcc의 프런트 엔드를 가지고 대부분의; 유서 깊은 Portable C Compiler의 자손 인 pcc는 더 bsd 지향적 인 것처럼 보입니다.

상업용 : Keil 컴파일러 (ARM Ltd 소유)는 GCC보다 빠른 코드를 생성하지만 FPU 부족에 큰 영향을주지는 않습니다.