En théorie, sur les processeurs modernes qui est plus rapide:Ce qui est plus rapide pour opération NON: table précalculée ou `~`
- recevant pas résulter de la table
- ou le calcul par
~
(en C) fonctionnement ?
En supposant que toute la table s'insère dans le cache L1.
Bitwise pas:
uint8_t bitwise_not(uint8_t arg) { return ~arg; }
Tableau non:
// precalculcating table (once)
uint8_t table[0x100];
for (int i = 0; i < 0x100; ++i) { table[i] = ~static_cast<uint8_t>(i); }
// function
uint8_t table_not(uint8_t arg) { return table[arg]; }
// xor_not:
uint8_t xor_not(uint8_t arg) { return arg^0xff; }
On ne une seule opération, mais plusieurs opérations de milliards, est la lecture du cache L1 plus rapidement que toute opération logique ou non? (Je pense que L1 est plus rapide, mais ne peut pas le prouver.)
Pratiquement, comment le mesurer?
Avez-vous essayé de comparer le code? Il serait probablement plus facile pour quelqu'un de signaler une erreur dans votre technique de benchmarking, plutôt que d'écrire un benchmark pour vous. –
@JonnyHenly Comment l'évaluer correctement? Il est toujours mesuré à 1 ns pour les deux fonctions. Le comptage des tacts du processeur ('rdtsc') n'est pas une bonne méthode de mesure, car le comptage des tacts ne dit rien sur le temps d'exécution (en 2015). – vladon
Une seule opération de ce type est trop rapide pour faciliter le benchmark. Vous devrez donc répéter l'opération des millions ou des milliards de fois pour obtenir un temps de mesure. –