2009-03-04 4 views
4

내가 쓰고있는 아이폰 OpenGL 게임에서 병목 현상을 추적하려고합니다. 게임 자체는 2 차원에 있으며 각 알파 블렌드 된 2 백 개의 텍스처 드 스프라이트를 포함합니다.아이폰에서 OpenGL 응용 프로그램의 병목 현상 찾기

질감 측면에서 나는 한 번 바인딩하는 단일 512x512 아틀라스 만 사용하므로 대역폭 문제는 아닐 수 있습니다 (적어도 텍스처 업로드는 아님).

저는 장비를 사용하여 CPU 사용량, 메모리 사용량 및 OpenGL ES 사용량을 추적했습니다. 게임에 무거운 시점에서, 나는보고 받았 었죠 다음

FPS : 20 CPU : 60 % 실제의 Mem : 17MB Tiler 사용률 : 21 % 렌더링 활용 :

내가 '45 % 병목 현상이 될 수있는 것에 대해 다소 혼란 스럽습니까? 병목 현상이되기 전에 CPU 사용량을 얼마나 높일 수 있습니까 (저는 다른 응용 프로그램이 동시에 실행되고 있음을 알고 있습니다). 약 60 %의 소리가나요?

아니면 그래픽의 양이 될 수 있습니까? tiler + renderer 활용도가 낮은 것이 아닌지 추측합니다. 하지만 나는이 결과를 읽는 데 전문가가 아니라고 고백해야합니다.

병목 현상이있을 가능성이있는 곳이나 다른 곳을 찾아야하는 곳을 알려주는 포인터를 보내 주시면 감사하겠습니다.

답변

4

CPU가 조금 높게 들린다. sin/cos과 같은 삼각 함수를 많이 사용하고 있습니까? 때로는 그것들이 잘못 사용됩니다. 즉 입자 시스템에 사용됩니다. 가능한 한 최소한의 조회 테이블을 사용하십시오.

Here는 근사치

1

에 대한 좋은 논의 당신이 당신의 코드 라인은 대부분의 시간을 실행하는보고 확인해 봤어? 나는이 도구를 인스 트루먼 트에 넣을 수있는 도구가 있다는 것을 확신합니다.

+0

'프로파일 러'라고합니다. – strager

+0

예, 악기에 무엇이 있는지 확실하지 않았습니다. – samoz

+0

상어는 mac/iphone, 런타임 샘플러에 사용하는 도구입니다 ...하지만 앱이 아이폰에서 실행 중일 때만 시작하고 중지하는 것을 잊지 마십시오. – epatel

1

'렌더링 된'사용률이 낮지 만 이것이 OpenGL 호출의 CPU 측이라고 가정합니다. 이 부분은 glFlush/glFinish를 할 때 GPU가 할 일 목록을 만드는 것으로 생각할 수 있습니다. 이 중 하나를 호출하면 GPU는 실제로 설정 한 작업을 수행해야합니다.

iPhone에서 작업하지는 않았지만 GPU에 바인딩 된 것처럼 들립니다.

  1. 당신이 glFinish을 요구하고있다 : 그래서 여기에 내가 확인 할 것들의 목록은 조사하는 데 걸리는 시간의 순서대로 (아이폰에서 직접 일을하지 데)인가? 그렇다면 glFlush - glFinish 블록을 사용해보십시오. 반면 GPU는 그 일을합니다.

  2. 알파 블렌딩을 사용하지 않으면 상당한 속도가 빨라 집니까? 나는이 가능성이 높다고 생각하지 않지만, 확인하는 것이 빠를 것입니다.

  3. 개체에 어떤 종류의 도용 작업을 수행하고 있습니까, 아니면 모든 개체를 프레임마다 렌더링하고 있습니까?

iPhone에 GPU 프로파일 러가 있습니까?

4

Optimizing OpenGL ES for iPhone OS을 아직 읽지 않았다면 iPhone에서 빠른 OpenGL 응용 프로그램을 작성하는 방법에 대한 유용한 정보를 얻을 수 있습니다.

0

2D 게임을 어떻게 구현 했습니까? 각 스프라이트는 자체 삼각형 쌍으로 된 폴리곤에 렌더링됩니까? 또는 각 스프라이트를 512x512 텍스처 표면에 렌더링합니까?

두 번째 방법의 경우 각 프레임의 텍스처를 변경하면 성능이 크게 저하 될 수 있으므로 설명서에는 권장되지 않습니다. 정말 약간의 고통이 있습니다. glDrawTex는 해결 방법을 제공 할 수는 있지만 테스트하지는 않았지만 제대로 작동하지 않을 것입니다.

관련 문제