على نطاق واسع بالتوازي مع GPU-ODE-Solver
وحدة معالجة الرسوميات (GPU) المتسارعة لعدد كبير من أنظمة المعادلات التفاضلية العادية المستقلة
الوحدات:
نظام واحد لكل خيط v3.1
إنه يحل عددًا كبيرًا من مثيلات نفس نظام ODE بشروط أولية و/أو مجموعات معلمات مختلفة.
الأنظمة المقترنة لكل كتلة v1.0
إنه يحل عددًا كبيرًا من حالات النظام المزدوج (الذي يتكون من العديد من الأنظمة الفرعية) بشروط أولية مختلفة و/أو مجموعات معلمات.
ملاحظات الإصدار:
18 أغسطس 2020.
نظام واحد لكل خيط v3.1:
- دعم الدقة الفردية والمزدوجة.
- دليل محسّن/معاد صياغته، على سبيل المثال، دليل تثبيت أكثر تفصيلاً لمستخدمي Windows.
- تضمين الملف الدفعي make.bat لتبسيط عملية التجميع على نظام التشغيل Windows.
- تمت إضافة برنامج تعليمي جديد (البرنامج التعليمي 5) لاختبار مثال يحتوي على مثيلات ذات اختلافات كبيرة جدًا في النطاق الزمني. تتم مقارنة منحنى أداء MPGOS مع حزم البرامج odeint (C++) وDifferentialEquations.jl (Julia). MPGOS متفوقة على هذه الحزم.
- تم أيضًا توسيع البرنامج التعليمي 6 (ديناميكيات التأثير) بمنحنيات الأداء، راجع النقطة السابقة. في هذه الحالة، MPGOS هي حزمة البرامج الوحيدة القادرة على التعامل مع الأنظمة ذات ديناميكيات التأثير (على وحدات معالجة الرسومات). ولذلك، تم إجراء مقارنات الأداء فقط مع إصدارات وحدة المعالجة المركزية من odeint وDifferentialEquations.jl.
- تغييرات طفيفة: مسح الفصل بين متغيرات TimeDomain وActualState.
الأنظمة المقترنة لكل كتلة v1.0:
- وحدة MPGOS الأولى جاهزة. تم تصميم الكود لحل عدد كبير من حالات النظام المزدوج (الذي يتكون من العديد من الأنظمة الفرعية التي تسمى الوحدات) بشروط أولية مختلفة و/أو مجموعات معلمات.
- تم توريث الوحدة تقريبًا جميع ميزات الوحدة نظام واحد لكل خيط v3.1. هناك عدد قليل من التخصصات، على سبيل المثال، التعامل مع الأحداث ممكن فقط على مستوى الوحدة؛ يمكن معالجة الاقتران الصريح فقط في شكل مصفوفة؛ لمزيد من التفاصيل، يتم إحالة القارئ المهتم إلى الدليل.
- يتم توفير مثالين تعليميين.
14 فبراير 2020.
نظام واحد لكل خيط v3.0:
- تحسينات هائلة في الأداء. أتاحت لنا تقنية البرمجة الوصفية للقالب التي تم تقديمها إنتاج كود محسّن للغاية. متوسط التسرب هو 3x، بينما بالنسبة للأنظمة ذات الأبعاد المنخفضة، يمكن أن يكون حتى من حيث الحجم.
10 أكتوبر 2019.
نظام واحد لكل خيط v2.1:
- باستخدام Template Metaprogramming، يتم تصميم الكود بالكامل لإنشاء كود حل متخصص للغاية أثناء وقت الترجمة (كوظيفة للخوارزمية وضرورة معالجة الأحداث والمخرجات الكثيفة). وفقا لذلك، يتم إعادة صياغة نظام الملفات.
- ملحق صغير: إمكانية استخدام المعلمات المشتركة للأعداد الصحيحة وملحقات الأعداد الصحيحة لتتمكن من تحقيق تقنيات الفهرسة المعقدة بكفاءة للأنظمة المعقدة.
13 أغسطس 2019.
نظام واحد لكل خيط v2.0:
- يتم الآن دعم الإخراج الكثيف مع بعض القيود، راجع الدليل. وهذا شرط مسبق على سبيل المثال لحل المعادلات التفاضلية التأخير.
- تم تبسيط وتوضيح الكود وواجهته إلى حد كبير. على سبيل المثال، تم حذف مجمع المشكلات بالكامل من التعليمات البرمجية (تم الاحتفاظ به لسبب تاريخي)، والعديد من الخيارات الممكنة مرتبطة الآن بكائن Solver الذي يمكن إعداده جميعًا باستخدام وظيفة عضو واحدة.
- تمت أيضًا إعادة هيكلة الدليل وتبسيطه وفقًا للتعليقات.
9 أبريل 2019.
نظام واحد لكل خيط v1.1:
- يمكن ربط جهاز (GPU) بكل كائن Solver. وبالتالي، يتم الآن التعامل مع اختيار الجهاز تلقائيًا.
- يتم إنشاء دفق CUDA تلقائيًا لكل كائن Solver.
- مجموعة جديدة من وظائف الأعضاء لتداخل حسابات وحدة المعالجة المركزية ووحدة معالجة الرسومات، ولتوزيع عبء العمل بسهولة على وحدات معالجة الرسومات المختلفة في عقدة واحدة. يتضمن ذلك الذاكرة غير المتزامنة وعمليات النواة، وإمكانيات المزامنة بين سلاسل وحدة المعالجة المركزية وتدفقات وحدة معالجة الرسومات.
- يمكن تحديد عدد نشط من متغيرات الخيوط في كل مرحلة تكامل للتعامل مع تأثير المخلفات بشكل مريح.
- تمت إضافة مثالين تعليميين جديدين: أ) حسابات وحدة المعالجة المركزية ووحدة معالجة الرسومات المتداخلة باستخدام كائنات Solver المتعددة ب) استخدام وحدات معالجة الرسومات المتعددة المتوفرة في جهاز/عقدة واحدة.
14 فبراير 2019.
نظام واحد لكل خيط v1.0:
- وحدة MPGOS الأولى جاهزة. تم تصميم الكود لحل عدد كبير من أنظمة ODE المستقلة ولكنها متطابقة (يمكن أن تكون مجموعات المعلمات والشروط الأولية مختلفة) على وحدات معالجة الرسومات.
- سهولة الاستخدام. حتى أولئك الجدد في برمجة C++، فإن دورة قصيرة فقط هي أكثر من كافية لاستخدام حزمة البرنامج.
- يوجد دليل مفصل مع أمثلة تعليمية. لذلك، يمكن للمستخدم بسهولة إنشاء مشروعه الخاص عن طريق نسخ ولصق كتل التعليمات البرمجية.
- التعامل الفعال والقوي مع الأحداث.
- الإجراء المحدد من قبل المستخدم بعد كل خطوة زمنية لتحقيق المرونة.
- "التفاعلات" التي يحددها المستخدم بعد كل خطوة زمنية ناجحة أو معالجة للحدث (مفيدة جدًا، على سبيل المثال، لديناميكيات التأثير، راجع الأمثلة التعليمية في الدليل).
- إمكانية استخدام التسلسل الهرمي لذاكرة وحدة معالجة الرسومات دون معرفة واضحة بالتفاصيل.
- معلمة قابلة للبرمجة بواسطة المستخدم للتطبيقات المرنة وتخزين خاصية خاصة للمسار.
- الحلول الصريحة فقط: طريقة Runge-Kutta من الدرجة الرابعة مع خطوة زمنية ثابتة، وطريقة Runge-Kutta-Cash-Karp من الدرجة الرابعة مع تقدير الخطأ المضمن من الدرجة الخامسة. (نظرًا لتدفق التحكم المعقد للحلول الضمنية، يكون أداء الحلول الصريحة أحيانًا أفضل من الحلول الضمنية حتى في المشكلات الصعبة).
- يتم دعم العمليات الحسابية ذات الدقة المزدوجة فقط.
- تخزين نقاط النهاية لكل مرحلة تكامل فقط (من أجل تحسين السرعة). ومع ذلك، نادرًا ما تكون هذه مشكلة، حيث تسمح المعلمات القابلة للبرمجة من قبل المستخدم والتفاعلات المحددة من قبل المستخدم المذكورة أعلاه بتخزين الخصائص الأكثر تعقيدًا للمسار، راجع الوثائق.