2014-05-10 5 views
6

이 질문에 내놓았다. 스파이 킹은 없으며 속도가 느린 곳곳에 분산되어있는 것처럼 보입니다. 다음에 무엇을합니까?게임 성능 최적화 인터뷰

나는 놀랐다. 그것은 속임수입니까? 퍼프 (perf) 문제를 해결할 때, 나는 항상 이것이 모든 것을 다시 확장 할 필요가 있다고 생각합니다. 나는 mem perf라고 생각하지 않는다. 그것은 CPU 퍼포먼스에 나타난다.

+0

, 난 당신이의 유머를 볼 수 있기를 바랍니다

(또한, 성능을 저장 폐색을 사용하고 해당 모델에 픽셀 쉐이더의 질량을 추가하는 것은 나쁜 생각입니다) 주제에 대한 SO. 그러나 우리는 그것이 어떻게되는지 보게 될 것입니다 ... – Mysticial

+0

아마 다른 하드웨어에서 복제하고 싶습니다. 그들이 원하는 것을 확신하지 못합니다. –

+1

분명히 당신은 해결책을 찾았습니다 - "나는 그 질문을 게시하고 결과를 기다릴 것입니다"... 또한 나는 당신의 인터뷰에 실패 할 것이라고 생각합니다. –

답변

0

아마도 이것은보다 효율적인 알고리즘에 관한 것입니다. "마이크로 최적화"에는 한계가 있습니다. 예를 들어 버블 정렬을 완벽하게 최적화 할 수 있지만, 큰 스피드 업을 얻으려면 다른 정렬 알고리즘을 고안해야합니다.

또한 게임에서 다양한 종류의 조정 가능한 품질/속도 (또는 정밀도/속도) 절충을 소개 할 수 있습니다. 일반적으로 모든 게임에는 그래픽 세부 수준을 변경하는 일부 설정이 있습니다.

0

당신은 당신의 게임에서 병목 검색하는,하지만 아무것도 당신이 변화가 더 빨리 게임을하고있어하지, 그것을 GPU 파이프 라인 또는 CPU에서 아무것도합니다. 스파이크가 전혀 발생하지 않으며 느려짐이 에 걸쳐 모든 곳에 분산되어 나타납니다.

Uniformly Slow Code의 정의와 비슷합니다. 실제로 이것이 의미하는 바가 있다고 가정 해 봅시다 (일부 I/O 병목 현상이나 루프의 불필요한 객체 생성 또는 데이터 구조 나 알고리즘 등의 부적절한 선택이 아닙니다).

균일하게 느린 코드를 더 빠르게 만들려면 일반적으로 좋은 방법을 따르지 않으면 안되기 때문에 코드가 균일하게 느려지는 경우 코드 최적화가 중단됩니다. ("최적화 중지"는 인터뷰에서 좋은 대답이 아닐 것 같습니다 ...)

작업을 빠르게 수행하는 한 가지 방법은 작은 작업의 적절한 순서를 식별하고 한 곳에서 함께 수집 한 다음 수동으로 개선하는 것입니다 사물; 이러한 작업을 "수동으로 인라인 (inlining)"한 다음 출현하는 코드에 대해 고수준의 단순화를 수행합니다. 이 작업이 가치가 있고 관련 코드에 대한 탁월한 이해가 필요한 경우 좋은 직관이 필요합니다. This answer calls it bunching and horizontal optimization.

귀하의 이 실제로에 균일하게 느린 코드가 있는지 살펴볼만한 또 다른 사항은 Andrei Alexandrescu's optimization tips입니다.

3

자세한 정보를 요청했을 것입니다. "느리게"는 나쁜 성능을 나타내는 지표가 아니며 증상 자체보다는 증상을 분류하는 것입니다. 예를 들어, 당신이 존재로서 "느린"설명 될 수 있습니다

  • 낮은 프레임 속도
  • 입력
  • 불량 응답
  • 높은 반응성과 부드러운 프레임 속도 만 느린 게임 역학 (즉,: 플레이어 및 단체는

이러한 문제의 모든 다른 잠재적 인 원인과 솔루션이 네트워크 게임의 경우, 명백한 네트워크 지연에

  • ) 원활하지만, 매우 느리게 이동 :

    • 낮은하지만 일관 프레임 속도는 게임 루프의 비효율 때문일 수 있습니다. 단순히 자주 사용하는 프로파일 러를 실행하면 코드의 특정 부분에 많은 시간이 소요될 수 있습니다. 예를 들어 필자가 쓴 게임에서, 낮은 FPS는 캐싱없이 엔티티 간의 거리를 여러 번 계산 한 잘못된 루프의 결과라는 것을 발견했습니다. 다른 게임에서는 지형에 대한 조회를 수행하기 위해 사용했던 데이터 구조가 O(1) (파이썬 stdlib ... ick)이 아닌 O(N)이라는 사실을 발견했습니다. 볼 수없는 문제는 진단 할 수 없으며 프로파일 링은 첫 번째 방어선입니다.
    • 응답 성이 좋지 않은 이유는 여러 가지 때문일 수 있습니다. FPS가 높지만 컨트롤이 응답 속도가 느린 경우 컨트롤에 액세스하는 데 사용하는 API가 잘못되었을 수 있습니다. 일부 컨트롤러에는 반응을 없앨 수있는 진부한 운전자가있을 수 있습니다. 그것은 게임 루프 일 수도 있습니다. 컨트롤러의 입력을 자주 자주 확인하지 않을 수도 있습니다 (아마도 모든 틱을 확인하지는 않았을 것입니다). 앞서 언급 한 게임 중 하나에서 특정 동작이 지연된 문제가 발생했습니다. 항목을 사용하면 게임이 0.5 초 정도 늦게 반응합니다. 문제는 클라이언트가 서버를 완전히 왕복하여 작업을 수행하고 문제가 발생했는지 확인한 다음 서버에서 해당 항목이 사용되었다는 알림을 기다릴 때 발생합니다. 간단하게 문제가 클라이언트에서 즉각 일어나는 것이 문제를 해결했습니다.
    • 슬로우 게임 메 커닉은 게임 상수가 단순히 높게 설정되지 않았 음을 나타냅니다. 모든 것이 부드럽고 아름답지만 모든 것이 아주 천천히 움직인다면 기본 속도 나 가속도가 충분하게 나오지 않을 가능성이 있습니다.
    • 네트워크 지연은 여러 가지로 인해 발생할 수 있습니다. 연결된 라우터가 고장 났거나, 개발중인 VPS가 DDoS 처리되는 호스트에있을 수 있으며, 지나치게 많은 프로토콜을 사용하고있을 수 있습니다 (그러나 일률적으로) 수다 스럽거나 너무 많은 데이터를 전선으로 보내고있는 중입니다. 필자가 대학에서 쓴 시뮬레이션 소프트웨어에서 실험실의 일부 컴퓨터에서 계산이 수행되었지만 기숙사의 MBP에서 시각화가 실행되었습니다. 실험실 컴퓨터에서 기숙사로 전송하는 엄청난 양의 데이터가 건물의 값싼 네트워크 스위치에 과부하가 걸리고 패킷이 끊어지기 때문에 끔찍한 지연이 발생했지만 완벽하게 합리적인 로그 출력을 얻을 수있었습니다.

    그래서 여기에 대한 대답은 면접자가 증상을 더 완전하게 설명하도록하는 것입니다. @ 알리의 대답은 훌륭하지만 진단 할 때 약간의 감정을 필요로하는 좀 더 미묘한 문제가있을 수 있습니다. 일화

  • 0

    :

    내가 문제가 실제로 질문에 대한 답을 알지 못하고 무엇인지를 알 수 있습니다; P

    실수 다이렉트 통화. 너무 많은 물체. dx9가 모든 객체에 대해 새로운 directdraw 호출을해야하기 때문에 일부 오래된 dx9 게임에서는 특히 좋지 않습니다. 또는 그런 것, 이야기는 간다. 기본적으로 CPU가 모든 메시지를 처리 ​​할 유휴 대기 상태가되었습니다.

    비록 모든 정보에 대한 해결책이 아니지만 정보의 내용으로 언급 할만한 가치가 있지만 p는 다른 의견에서 정보를 보지 못했습니다.

    gpu가 100 %로 작동한다는 점을 제외하고는 거의 픽셀 쉐이더를 사용하는 것과 거의 같습니다. 튀김 오믈렛에 적합합니다. 나는 이것이 전적으로 확실하지 않다 페이지