Learn C++ STL

lesson ৫ / ৯ · binary_search, lower_bound, upper_bound আর equal_range

Module ১৩ · binary_search, lower_bound, upper_bound আর equal_range

ভেতরের কথা: GCC-র অর্ধেক করার loop, branch আর cache

Proপড়া

Kenji একটা দাম খোঁজার service চালায়। প্রতিটা request দশ লাখ দামের একটা sorted vector-এ lower_bound call করে, আর profiler বলছে বেশিরভাগ সময় যাচ্ছে ওখানেই। এক blog post-এ সে পড়েছে, library-র search নাকি branch-free, তাই ওটাই সবচেয়ে দ্রুত হওয়ার কথা। Maria জিজ্ঞেস করে, যার উত্তর এই lesson: "কিন্তু কেন? একটা search-এ branch থাকবেই বা কেন, আর থাকলে তার খরচই বা কী?" চলো, GCC-র loop খুলে দেখি, তুলনাগুলো গুনি, আর ওর branch মেপে দেখি।

আপনার জন্য এই lesson টা খোলা কি না দেখা হচ্ছে…

ভেতরের কথা: GCC-র অর্ধেক করার loop, branch আর cache এর ভেতরে কী আছে

  1. GCC 12-এর lower_bound, লাইন ধরে ধরে
  2. 100-এর জন্য পাঁচটা তুলনা, 800-এর জন্য চারটা কেন
  3. binary_search আর equal_range: একই loop, সাথে সামান্য একটু
  4. Library-র search কি branch-free? GCC 12 বলছে, না
  5. Performance lab: GCC-র loop, branch-free loop আর একটা prefetch
  6. Cache: value প্রতি 4 byte-এর একটা block বনাম value প্রতি একটা node