L’utilisation de fonctions virtuelles au lieu d’instructions IF est plus rapide?

Je me souviens d’avoir lu quelque part en ligne que, dans les situations de latence EXTRÊMEMENT basse, il est préférable d’utiliser des fonctions virtuelles au lieu des instructions IF.

Est-ce vrai? Essentiellement, disent-ils que le polymorphism dynamic est préférable pour les situations de vitesse?

Des utilisateurs ont-ils une autre “particularité” à faible temps de latence C ++ qu’ils pourraient partager?

Je doute fort qu’une seule déclaration if / else serait plus lente que d’utiliser une fonction virtuelle: la fonction virtuelle impose généralement un blocage du pipeline et limite les possibilités d’optimisation. Une instruction if peut bloquer le pipeline, mais si elle est souvent exécutée, la prédiction peut aller dans le bon sens. Toutefois, si votre alternative se situe entre une cascade de quelques instructions if / else et un seul appel de fonction virtuelle, ce dernier risque d’être plus rapide. En outre, si le code total en cours d’exécution via l’utilisation de fonctions virtuelles par rapport aux twigs est différent, les fonctions sont considérablement réduites, ce qui peut entraîner peu d’erreurs de mémoire cache dans la mémoire cache d’instructions. Cela dépend de la situation. Le meilleur moyen est de mesurer. Notez que la mesure de code artificiel qui tente simplement d’enquêter sur la différence entre deux approches mais ne fait vraiment aucun traitement donne des résultats trompeurs. Toutefois, lorsque vous devez produire du code à très faible latence, vous pouvez généralement passer plus de temps à l’élaborer, c’est-à-dire qu’expérimenter plusieurs approches différentes peut être viable.

Bien que mes collègues aient tendance à ne pas utiliser mes modèles pour éviter les twigments au moment de l’exécution, le code avec lequel je me retrouve est souvent très lent à comstackr mais très rapide à exécuter. Bien entendu, cela dépend des fonctions ou twigs utilisées pour être connues au moment de la compilation. Par exemple, dans les domaines que j’ai utilisés, par exemple pour le traitement des messages, il suffit souvent de prendre une décision dynamic, par exemple une décision pour chaque message (c’est-à-dire un appel de fonction virtuelle), suivie d’un traitement qui n’implique aucun type dynamic (ceci est toujours conditionnel, par exemple pour la quantité de valeurs dans un tableau).