¿Por qué el código C++ para probar la conjetura de Collatz es más rápido que la inserción en ensamblador escrita a mano?
¡Hola a todos! Estoy estudiando C++ y ensamblador, y decidí probar la conjetura de Collatz (3n+1) para números grandes. Escribí dos versiones del código: una en C++ puro con optimizaciones, y la segunda con una inserción manual en ensamblador para x86-64. Esperaba que el ensamblador fuera más rápido, pero obtuve el resultado contrario.
Aquí está mi código C++ (compilado con -O2 en GCC):
#include <iostream>
#include <cstdint>
int collatz_steps(uint64_t n) {
int steps = 0;
while (n != 1) {
if (n % 2 == 0) {
n /= 2;
} else {
n = 3 * n + 1;
}
steps++;
}
return steps;
}
int main() {
uint64_t max_n = 1000000;
for (uint64_t i = 1; i <= max_n; ++i) {
collatz_steps(i);
}
return 0;
}
Y aquí está la versión con inserción en ensamblador (usando __asm estilo MSVC):
int collatz_asm(uint64_t n) {
int steps = 0;
__asm {
mov rax, n
xor ecx, ecx ; st No answers yet.
Inicia sesión para dejar una respuesta