कोलाट्ज़ परिकल्पना की जाँच के लिए 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:
}