2011-01-17 3 views
2

저는 여유 시간에 작은 인디 게임을 개발 해왔고 설명 할 수없는 문제를 해결했습니다. 게임의 일부 빌드는 다른 빌드보다 느리게 초당 수백 프레임을 무작위로 실행합니다. 예를 들어 일부 텍스트를 렌더링하고 3D 장면을 렌더링하지 않으면 내 하드웨어에서 1800FPS를 얻을 수 있습니다. 하나의 3D 구 (10K verts, 픽셀 음영)를 추가하고 1700FPS를 달성하십시오. 두 개의 구체를 더 추가하고 800FPS를 달성하십시오. 코드가 렌더링 된 FPS 카운터 인 1800FPS에서 이전에 달성 한 것과 동일한 장면을 렌더링하더라도 모든 영역을 제거하고 1100FPS를 달성하십시오. 나는 재건하고 프로젝트를 청소하고 컴파일러를 재부팅 해 보았습니다. 이것은 Release 모드에서 발견 할 수있는 모든 최적화를 켰습니다. 원인에 대한 제안?빌드 간의 성능 문제

빠른 프로필을 실행했는데 Visual Studio에서 내 시간의 90 % 이상을 D3D9_43.dll에 소비했다고 생각하여 내 앱의 버그가 아니라고 설명합니다. 이유는 설명하지 않습니다. 일부 빌드.

내 컴퓨터를 재부팅했는데 최대 1800FPS입니다. 저는 이것이 DirectX SDK 도구의 버그라고 생각합니다. 이 질문을 삭제하려고합니다.

+0

멍청한 질문 .. 나는 Superfetch가 그와 아무 상관이 없다고 생각하니? (실행 중이면 물론). 어쨌든,이 인디 게임을 쓰지 마시고 DeadMG ++에서 다시 시작하십시오. –

답변

0

MSVC가이 작업을 수행하는지는 잘 모르지만 GCC는 다음을 수행합니다.
GCC가 가장 가능성있는 분기를 결정할 수 없으면 주사위를 던집니다.

MSVC가 수행하는 경우 각 빌드에서 중요한 분기점이 한 방향으로 또는 다른 방향으로 예측되어 차이가있을 수 있습니다.

PGO 빌드를 수행하여이를 해결할 수 있습니다 : 프로파일 유도 최적화. 그러면 런타임에 코드가 검사되어 모든 분기를 올바르게 예측할 수 있습니다. 적어도, 당신의 시운전이 좋은 견본이라면 그것은 정확할 것입니다.

그러나 결과는 일반적으로 그렇게 극적이지 않습니다. 장면에 더 많은 물체가 있고 코드가 더 많이 포함 된 경우 변경 사항이 더 많이 발생합니다.

+0

PGO 적용시 변경되지 않습니다. 90 %의 시간이 D3D9_43.dll에 있으면 다른 10 %를 제거하더라도 100 % 증가하지는 않습니다. – Puppy

0

다른 가능성 : CPU 속도 조정.

프로그램이 GPU에서 실행되는 대부분의 시간을 소비하는 경우 CPU 사용량이 CPU를 최대 속도로 밀어 올릴 정도로 높아지지 않을 수 있습니다.

Windows 전원 관리를 균형이 아닌 최고 속도로 조정 해보십시오. 변경 사항이 있는지 확인하십시오.

+0

재부팅으로 이미 문제가 해결되었습니다. 그러나, 나는 고성능 계획에 이미 달리고있다. – Puppy