برمجياتقراءة دقيقتين

Go تضيف حزمة SIMD تجريبية تعمل على AVX وNEON وWebAssembly من كود واحد

المغزى

عمل كان يتطلب كتابة assembly لكل معمارية أصبح ممكنًا داخل أدوات Go الرسمية، والحل جاء من إزالة معلومة من نظام الأنواع لا من إضافة أنواع جديدة.

نشرت مدونة Go الرسمية في 24 سبتمبر 2026 مقالًا لـ David Chase وJunyang Shao يعرض حزمة جديدة باسم simd. الحزمة تجريبية، وتتطلب تفعيل GOEXPERIMENT=simd عند البناء.

الـ SIMD تعني تنفيذ أمر واحد على مجموعة من القيم في الوقت نفسه، بدلًا من المرور على العناصر واحدًا تلو الآخر. وهي أساس تسريع معالجة النصوص والصور والصوت.

المشكلة القديمة والحل

ويختلف عرض الـ registers من معمارية إلى أخرى، فقد يكون 128 أو 256 أو 512 بت. لذلك كان الكود المكتوب لمعالجات Intel لا يعمل على ARM، وكان المطور يضطر إلى كتابة assembly منفصل لكل منصة.

الحل الذي اختاره الفريق هو إزالة الحجم الثابت من نظام الأنواع كليًا. يكتب المطور simd.Float32s دون تحديد العرض، ويتولى الـ compiler إنتاج نسخ متخصصة من الدالة لكل عرض. وما لا يتوفر على معمارية معينة يُحاكى بأوامر أخرى.

النتيجة أن الملف نفسه يعمل على AVX512 في خوادم Intel، وعلى NEON في أجهزة Mac بمعالجات Apple silicon، وفي المتصفح عبر WebAssembly.

ولا تزال الحزمة تفتقر إلى عمليات الاختزال مثل ReduceSum، وقد أُجّلت إلى الإصدار التالي.

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

المصادر

  1. المقال الرسمي على مدونة Go
  2. توثيق حزمة simd

من عدد السبت 15 ربيع الآخر - 26 سبتمبر

أخبار ذات صلة

أخبار السبت 15 ربيع الآخر - 26 سبتمبر