Articles of optimisation

L’utilisation de ce pointeur provoque une désoptimisation étrange en boucle chaude

J’ai récemment rencontré une étrange désoptimisation (ou plutôt une opportunité d’optimisation manquée). Considérez cette fonction pour décompresser efficacement des tableaux d’entiers à 3 bits en entiers à 8 bits. Il décompresse 16 ints dans chaque itération de boucle: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast(source); target[0] = […]

Pourquoi les compilateurs C ++ n’optimisent-ils pas cette affectation booléenne conditionnelle en tant qu’affectation inconditionnelle?

Considérons la fonction suivante: void func(bool& flag) { if(!flag) flag=true; } Il me semble que si le drapeau a une valeur booléenne valide, cela équivaudrait à la définition inconditionnelle de true , comme ceci: void func(bool& flag) { flag=true; } Pourtant, ni gcc ni clang ne l’optimisent de cette manière – tous deux génèrent les […]

Optimisation de l’application Android avant sa sortie

Je suis dans une situation ” spéciale ” concernant l’ efficacité de mon programme. Maintenant, je suis dans une phase où je dois améliorer les performances de l’application et réduire la consommation de la batterie . Avant la question: Tout d’abord, mon application fonctionne. Cela fonctionne bien – pas d’erreurs que ce soit . Deuxièmement […]

Trouver rapidement si une valeur est présente dans un tableau C?

J’ai une application intégrée avec un ISR critique qui doit parcourir un tableau de taille 256 (de préférence 1024, mais 256 est le minimum) et vérifier si une valeur correspond au contenu des tableaux. Un bool sera mis à vrai si c’est le cas. Le microcontrôleur est un kernel NXP LPC4357, ARM Cortex M4 et […]

Les classes scellées offrent-elles vraiment des avantages en termes de performances?

Je suis tombé sur beaucoup de conseils d’optimisation qui disent que vous devriez marquer vos classes comme étant scellées pour obtenir des avantages de performance supplémentaires. J’ai effectué des tests pour vérifier le différentiel de performance et n’en ai trouvé aucun. Est-ce que je fais quelque chose de mal? Est-ce que je manque le cas […]

Pourquoi une simple boucle est-elle optimisée lorsque la limite est 959 mais pas 960?

Considérez cette boucle simple: float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } Si vous comstackz avec gcc 7 (snapshot) ou clang (trunk) avec -march=core-avx2 -Ofast vous obtenez quelque chose de très similaire à. .LCPI0_0: .long 1148190720 # float 960 f: […]

En mode release, le comportement du code n’est pas celui attendu

Le code suivant génère des résultats différents en mode débogage et en mode de publication (à l’aide de Visual Studio 2008): int _tmain(int argc, _TCHAR* argv[]) { for( int i = 0; i 255 ) { result = 255; } printf(“i:%2d, result = %3d\n”, i, result) ; } return 0; } La sortie du mode […]

Pourquoi l’API Java utilise-t-elle int au lieu de short ou byte?

Pourquoi l’API Java utilise-t-elle l’ int lorsque short ou même byte serait suffisant? Exemple: Le champ DAY_OF_WEEK de la classe Calendar utilise int . Si la différence est trop minime, alors pourquoi ces types de données ( short , int ) existent-ils?

Quels compilateurs C ++, le cas échéant, utilisent l’optimisation de la récursion de la queue?

Il me semble que cela fonctionnerait parfaitement pour une optimisation de la récursion de la queue en C et en C ++, mais pendant le débogage, je ne vois jamais une stack de trames indiquant cette optimisation. C’est plutôt bien, car la stack me dit à quel point la récursivité est profonde. Cependant, l’optimisation serait […]

Au-delà de l’échantillonnage en stack: profileurs C ++

Un conte de pirates La date est le 12/02/10. Les jours précédant Noël sont en train de disparaître et j’ai presque frappé un gros obstacle en tant que programmeur Windows. J’ai utilisé AQTime, j’ai essayé somnolent, shiny, et très somnolent, et en ce moment, VTune est en cours d’installation. J’ai essayé d’utiliser le profileur VS2008, […]