제목 | [Gamasutra] SDK 코드의 최적화 접근법 | ||||||
---|---|---|---|---|---|---|---|
분류 | 게임 | 등록일 | 06.11.23 | ||||
출처 | 한국콘텐츠진흥원 | 조회수 | 0
|
||||
SDK 코드의 최적화 접근법
빠르고 단순한 고도의 최적화 우리에게 최근 차세대 SDK를 현 세대 및 소형 플랫폼에 이식시키는 작업은 다소 버거웠다. 그러면서 나타난 다양한 난제는 성능 최적화가 가장 보상이 높은 것 중의 하나가 되어가고 있기 때문이다. 수 주에 걸쳐 우리는 이 기사에서 자주 간과했던 기법을 사용해 성능의 대략 4배가 증가했고 라이브러리 크기는 적당히 감소했다. 어셈블리 언어는 거의 필요치 않았지만 전반적으로 대부분의 최적화는 높은 수준이었다. 첫 단계- 프로파일 프로파일 프로파일 최적화 실행을 수행하기 전에 최적화 변경 내용을 벤치마크 할 수 있는 탄탄한 토대를 설립해야 한다. 이를 위해 우리 게임에서 단순하게 반복할 수 있는 시나리오를 설정했다. 이 시나리오는 전형적이지만 SDK치고는 큰 노력을 요하는 상황을 나타내었다. 우리의 경우 매 실행마다 프로파일링 데이터는 약 30초인 것으로 포착되었다. 이 때의 결과를 저장해 다음의 프로파일링 실행과 비교했다. 우리는 기본적으로 서로 다른 두 종류의 실행을 하는데 있어 프로파일러에서 많은 시간을 소요했다. 첫 번째 종류는 프로파일러가 고주파수로 어플리케이션을 방해하는 샘플 기반의 프로파일링이었다. 방해할 때마다 이 프로그램 카운터는 쿼리되고 튜닝 소프트웨어는 어떤 기능이 실행되는지를 기록한다. 이 프로파일링 기법은 정확도 측면에서는 형편없지만(결과를 방해하거나 로그하는 오버헤드 때문) 대부분의 주기가 소요되는 곳을 신속하게 발견할 때는 유용하다. 일단 잠재적 방해자를 정했으니 이제 소스코드를 검토해 보다 집중된, 함수 전용의 프로파일을 또 한번 실행할 수 있다. 이 때 시간이 소요되었던 곳을 정확하게 짚어내는 일을 빨리 할 수 있다. 두 번째 단계-코드 조사 때로 운이 좋으면 고차원 함수에서 일어나는 병목현상을 재빨리 발견할 수 있다. 또 어떤 때는 확실치 않은 때가 있는데 코드가 이미 차세대 플랫폼용으로 최적화되었던 우리의 경우가 정말 그랬다. 이를 염두에 두고 우리는 생성되었던 실제의 어셈블리 언어와 교차 참조하는 쪽을 택했다. 대부분의 디버거에는 이를 더욱 쉽게 만드는 ‘소스코드 주석’이 있다. 이것을 함으로써 우리는 코드가 불필요하게 확대되게 한 것으로 여겨진 영역을 빨리 발견할 수 있었다. 이렇게 하기 위해 어셈블러 프로그래밍을 많이 알 필요가 없는 사람도 있다는 점을 말해두어야겠다. 물론 도움이야 되겠지만 개발자로써 우리는 뭔가가 얼마나 많은 코드를 필요로.......................(중략) * 자세한 내용은 첨부문서(pdf)를 참고하시기 바랍니다.
|
|||||||
첨부파일 |