Ist die ganzzahlige Multiplikation wirklich die gleiche Geschwindigkeit wie die Addition auf einer modernen CPU?

Ich höre diese Aussage ziemlich oft, dass die Multiplikation auf moderner Hardware so optimiert ist, dass sie tatsächlich genauso schnell ist wie die Addition. Ist das wahr?

Ich kann nie eine verbindliche Bestätigung bekommen. Meine eigene Forschung fügt nur Fragen hinzu. Die Geschwindigkeitstests zeigen normalerweise Daten, die mich verwirren. Hier ist ein Beispiel:

#include <stdio.h>
#include <sys/time.h>

unsigned int time1000() {
  timeval val;
  gettimeofday(&val, 0);
  val.tv_sec &= 0xffff;
  return val.tv_sec * 1000 + val.tv_usec / 1000;
}

int main() {
    unsigned int sum = 1, T = time1000();
    for (int i = 1; i < 100000000; i++) { sum += i + (i+1); sum++; }
    printf("%u %u\n", time1000() - T, sum);
    sum = 1;
    T = time1000();
    for (int i = 1; i < 100000000; i++) { sum += i * (i+1); sum++; }
    printf("%u %u\n", time1000() - T, sum);
}

Der obige Code kann zeigen, dass die Multiplikation schneller ist:

clang++ benchmark.cpp -o benchmark
./benchmark
746 1974919423
708 3830355456

Aber mit anderen Compilern, anderen Compiler-Argumenten, anders geschriebenen inneren Schleifen können die Ergebnisse variieren und ich kann nicht einmal eine Annäherung finden.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage