এই প্রশ্নটি মাইস্টিয়ালের উজ্জ্বল উত্তরটি পড়ার সময় মাথায় আসে এমন প্রশ্নের এই প্রশ্ন: একটি বাছাই করা অ্যারের চেয়ে বাছাই করা অ্যারে প্রক্রিয়া করা কেন দ্রুত হয় ?
জড়িত প্রকারের জন্য প্রসঙ্গ:
const unsigned arraySize = 32768;
int data[arraySize];
long long sum = 0;
তার উত্তরে তিনি ব্যাখ্যা করেছেন যে ইন্টেল সংকলক (আইসিসি) এটি অনুকূল করে:
for (int i = 0; i < 100000; ++i)
for (int c = 0; c < arraySize; ++c)
if (data[c] >= 128)
sum += data[c];
... এর সমতুল্য কিছুতে:
for (int c = 0; c < arraySize; ++c)
if (data[c] >= 128)
for (int i = 0; i < 100000; ++i)
sum += data[c];
অপ্টিমাইজারটি সনাক্ত করছে যে এগুলি সমতুল্য এবং তাই লুপগুলি বিনিময় করছে , শাখাটি অভ্যন্তরের লুপের বাইরে নিয়ে যাচ্ছে moving খুব চালাক!
কিন্তু কেন এটি করে না?
for (int c = 0; c < arraySize; ++c)
if (data[c] >= 128)
sum += 100000 * data[c];
আশা করি মিস্টিয়াল (বা অন্য কেউ) সমান উজ্জ্বল উত্তর দিতে পারে। এর আগে অন্য প্রশ্নে আলোচিত অপটিমাইজেশনগুলি সম্পর্কে আমি কখনই জানতে পারি নি, তাই এর জন্য আমি সত্যিই কৃতজ্ঞ।
volatileতবে লুপ ইন্টারচেঞ্জটিও একটি অবৈধ অপটিমাইজেশন হতে পারে।