Avatar ·

कोलाट्ज़ परिकल्पना की जाँच के लिए C++ कोड हाथ से लिखे गए असेंबली इन्सर्ट से तेज़ क्यों चलता है?

सभी को नमस्कार! मैं C++ और असेंबली सीख रहा हूँ, और बड़ी संख्याओं के लिए कोलाट्ज़ परिकल्पना (3n+1) की जाँच करने का निर्णय लिया। मैंने कोड के दो संस्करण लिखे: एक शुद्ध C++ में ऑप्टिमाइज़ेशन के साथ, और दूसरा x86-64 के लिए हाथ से लिखे गए असेंबली इन्सर्ट के साथ। मुझे उम्मीद थी कि असेंबली तेज़ होगी, लेकिन मुझे उल्टा परिणाम मिला।

यहाँ मेरा C++ कोड है (GCC में -O2 के साथ कंपाइल किया गया):

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

और यहाँ असेंबली इन्सर्ट वाला संस्करण है (MSVC शैली __asm का उपयोग करते हुए):

int collatz_asm(uint64_t n) {
    int steps = 0;
    __asm {
        mov rax, n
        xor ecx, ecx        ; steps = 0
    loop_start:
}