من ساعات إلى 360 مللي ثانية: هندسة زائدة لحل لغز
2025-02-08
حاول الكاتب حل لغز سودوكو بهدف إيجاد الحل الذي ينتج أكبر قاسم مشترك أعظم ممكن بين تسعة أرقام مكونة من تسعة أرقام مشكلة من الصفوف. فشلت المحاولات الأولية باستخدام مُحلل Z3 في إيجاد حل في غضون ساعات. استخدم الكاتب بعد ذلك عدة استراتيجيات تحسين: تحليل رياضي لتقليل مساحة البحث، وخوارزمية BFS، وتحسينات متكررة لوظيفة `is_good`، بالانتقال من HashSet إلى bitset، وأخيرًا استخدام SIMD للحساب المتجهي. قلل تعدد مؤشرات الترابط ومزامنة الخيوط المُحسّنة من وقت الحل من ساعات إلى 360 مللي ثانية، محققًا تسريعًا بأكثر من 1600 مرة. على الرغم من أن الإجابة المُشفّرة قد أثبتت أنها الأسرع، إلا أن المقال يُظهر كيف أن حتى المشاكل الحسابية البسيطة على ما يبدو توفر مكاسب أداء كبيرة من خلال التحسين الخوارزمي الدقيق.
التطوير