O desbloqueio da taxa de quadros no XNA / MonoGame me diz a eficiência do meu código?

12

Eu tenho desbloqueado a taxa de quadros no MonoGame via:

this.graphics.SynchronizeWithVerticalRetrace = false;
base.IsFixedTimeStep = false;

E usá-lo como base para a eficiência da atualização e desenho do jogo.

Em uma resolução de 240 x 160 sem nada ser desenhado ou atualizado, exceto um contador de quadros, recebo um valor de FPS de 9.000 a 11.000 FPS.

Se eu adicionar todo o meu código novamente, ele cairá para cerca de 1.100 FPS.

Essa é uma boa indicação de que meu código está diminuindo significativamente a GPU (10x) e devo me preocupar? O jogo vai rodar a 60 FPS, então ainda estou bem longe disso, mas em que ponto da taxa de quadros desbloqueada devo me preocupar?

GPU: AMD FirePro W5000 (FireGL V)

teste
fonte
1
Como uma observação lateral: no seu caminho de desenvolvimento, sugiro que você mantenha seu FPS de destino tanto na depuração quanto na versão; algo poderia correr bem no lançamento, mas pode ser lento como o inferno na depuração, o que não é realmente útil :)
Vaillancourt
Na verdade não. Outras respostas respondem bem a isso, mas o ponto principal é que a maior parte do trabalho pesado será realizada pela sua placa gráfica usando a aceleração por hardware. A menos que você esteja trabalhando no mesmo encadeamento que os gráficos (não deveria), não há razão para o FPS ser impactado pelo seu código - dentro do razoável -.
Dan Pantry

Respostas:

30

Apenas grosseiramente.

Primeiro, o FPS não é uma medida linear . A diferença entre 11k FPS e 9k é extremamente pequena (0,0000201 segundos por quadro). Mas a diferença entre 60 e 2060 FPS (um delta de 2k FPS, o mesmo que existe entre 11k e 9k) é 0,0161 segundos ... muito maior. Portanto, pode ser perigoso como métrica de desempenho simplesmente porque grandes diferenças podem ou não ser tão ruins.

Usar o tempo por período é um pouco mais fácil de raciocinar, mas mesmo assim ainda é uma visão muito ampla da situação. Apenas informa quantos segundos um quadro do jogo leva. Ele não informa o motivo , a menos que você observe um grande aumento no tempo de quadro imediatamente após adicionar ou ativar um recurso específico.

Pode ser um barômetro básico para decidir que é hora de criar perfis mais detalhados. É particularmente ruim usar o FPS para determinar se você está vinculado à CPU ou GPU; A criação de perfil de GPU não é tão fácil quanto medir o tempo na CPU (que é onde provavelmente está o seu tempo e o código de computação do FPS).

Quanto a quando você deveria se preocupar ... bem, você disse que o jogo estava mirando 60 FPS. Se você começar a mergulhar próximo ou abaixo disso, provavelmente precisará começar a pensar com mais cuidado sobre seus problemas de desempenho. Até então, eu me concentrava em fazer tudo funcionar e depois me preocupava em torná-lo rápido .


fonte
6
+1 para a última frase. A otimização prematura do desempenho é, na minha opinião, uma prática muito ruim (falando por experiência própria).
Sirdank #
1
c2.com/cgi/wiki?PrematureOptimization - Leitura recomendada sobre o assunto
Machinarius
Nem sempre, se você tem uma máquina de ponta e atinge cerca de 80 FPS, seria bom o suficiente na sua máquina, mas se você quisesse segmentar computadores de ponta, eles podem ter apenas 15 FPS. Idealmente, seria melhor para fazer seus testes em uma máquina com as especificações mínimas que você deseja atingir, mas, na sua falta, otimizá-la para a sua máquina também pode otimizar a deles. Obviamente, se for executado com rapidez suficiente em suas máquinas de baixo custo, não há razão para gastar um esforço extra para otimizar ainda mais, especialmente com o risco de aumento de bugs.
Programmdude
5

Não vejo por que você não pôde usá-lo! Lembre-se de que talvez seja necessário codificar de maneira diferente para explicar as diferenças entre o timestap fixo / variável, portanto, se você planeja corrigi-lo ao liberar, precisará fazer ajustes. Veja este artigo: http://rbwhitaker.wikidot.com/time-steps

Esta é uma boa indicação de que meu código está reduzindo significativamente a velocidade da GPU

Pode ser a CPU também. Eu recomendo executar periodicamente o criador de perfil incorporado do Visual Studio (ou sempre que você vir uma grande queda de taxa de quadros) para encontrar pontos de acesso no seu código.

eu deveria estar preocupado?

Obviamente, isso depende do hardware que você está alvejando. Você precisará testar seu código com relação aos computadores com requisitos mínimos mais baixos que deseja oferecer suporte. Se ele rodar pelo menos 60 lá, eu não ficaria muito preocupado.

Tandersen
fonte