2011-08-03 2 views
4

iPhone 3G에서 iOS 게임을 프로파일 링 할 때, 악기는 시스템 호출 pthread_setspecific (많은 관련없는 위치에서 호출 됨)이 가장 큰 CPU 병목 현상이라고보고합니다. Google은 스레드에 대한 메타 데이터 저장에 대해 설명하지만 전체 엔진이 단일 스레드이므로이를 추적하는 방법을 모르겠습니다. 이것이 CADisplayLink와 관련이 있습니까? 구체적인 시나리오를 최적화하여이를 더 잘 설명 할 수 있습니까? 여기 iPhone 게임 CPU 프로파일 링 및 pthread_setspecific

내 질문에 대답에 도움이 될 수있는 몇 가지 관련 정보입니다 :

  • 장치 : 아이폰 3G
  • 아이폰 OS 버전 : 4.2.1
  • 게임 코드는 응용 프로그램 계층에서와 완전히 C++입니다 obj-C.
  • 게임에서 OpenglES1.1을 사용합니다.
  • 불행히도 RTTI와 C++ 예외는 모두 필요하므로 사용할 수 있습니다.
  • 이것은 계측기의 CoreAnimation 프로파일 러를 통해 릴리스 빌드 (디버그 기호 포함)를 실행 중입니다.
+0

"자체 시간"으로 보면 가장 많이 사용하는 것일 수 있습니다. 당신이 알아야 할 것은 루틴이 어떤 루틴을 호출하는지, _those_를 호출하는지 등입니다. 기본적으로 시스템 기능을 호출하는 프로그램은 모두 다음과 같습니다. –

+0

@Mike 프로파일 링 정보를 살펴보면 싱글 톤 인스턴스 메소드와 같이 많은 겉보기에 임의의 위치에서 호출되고 있습니다. gcc/iOS가 함수 호출에 추가하는 것이거나 스레드 컨텍스트를 전환하는 것과 관련이 있습니다. 미안하지만 스레딩에 익숙하지 않습니다. :/ – grahamp

+0

그래, 그게 어떤 프로파일 러가주는 말도 안되는 종류 야. 그래서 [이 방법을 사용합니다] (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024). 그 루틴에 신경을 써야하는 데 충분한 시간을 보내고 있다면, 거기에서 그것을 잡을 것이고, 그러면 왜 그것이 호출되는지 정확히 알 수있을 것입니다. –

답변

2

예외 처리로 생성 된 코드는 풀 로컬 스택을 사용하여 풀 해제 스택을 저장합니다. 당신이 쉽게 할 수있는 것은 없습니다. 가능한 경우 예외를 제거하십시오. 그것없이 코드의 일부를 컴파일하십시오.