2014-06-06 6 views
0

Intel Atom Processor 용 Android x86 기반 frameweork를 개발 중입니다. 전체 프레임 워크를 구현했지만 코드에 대한 SIMD 구현 문제가 있습니다. 기본 C 코드를 실행하면 에뮬레이터와 하드웨어에서 상당한 성능을 발휘하지만 코드에 내장 옵션을 사용할 때 실제 이득은 없지만 성능은 무시할 수 있습니다. Intel i7 프로세서에서 코드를 실행했습니다. 약 200 %의 이득이있었습니다. 나는 확실히 PC와 타블렛이 사용하는 주파수 인 &의 주파수를 고려하지만, 안드로이드 프레임 워크에서 SIMD 코드를 활성화 할 때 여전히 이득이 있어야한다. 지금까지 분석 한 가능한 문제점 :Android 프레임 워크에서 SIMD 성능이 저하됩니다.

1) 로컬 C 플래그 (모든 사람이 인텔 아톰 프로세서에 적합한 C 플래그를 제안 할 수 있음).

2) 프레임 워크의 소스 코드 대신 .so 파일을 사용하는 것이 좋습니다.

3) Intel Atom에 적합한 NDK, 4.8을 사용 중입니다.

4) 최적화 수준은 O2 또는 O3으로 설정해야합니다.

성능을 저해 할 수있는 다른 이유가있는 경우 알려 주시기 바랍니다. 미리 감사드립니다.

+0

더 명확하게 질문해야 할 수도 있습니다 : "내장 옵션 사용"이란 무엇을 의미하는지 설명 할 수 있습니까? intrinsics 코드를 직접 작성할 수도 있지만 ("활성화"하는 것과 같지 않습니다. 어셈블리를 사용하여 코드를 작성하는 것과 비슷합니다) 컴파일러 명시 적/자동 벡터화를 사용할 수 있습니다. – zam

답변

1

모든 Intel Atom 플랫폼은 최소한 SSSE3을 지원합니다.

컴파일러가 벡터화 할 수있는 기능을 확인하려면 -ftree-vectorizer-verbose 플래그를 사용할 수 있습니다.

1) FP 계산을 포함하여 SSSE3을 완전히 사용하려면 -mtune=atom -mssse3 -mfpmath=sse을 사용하여 코드를 컴파일 할 수 있습니다. (32 비트로 컴파일 할 때 mfpmath는 기본적으로 387로 설정되어 훨씬 느립니다.)

x86 ABI에 SSSE3 코드를 제공하는 것이 안전합니다. 특정 플랫폼 만 지원해야하는 경우 64 비트 Atom이 모두 SSE4.2를 지원하여이를 최적화 할 수 있습니다. -mtune=slm -msse4.2 -mfpmath=sse

2) 질문 2)을 잘 이해하고 있는지 모르겠지만 사용중인 경우 미리 컴파일 된 .so 파일은 링크 된 코드를 컴파일 할 때 더 이상 최적화되지 않습니다.

3) 최신 NDK가 일반적으로 가장 좋습니다. 현재 버전은 r9d입니다. GCC 4.8은 또한 기본 GCC 4.6에 비해 성능 최적화를 많이 제공합니다, 당신은 -O3은 매우 안전하고 더 높은 성능을 제공합니다)

4 Application.mk

내부 NDK_TOOLCHAIN_VERSION:=4.8를 설정하여 사용할 수 있습니다, 당신은 그것을 사용해야합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이러한 최적화를 수행했다. Intel Atom 아키텍처의 코드 최적화를 지원하는 특정 문서 나 기사가 있습니까? 현재 Saltwell 아키텍처를 최적화하고 있습니다. – Steve

0

Intel 게시 general optimization tips for Android on Atom SIMD 코드가 예상대로 빨리 실행되지 못하게하는 여러 가지 요소가 있습니다. 메모리 정렬 문제 일 수 있습니다. x86은 최상의 결과를 얻으려면 16 바이트 정렬이 필요합니다.