"অন্যান্য ভাষাগুলি" বিকল্পের জন্য কেবল কিছু যুক্ত করতে যাচ্ছি।
সি: যেহেতু এটি কেবলমাত্র একাডেমিক অনুশীলন যা সত্যই কোনও তাত্পর্যপূর্ণ করে না, তাই আমি ভেবেছিলাম যে আমি কিছু আলাদা অবদান রাখব।
আমি কোনও অপ্টিমাইজেশন ছাড়াই সমাবেশে সংকলন করেছি এবং ফলাফলটির দিকে চেয়েছি।
কোড:
int main() {
volatile int a;
volatile int b;
asm("## 5/2\n");
a = 5;
a = a / 2;
asm("## 5*0.5");
b = 5;
b = b * 0.5;
asm("## done");
return a + b;
}
সংকলিত gcc tdiv.c -O1 -o tdiv.s -S
বিভাগ দ্বারা 2:
movl $5, -4(%ebp)
movl -4(%ebp), %eax
movl %eax, %edx
shrl $31, %edx
addl %edx, %eax
sarl %eax
movl %eax, -4(%ebp)
এবং 0.5 দ্বারা গুণফল:
movl $5, -8(%ebp)
movl -8(%ebp), %eax
pushl %eax
fildl (%esp)
leal 4(%esp), %esp
fmuls LC0
fnstcw -10(%ebp)
movzwl -10(%ebp), %eax
orw $3072, %ax
movw %ax, -12(%ebp)
fldcw -12(%ebp)
fistpl -16(%ebp)
fldcw -10(%ebp)
movl -16(%ebp), %eax
movl %eax, -8(%ebp)
যাইহোক, যখন আমি এই গুলিগুলিকে int
এস-তে পরিবর্তন করি double
(যা পাইথন সম্ভবত এটি করবে), আমি এটি পেয়েছি:
বিভাগ:
flds LC0
fstl -8(%ebp)
fldl -8(%ebp)
flds LC1
fmul %st, %st(1)
fxch %st(1)
fstpl -8(%ebp)
fxch %st(1)
গুণ:
fstpl -16(%ebp)
fldl -16(%ebp)
fmulp %st, %st(1)
fstpl -16(%ebp)
আমি এই কোডটির কোনওটিই বেঞ্চমার্ক করি নি, তবে কেবল কোডটি পরীক্ষা করে আপনি দেখতে পাচ্ছেন যে পূর্ণসংখ্যাগুলি ব্যবহার করে 2 দিয়ে বিভাজন 2 দ্বারা গুণনের চেয়ে কম হয় ডাবলস ব্যবহার করে গুণগুলি আরও সংক্ষিপ্ত হয় কারণ সংকলক প্রসেসরের ফ্লোটিং পয়েন্ট অপকোড ব্যবহার করে যা সম্ভবত একই ক্রিয়াকলাপের জন্য তাদের ব্যবহার না করে দ্রুত চালানো (তবে আসলে আমি জানি না)। সুতরাং চূড়ান্তভাবে এই উত্তরটি দেখিয়েছে যে ২.০ দ্বারা বনাম বিভাগ দ্বারা মাল্টিপ্ল্লেক্সের কার্য সম্পাদন ভাষা এবং এটি যে প্ল্যাটফর্মটিতে চলছে তার প্রয়োগের উপর নির্ভর করে। শেষ পর্যন্ত পার্থক্যটি নগন্য এবং এটি এমন কিছু যা আপনার পড়ার যোগ্যতার দিক থেকে বাদ দিয়ে কার্যত কখনও চিন্তা করা উচিত নয়।
পার্শ্ব নোট হিসাবে, আপনি দেখতে পারেন যে আমার প্রোগ্রামে main()
ফিরে আসে a + b
। আমি যখন অস্থিতিশীল কীওয়ার্ডটি সরিয়ে নিয়ে যাই, আপনি কখনই অনুমান করতে পারবেন না যে সমাবেশটি কেমন দেখাচ্ছে (প্রোগ্রাম সেটআপ বাদ দিয়ে):
## 5/2
## 5*0.5
## done
movl $5, %eax
leave
ret
এটি একক নির্দেশনায় বিভাজন, গুণ ও সংযোজন উভয়ই করেছে! স্পষ্টতই আপনাকে এই সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই যদি অপ্টিমাইজারটি কোনও ধরণের সম্মানজনক হয়।
অত্যধিক দীর্ঘ উত্তরের জন্য দুঃখিত।