دليل شامل لـ benchmark في C++ مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة benchmark (Google Benchmark) للغة C++: دليل شامل

مرحبًا بكم في PythonLib! اليوم سنغوص في عالم C++ عالي الأداء ونتناول بالتفصيل مكتبة benchmark (المعروفة أيضًا باسم Google Benchmark). إنها أداة لا غنى عنها لكل مطور يريد كتابة كود سريع وفعال. في هذه المقالة، سنغطي كل شيء: من التثبيت إلى الأساليب المتقدمة والأمثلة الواقعية.

1. ما هي هذه المكتبة ولماذا تحتاجها؟

Google Benchmark هي مكتبة للاختبارات الدقيقة (microbenchmarking) في لغة C++. توفر إطار عمل قوي ومرن لقياس أداء أجزاء صغيرة من الكود (الدوال، الخوارزميات، الحاويات). على عكس قياس الوقت البسيط باستخدام std::chrono، تقوم benchmark تلقائيًا بحل العديد من المشكلات: تسخين ذاكرة التخزين المؤقت، منع تحسينات المترجم غير المرغوب فيها، المعالجة الإحصائية للنتائج، وغير ذلك الكثير.

لماذا تحتاجها؟ في التطوير الحديث، غالبًا ما يكون الأداء أمرًا بالغ الأهمية. بدون قياسات دقيقة، فإنك تخاطر بـ:

  • تحسين الجزء الخطأ: إضاعة الوقت في تحسين كود يعمل بسرعة بالفعل، بينما عنق الزجاجة موجود في جزء آخر.
  • تدهور الأداء: إجراء تغييرات تبدو منطقية ولكنها في الواقع تبطئ الكود بسبب خصائص بنية المعالج أو المترجم.
  • اتخاذ قرارات معمارية خاطئة: اختيار خوارزمية أو بنية بيانات بناءً على الحدس وليس على الحقائق.

تحل مكتبة benchmark هذه المشكلات من خلال توفير طريقة موثوقة وقابلة للتكرار وذات أساس إحصائي لقياس الأداء. تُستخدم هذه المكتبة في شركات عملاقة مثل Google و LLVM و Facebook والعديد من المشاريع مفتوحة المصدر.

2. التثبيت

يمكن تثبيت مكتبة benchmark بعدة طرق. سنستعرض الطريقتين الأكثر شيوعًا: عبر مدير الحزم vcpkg والبناء من المصدر باستخدام CMake.

الطريقة 1: التثبيت عبر vcpkg (موصى به)

vcpkg هو مدير حزم متعدد المنصات للغة C++. إذا لم يكن مثبتًا لديك بعد، اتبع التعليمات على الموقع الرسمي.

بعد تثبيت vcpkg، نفّذ الأمر التالي:

vcpkg install benchmark
CMakeLists.txt:

find_package(benchmark REQUIRED)
target_link_libraries(your_target benchmark::benchmark)

الطريقة 2: البناء من المصدر

إذا كنت تفضل البناء يدويًا أو لم يكن لديك vcpkg، اتبع هذه الخطوات:

# استنساخ المستودع
git clone https://github.com/google/benchmark.git
cd benchmark

# إنشاء مجلد للبناء
mkdir build && cd build

# تكوين وبناء المكتبة
cmake .. -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON
make -j$(nproc)

# التثبيت (اختياري، يمكنك استخدام المكتبة المُجمّعة مباشرة)
sudo make install

بعد التثبيت، يمكنك الربط مع المكتبة عن طريق تحديد مسارات ملفات الرأس والمكتبات في مشروعك.

3. البداية السريعة — مثال عملي بسيط

لنكتب اختبار أداء بسيطًا لقياس سرعة جمع رقمين.

#include <benchmark/benchmark.h>

// الدالة التي نريد قياس أدائها
static void BM_Addition(benchmark::State& state) {
    int a = 5;
    int b = 10;
    int result = 0;
    for (auto _ : state) {
        // الكود داخل هذه الحلقة سيتم قياسه
        result = a + b;
        // هام: قد يقوم المترجم بتحسين (إزالة) result إذا لم يتم استخدامه.
        // استخدم benchmark::DoNotOptimize لمنع ذلك                    

توصيات