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 এর ভেতরে কী আছে
- GCC 12-এর lower_bound, লাইন ধরে ধরে
- 100-এর জন্য পাঁচটা তুলনা, 800-এর জন্য চারটা কেন
- binary_search আর equal_range: একই loop, সাথে সামান্য একটু
- Library-র search কি branch-free? GCC 12 বলছে, না
- Performance lab: GCC-র loop, branch-free loop আর একটা prefetch
- Cache: value প্রতি 4 byte-এর একটা block বনাম value প্রতি একটা node