La vitesse de cos() et sin() fonction en GLSL shaders?

Je suis intéressé par des informations sur la vitesse de sin() et cos() dans Open GL Langage de Shader.

La GLSL Document de Spécification indique que:

Les fonctions intégrées essentiellement répartis en trois catégories:

  • ...
  • ...
  • Ils représentent une opération de matériel graphique est susceptible de s'accélérer à un certain point. Les fonctions trigonométriques tomber dans ce
    catégorie.

EDIT:

Comme cela a été souligné, le comptage de cycles d'horloge des opérations comme sin() et cos() n'a pas vraiment raconter toute l'histoire de rendement.

Donc pour préciser ma question, ce qui m'intéresse vraiment est de savoir si c'est utile pour optimiser loin sin() et cos() appels pour les cas courants.

Par exemple, dans mon application, il va être très commun pour l'argument 0. Donc fait quelque chose comme cela un sens:

float sina, cosa;

if ( rotation == 0 )
{
   sina = 0;
   cosa = 1;
}
else
{
   sina = sin( rotation );
   cosa = cos( rotation );
}

Ou le GLSL compilateur ou le sin() et cos() implémentations de prendre soin d'optimisations comme ça pour moi?

  • Qu'entendez-vous faire "les Gpu modernes fournissent une accélération matérielle pour sin() et cos()?" Si elle est en cours d'exécution sur le GPU, il peut être dit d'une accélération matérielle. En tout cas, votre meilleur pari est de l'essayer et de profil, comme les cycles d'horloge sur un GPU sont un peu vide de sens, sans plus de contexte à ce que vous faites. Même entre les différentes cartes du même fournisseur, il peut y avoir des différences dans le nombre d'unités d'exécution, de sorte que les cycles ne vous raconte une partie de l'histoire.
  • Avec ces Gpu, je pense que vous aurez le plus rapidement possible le temps d'exécution de ces fonctions trigonométriques. Question intéressante...
  • Comme indiqué dans le this et this question, cette question est essentiellement sans réponse. Une utilisation particulière de sin pourrait ne coûtent rien, selon l'endroit où vous l'utilisez et le matériel.
  • Les bons points. J'ai modifié ma question pour essayer de la rendre un peu plus explicite.
  • Merci pour les liens. stackoverflow.com/questions/8415251/... est particulièrement instructif concernant les raisons de simplement compter les gpu d'exécution de l'unité de cycles d'horloge ne pas raconter toute l'histoire de rendement. J'ai édité ma question pour essayer de le plus explicitement l'adresse de l'optimisation que je pense à faire en vaut la peine.
  • Pour le dessus, vous pouvez trouver le shader exécute les deux branches, et seulement alors, décide de la suite à faire usage de. Le genre d'optimisation que vous avez à faire ici est, à mon avis, n'en vaut pas la peine et peut même entraîner une diminution de la performance, et non une augmentation.
  • Hmm, je ne sais pas si c'est raisonnable de supposer une sorte d'optimisation spécifiques uniform vars. Ne fait pas de sens pour in/attribute vars, cependant.
  • Je vais voter pour fermer cette question hors-sujet parce que cette question est essentiellement de se demander "quelle est la vitesse de cette opération dans cette langue", quiest sans réponse, parce qu'il dépend du compilateur, plate-forme, et un tas d'autres choses, dont aucun n'a été spécifié.

InformationsquelleAutor ulmangt | 2012-04-14