A multiplicação de números inteiros é realmente a mesma velocidade da adição na CPU moderna

Eu ouço essa afirmação com frequência, que a multiplicação no hardware moderno é tão otimizada que na verdade tem a mesma velocidade da adição. Isso é verdade?

Eu nunca consigo uma confirmação autorizada. Minha própria pesquisa apenas adiciona perguntas. Os testes de velocidade geralmente mostram dados que me confundem. Aqui está um exemplo:

#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);
}

O código acima pode mostrar que a multiplicação é mais rápida:

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

Mas com outro compilador, outros argumentos do compilador, loop interno diferentemente escrito, os resultados podem variar e eu nem consigo obter uma aproximação.

questionAnswers(8)

yourAnswerToTheQuestion