حقائق رئيسية
- تم تصميم المحمل لـ SoC RISC-V وكان بحاجة إلى البحث في جدول يضم حوالي 500 تكوين جهاز.
- استخدم التطبيق الأولي جدول تجزئة (Hash Table)، والذي يوفر نظرياً وقت بحث بتعقيد O(1). >تخطت أداء المحمل هدف الـ 100 مللي ثانية بمقدار ثلاثة أرقام عشرية (أكثر من 100 مرة).
- استبدال جدول التجزئة بالبحث الثنائي في مصفوفة مرتبة أدى إلى تحسين الأداء بنسبة 40%.
ملخص سريع
واجه فريق تطوير عائقاً أداءً كبيراً أثناء إنشاء محمل لـ RISC-V SoC. كانت المهمة تقتضي البحث في جدول يضم حوالي 500 تكوين جهاز. استخدم النهج الأولي جدول تجزئة، الذي يعد بتعقيد بحث O(1). على الرغم من هذه الكفاءة النظرية، كان المحمل بطيئاً للغاية، وفشل في الوصول إلى هدف الـ 100 مللي ثانية بفارق كبير.
في محاولة للتحسين، استبدل المطور جدول التجزئة بالبحث الثنائي على مصفوفة مرتبة. يتمتع هذا الأسلوب بتعقيد نظري قدره O(log n)
أداء متناقض
ركز العمل التطويري على محمل لنظام SoC RISC-V. كانت المتطلبة الأساسية هي البحث في جدول يضم حوالي 500 عنصر. يتكون كل عنصر من معرف جهاز 32 بت ومؤشر إلى بيانات التكوين. بدت المهمة مباشرة، وعكس التطبيق الأولي الممارسات الهندسية القياسية. نفذ زميل منا وظيفة البحث باستخدام جدول تجزئة، مستشهداً بضمان تعقيد وقت ثابت O(1) لعمليات البحث. اعتُبر هذا النهج مثالياً.
ومع ذلك، كانت الأداء الناتج غير مقبول. كان من المفترض أن تكتمل عملية التحميل خلال 100 مللي ثانية. بدلاً من ذلك، تجاوز وقت التنفيذ الفعلي هذا الحد بمقدار ثلاثة أرقام عشرية. المفارقة بين الكفاءة المتوقعة لجدول التجزئة والخمول الملاحظ قدمت لغزاً. لم يكن النظام يست滿足 متطلبات التشغيلية، مما استلزم التعمق في الأسباب الكامنة وراء التأخير.
تحسين غير متوقع
في مواجهة الأداء البطيء، بحث المطور عن حل بديل. كان التحسين المختار هو استبدال جدول التجزئة بخوارزمية البحث الثنائي العاملة على مصفوفة مرتبة. بدا هذا القرار معارضاً لمبادئ علوم الكمبيوتر الأساسية. يُعلّم التحليل الخوارزمي القياسي أن البحث الثنائي، بتعقيده O(log n)
اعترف المطور بأن هذا الاختيار قد يخيب أمل أستاذ الخوارزميات. الانتقال من O(1) إلى O(log n) بدا كخطوة للوراء. ومع ذلك، تحدثت النتائج العملية بنفسها. أظهر المحمل المزود بآلية البحث الثنائي زيادة سرعة كبيرة. تحسين الأداء بنسبة 40% أكد التغيير، ليثبت أن النموذج النظري لم يتماشى مع الواقع العملي للعتاد.
النظرية مقابل الواقع
السؤال الرئيسي الذي ينشأ من هذا السيناريو هو كيف تمكن خوارزمية بتعقيد نظري أسوأ من التفوق على خوارزمية أفضل. يكمن الجواب في التمييز بين التعقيد المجرد وتكاليف التنفيذ الملموس. يتجاهل ادعاء O(1) لجدول التجزئة التكاليف الإضافية المرتبطة بحساب دالة التجزئة، وتخصيص الذاكرة، ومحتمل فوات ذاكرة التخزين المؤقت (Cache Misses). في مجموعة بيانات صغيرة من 500 عنصر، يمكن أن تسود هذه التكاليف الإضافية وقت التنفيذ الفعلي.
على العكس من ذلك، فإن البحث الثنائي على مصفوفة مرتبة صديق للغاية لذاكرة التخزين المؤقت. تكون البيانات متصلة في الذاكرة، مما يسمح للمعالج بجلب البيانات بكفاءة. عمليات المقارنة البسيطة سريعة ومتوقعة. يذكرنا هذا الحدث بأن مقياس O كبير (Big O notation) يصف كيف يتغير الأداء مع حجم المدخلات، ولكنه لا يأخذ في الاعتبار العوامل الثابتة أو سلوكات العتاد المحددة التي غالباً ما تملي السرعة في العالم الحقيقي.
الخاتمة
توفير التحقيق في أداء محمل RISC-V-V درساً قيماً لمهندسي البرمجيات. بينما المعرفة النظرية للخوارزميات ضرورية، يجب أن تقترن بالاختبار والتحليل العملي. الافتراض بأن O(1) هو دائماً أسرع من O(log n) هو تبسيط خطير في سياقات محددة.
في نهاية المطاف، قادت استعداد المطور لتسليط الضوء على المعايير المتعارف عليها إلى تحسين ناجح. من خلال قياس الأداء الفعلي بدلاً من الاعتماد فقط على الضمانات النظرية، حدد الفريق مشكلة حرجة. يعزز هذا الحادث فكرة أنه في الهندسة، غالباً ما يختلف التطبيق عن النظرية، والدليل التجريبي هو المحكم النهائي للنجاح.
"Поиск за O(1), лучше уже некудا"
— زميل، مطور برمجيات




