কম্পিউটার টিউটোরিয়াল

কেন C++-এ সোর্টেড অ্যারে প্রসেস করা আনসোর্টেড চেয়ে দ্রুত? (Branch Prediction)

কারণ: ব্রাঞ্চ প্রিডিকশন (Branch Prediction)। আধুনিক CPU-র পাইপলাইনে শর্তাধীন জাম্প (if-else) অনুমান করে আগাম থেকে ইনস্ট্রাকশন ফেচ করে।

উদাহরণ

if(arr[i] > 50) {
    // Operation B
} else {
    // Operation A
}

সোর্টেড অ্যারে: 1, 2, 3... 50, 51... 100

A, A, A, ... A, A, B, B, B...
Branch Predictor: সহজে প্রিডিক্ট করতে পারে (প্রথমে সব A, পরে সব B)
Pipeline: সঠিক ব্রাঞ্চ লোড হয়, মিসপ্রিডিকশন কম

আনসোর্টেড অ্যারে: 5, 51, 6, 90, 4, 49, 60...

A, B, A, B, A, A, B...
Branch Predictor: প্রিডিক্ট করা খুব কঠিন
Pipeline: বারবার মিসপ্রিডিকশন, ফ্লাশ, রি-ফেচ → স্লো

নোট: এটি কম্পাইলার অপ্টিমাইজেশন নয়, CPU হার্ডওয়্যার ব্রাঞ্চ প্রিডিক্টরের বৈশিষ্ট্য। সোর্টেড ডেটা ব্রাঞ্চ প্রিডিকশন ফ্রেন্ডলি।

সুপারিশ: হট লুপে যদি ব্রাঞ্চ থাকে, ডেটা সোর্ট করলে স্পিডআপ পাওয়া যায় (বিশেষ করে সিমপ্ল-if)।

  1. C++ ব্যবহার করে দুটি অনসর্টেড অ্যারে সর্টেড অর্ডারে মার্জ করা

  2. C++ তে সর্টেড অ্যারেতে এবসোলিউট ডিস্টিংক্ট কাউন্ট

  3. C++-এ কেন সর্টেড অ্যারে প্রসেস করা আনসর্টেডের চেয়ে দ্রুত?

  4. সোর্টেড অ্যারে বাস্তবায়নের C++ প্রোগ্রাম