حسابان وقرار واحد
انتهى الحساب على GPU قبل الغداء. أما الحالة نفسها على عنقود CPU فبقيت في الطابور طوال الليل واستغرقت معظم صباح اليوم التالي. معاملات السحب متطابقة حتى الخانة الثالثة، ودرجة حرارة المخرج تختلف بنصف درجة، ويسأل أحدهم في الاجتماع لماذا ما زال الفريق يشغّل أي شيء على CPU.
السؤال مشروع. لكن هناك سؤالاً أقل إثارة ينبغي أن يأتي أولاً. أيّ الجوابين تقبل أن توقّع عليه؟
يكون حلّال CFD على GPU مجدياً حين تتحقق ثلاثة شروط: أن تتسع الحالة في ذاكرة GPU، وألا تستخدم إلا نماذج يدعمها حلّال GPU، وأن تكون كبيرة بما يكفي ليتجاوز التسريع السعر الأعلى للساعة على هذا العتاد. يبيّن هذا المقال كيف تتحقق من كل شرط قبل أن تشتري أو تستأجر أي شيء، وما الذي يفعله حلّال GPU بشكل مختلف عن نظيره على CPU، وما الفحص الذي سأخصص له بعد ظهر يوم كامل قبل أن أأتمنه على قرار.
ما الذي يعمل فعلاً على GPU؟
يُباع تحت الأحرف الثلاثة نفسها شيئان مختلفان تماماً.
- الحلّالات الأصلية على GPU تنقل التكرار كله إلى البطاقة: تجميع المصفوفة، وحلّ النظام الخطي، والتدرجات، وكل شيء. حلّال GPU في Fluent يعمل بهذه الطريقة، وصارت برامج تجارية أخرى تقدّم حلّالات أصلية على GPU أيضاً. ومن هنا تأتي التسريعات الكبيرة.
- التفريغ إلى GPU يُبقي الحلّال على CPU ويرسل إلى البطاقة جزءاً مكلفاً واحداً، غالباً النظام الخطي للضغط. هذا يساعد، لكن بقية الحلقة تظل تعمل بسرعة CPU.
النوع الأول يتطلب تعديلاً في طريقة التفكير. حلّال GPU في Fluent يقرأ ملف الحالة نفسه الذي يقرؤه حلّال CPU، لكنه تنفيذ مستقل. لا يعمل إلا على الحالات ثلاثية الأبعاد. يوفّر مخططاً واحداً للتدرجات هو Least Squares Cell Based. ومخطط الضغط Linear فيه يختلف عن نسخة CPU، وتقول Ansys إنه أدق على الشبكات غير المنتظمة. ويعمل بدقة مفردة أو مزدوجة. كل هذا موثّق، ومجتمعاً يجعل الحساب على GPU إعداداً عددياً ثانياً لمسألتك، قريباً من الأول ومختلفاً عنه قليلاً.
هذه هي حجة المقال كلها، لذا أقولها مرة واحدة. الإعداد العددي الجديد يكسب الثقة كما يكسبها أي إعداد آخر، بأن يتفق مع مرجع على حالة تفهمها.
كم هو أسرع، بصراحة؟
أرقام التسريع تشبه أرقام استهلاك الوقود في السيارات. هي حقيقية، وقد قيست، لكنها قيست على طريق لن تقود عليه أبداً.
شغّلت SimuTech Group في Fluent حالة مستقرة لانتقال حرارة مقترن بنحو 16 مليون خلية، وقارنت بطاقة NVIDIA RTX 6000 واحدة بعُقد CPU. أمام 16 نواة كان GPU أسرع بنحو 2.5 مرة من معالجات AMD و3.5 مرة من معالجات Intel. وأمام 96 و128 نواة فازت CPU. بطاقة متوسطة أمام مهمة CPU متواضعة فوز واضح؛ والبطاقة نفسها أمام مهمة CPU بحجم مناسب خسارة.
تُظهر اختبارات الشركات المورّدة بعدة وحدات GPU وشبكات من مئات ملايين الخلايا تسريعات أكبر بكثير. والحالات الأصغر تكسب أقل، لأن أجزاء الحساب التي لا تتوازى جيداً تأخذ نصيباً أكبر من الوقت.
كلا النوعين من النتائج صادق، وكل منهما يجيب عن سؤال مختلف. كلما رأيت رقم تسريع، اسأل ما الذي قورن به، وما حجم الشبكة، وأي فيزياء كانت مفعّلة. وحدة GPU واحدة أمام 16 نواة وثماني وحدات أمام ألف نواة ادعاءان مختلفان صادف أنهما يتقاسمان العنوان نفسه.
هل تتسع حالتي؟
ذاكرة GPU جدار صلب. مهمة CPU تنقصها الذاكرة تبطؤ، أما مهمة GPU تنقصها الذاكرة فلا تبدأ أصلاً.
تعطي وثائق Fluent رقماً للتخطيط: نحو 1 غيغابايت من ذاكرة GPU لكل مليون خلية في حالة مضطربة على شبكة سداسية الوجوه بدقة مفردة. الدقة المزدوجة تحتاج إلى 50% أكثر، والشبكة متعددة الوجوه إلى ما بين 20 و40% أكثر. وتضيف المكونات الكيميائية والإشعاع والنماذج الأخرى حصتها، ويعتمد الرقم الدقيق على الحالة.
مثال محسوب. حالة مضطربة على شبكة متعددة الوجوه من 40 مليون خلية، بدقة مزدوجة:
على بطاقة سعتها 80 غيغابايت يقع هذا في مكان ما بين «بالكاد تتسع» و«لا تتسع إطلاقاً»، قبل أن تضيف مكوناً كيميائياً واحداً. والشبكة نفسها بدقة مفردة تحتاج إلى ما بين 48 و56 غيغابايت وتتسع بسهولة. اختيار الدقة قرار يخص الذاكرة والكلفة والدقة معاً، ويستحق دقيقة تفكير قبل أن يصبح إعداداً افتراضياً.
هل تكفي الدقة المفردة؟
في العادة نعم، للكميات التي يذكرها المهندسون في تقاريرهم. الدقة المفردة تحمل نحو سبعة أرقام معنوية. وهذا يكفي وزيادة لحقل سرعة أو لهبوط ضغط من بضع مئات من الباسكال. ويصبح هامشها ضيقاً حين يكون الجواب فرقاً صغيراً بين عددين كبيرين: بضعة باسكال من هبوط الضغط فوق عشرة بار، أو عُشر درجة في جسم صلب عند 400 K، أو تدفق حراري صافٍ صغير بين تدفقين كبيرين.
الحلّالات تحميك أصلاً في الحالة الأكثر شيوعاً لأنها تعمل بالضغط النسبي قياساً إلى ضغط تشغيل. اختر ضغط التشغيل بتعقّل ويختفي معظم الخطر. وفي ما تبقّى، سيخبرك الفحص الموصوف لاحقاً في هذا المقال، على حالتك أنت، هل تهم الدقة أم لا.
ويظهر أثر آخر في الممارسة. في مقارنة SimuTech كان GPU يعمل بدقة مفردة وCPU بدقة مزدوجة، واحتاج GPU إلى تكرارات أكثر حتى التقارب، مع درجات حرارة شبه متطابقة في النهاية. لذا قارن الزمن الفعلي حتى جواب متقارب. التكرار الأسرع الذي تحتاج إلى ضعف عدده مكسب أصغر مما يبدو.
هل حلّال CFD على GPU أرخص لكل حالة؟
الحساب بسيط، ونادراً ما يُجرى.
هنا C كلفة حالة واحدة، وr سعر الساعة على العتاد، وt الزمن الفعلي حتى جواب متقارب، وS = t_CPU / t_GPU التسريع المقيس على حالتك.
مثال محسوب بأسعار مفترضة. لنفترض أن ساعة عقدة GPU تكلف أربعة أضعاف موارد CPU التي يستخدمها فريقك عادة. عندها يجب أن يكون GPU أسرع بأربع مرات على الأقل في حالتك لمجرد التعادل. عند تسريع 2.5 مرة تكون الكلفة لكل حالة أعلى لكن الجواب يصل أبكر. وعند تسريع 8 مرات تكون الكلفة النصف ويصل الجواب أبكر. وقد يكون كلاهما الخيار الصحيح. الأسرع والأرخص سؤالان منفصلان، والمشروع المتأخر يدفع عن طيب خاطر ثمن الأول.
ثلاث كلف تختبئ خارج المعادلة. زمن الانتظار في الطابور، وهو غالباً أطول من زمن الحساب على عنقود مشترك. وطريقة احتساب ترخيص البرنامج لعتاد GPU، وهذا ما يستحق أن تتحقق منه مع المورّد قبل أن تبني خطتك عليه. والكلفة لمرة واحدة للتحقق من إعداد GPU لكل عائلة من الحالات، وهي موضوع القسمين التاليين.
ما الذي يفعله حلّال GPU بشكل مختلف؟
تنشر Ansys مع كل إصدار صفحة بقيود حلّال GPU في Fluent. وقراءتها للإصدارين 2025 R2 و2026 R1 درس مفيد. إليك مختارات، مع ما يفعله كل بند بك:
- مستوى الضغط في المناطق المغلقة غير القابلة للانضغاط. في منطقة مغلقة مستقرة غير قابلة للانضغاط يحتفظ حلّال GPU بمتوسط الضغط الحجمي الابتدائي، بينما يثبّت حلّال CPU الضغط عند الصفر في خلية مرجعية. فتكون الحقول مزاحة، وتشير Ansys إلى أن هذا قد يؤثر في تكاملات القوى على أجسام سطحها غير مغلق. والإزاحة الثابتة في قوة الرفع بين الحلّالين تشير إلى هذا البند أولاً.
- إشارة معدل التدفق الكتلي عند الواجهات غير المتطابقة. قد تعرض مراقِبات التدفق عند هذه الواجهات إشارة خاطئة. فيبدو ميزان الكتلة كارثياً بينما الجريان سليم.
- تقارير التدفق الكتلي على السطوح. تقول صفحة الميزات المدعومة للإصدار 2025 R2 إن حلّال GPU لا يعطي معدل التدفق الكتلي صحيحاً إلا على المناطق الداخلية، ويعرض الباقي صفراً. المخرج الذي يظهر 0 kg/s قيد في التقرير. والمجرى سليم.
- الضغط الديناميكي على الجدران الثابتة. يعرض المراقِب صفراً بشكل صحيح، بينما تعرض التقارير المستخدمة كمعاملات خرج قيمة غير صفرية خاطئة.
- قصّ نسبة اللزوجة الاضطرابية. تُقصّ النسبة عند الحد نفسه كما على CPU، من دون أي رسالة في وحدة التحكم. حلّال CPU يخبرك حين يقصّ. أما حلّال GPU فيحتفظ بالأمر لنفسه.
- التهيئة. قد تفشل التهيئة الهجينة مع حدود ضغط المجال البعيد في التقارب أو تعطي جرياناً خارجاً غير فيزيائي، وتوصي Ansys بالتهيئة القياسية. وبدء حساب عابر من حل مستقر لا يعمل بشكل صحيح حين تُحل معادلة الطاقة؛ وهناك حل بديل موثّق.
- إعادة التشغيل بين الحلّالين. حلّ GPU بمادة قابلة للانضغاط ومعادلة الطاقة لن يُعاد تشغيله بشكل صحيح على حلّال CPU.
- إعدادات غير مدعومة في ملفات حالة قديمة. النماذج التي لا يدعمها حلّال GPU مخفية في الواجهة أو موسومة بـ Unsupported. وإذا ضُبطت عبر الواجهة النصية فإنها تُسجَّل على أنها متجاهَلة أو محوَّلة أو غير مدعومة. ملف حالة CPU كان يعتمد على أحدها سيعمل مع ذلك، وسجلّ الحساب هو المكان الوحيد الذي يخبرك بما حدث له.
والقائمة تتغير أيضاً. كانت صفحة 2025 R2 تقول إن الجريان فوق الصوتي عند مداخل الضغط ومداخل السرعة ومخارج الضغط يُعامَل على أنه دون صوتي. صفحة 2026 R1 لم تعد تذكر هذا البند، وتضيف بنوداً أخرى، مثل حدّ أقصى من 20 مكوناً كيميائياً وعدم توافق نموذج flamelet generated manifold مع الأوساط المسامية والأطر المتحركة.
لا شيء من هذا فضيحة. كل بند مكتوب، وهذا أكثر مما يمكن قوله عن بعض سلوكيات حلّالات CPU التي صادفتها. المشكلة أن معظمنا يقرأ ملاحظات الإصدار كما يقرأ شروط عقد الهاتف المحمول. اقرأ الصفحة الخاصة بالإصدار الذي تستخدمه بالضبط، في كل مرة يتغير.
كيف سأفحص نتيجة GPU
بعد ظهر يوم واحد لكل عائلة من الحالات، يُعاد حين يتغير إصدار الحلّال أو الفيزياء.
- اختر حالة مصغّرة من العائلة. الفيزياء نفسها، ونوع الشبكة نفسه، وأنواع الشروط الحدية نفسها، وحجم صغير بما يكفي لتعمل على الحلّالين في بضع ساعات.
- شغّلها على CPU بدقة مزدوجة حتى تقارب صارم. راقب الكميات التي ستذكرها في التقرير وتحقق من ميزاني الكتلة والطاقة، كما في أي دراسة.
- شغّلها على GPU بالإعدادات التي ستستخدمها في العمل الفعلي، بما في ذلك الدقة. أن تختبر الدقة المزدوجة ثم تحسب بالمفردة يعني أنك اختبرت الشيء الخطأ.
- اقرأ سجلّ حساب GPU بحثاً عن أي شيء متجاهَل أو محوَّل أو غير مدعوم.
- قارن الكميات المطلوبة والموازين ومقطعاً واحداً على خط عبر المنطقة التي تهمك.
- احكم على الفرق قياساً إلى خطأ التقطيع لديك. الحلّالان لا يتفقان تماماً أبداً، لذا فالصفر هو المقياس الخطأ.
الخطوة الأخيرة هي التي يتجاوزها الناس. والسؤال هو هل يختلف الحلّالان بأكثر مما تقبله أصلاً من الشبكة.
مثال محسوب. لنفترض أن دراسة الشبكة أعطت مؤشر تقارب شبكة قدره 3% لهبوط الضغط. إذا اختلفت نتيجتا GPU وCPU بنسبة 0.4%، فالفرق ضجيج أمام عدم اليقين الذي تذكره أصلاً، وإعداد GPU مناسب لهذه العائلة. وإذا اختلفتا بنسبة 2.5%، فاختيار الحلّال يكاد يعادل عدم اليقين الكامل للشبكة، وعليك أن تعرف السبب قبل أن تستخدم النتيجة: الدقة، أو مخطط الضغط، أو إعداد متجاهَل. الأرقام توضيحية؛ المهم هو المنطق.
إذا لم تُجرِ قط دراسة شبكة لهذه العائلة، فليس لمقارنة GPU ما تستند إليه، فابدأ بها. والمثال المحسوب في مقال استقلالية الشبكة في هذه المدونة يستغرق بعد الظهر نفسه تقريباً.
أخطاء شائعة كما تبدو على الشاشة
- صفر عند المخرج. يُظهر حساب GPU أن لا كتلة تغادر المجال. هذا قيد في التقرير؛ تحقق باستخدام سطح داخلي قبل أن تعيد بناء الشبكة.
- إزاحة ثابتة في القوة أو الضغط بين حسابي GPU وCPU لحالة مغلقة غير قابلة للانضغاط. إنها فرق في مستوى الضغط، وهي مهمة للقوى على السطوح المفتوحة.
- «تقارب في نصف الوقت»، محسوباً لكل تكرار بينما تضاعف عدد التكرارات. قِس الزمن حتى كمية مطلوبة متقاربة.
- أساس من 16 نواة في دراسة الجدوى. إذا كانت مهمة CPU التي تشغّلها فعلاً تستخدم 128 نواة، فقارن بها.
- نفاد الذاكرة عند التهيئة على شبكة متعددة الوجوه قُدّر حجمها بقاعدة الشبكات سداسية الوجوه. أضف 20 إلى 40%.
- تغييرات صامتة في النماذج آتية من ملف حالة قديم. اقرأ سجلّ الحساب.
ما الذي كنت سأفعله
كنت سأنقل عائلة من الحالات إلى GPU حين تكون الحالات كبيرة، والفيزياء ضمن القائمة المدعومة في إصداري، والعمل يتضمن حسابات كثيرة: مسوحات تصميم، وجريان هواء عابر، وانتقال حرارة مقترن في تجميعات كبيرة، وحسابات تحلّ المقاييس كانت باهظة من قبل. في هذه الظروف تغيّر السرعةُ ما يمكنك دراسته أصلاً، وهذا أهم من الكلفة لكل حالة.
وكنت سأبقى على CPU في الدراسات المنفردة ذات الفيزياء غير المألوفة، وفي الحالات التي تحتاج إلى نماذج خارج القائمة المدعومة، وفي الشبكات الصغيرة التي تعطي فيها موارد CPU معقولة الجواب في ساعة، وفي أي مسار عمل يعيد تشغيل الحالات من حلّال إلى آخر.
وكنت سأستأجر قبل أن أشتري. عقدة GPU واحدة ليوم واحد، وفحص بعد الظهر الموصوف أعلاه على حالة أعرفها جيداً، وسيكون لدي رقم التسريع الخاص بي، مقيساً على طريقي أنا.
إذا كنت تحسب على GPU أصلاً وتريد عيناً ثانية تتحقق من أن النتائج تطابق ما كان يعطيه مسار عملك على CPU، فهذه مراجعة نموذج، وهي من أصغر الخدمات الموصوفة في صفحات الخدمات.
المصادر والمطالعة
- Ansys Fluent User’s Guide, Release 2025 R2: Fluent GPU Solver Limitations
- Ansys Fluent User’s Guide, Release 2026 R1: Fluent GPU Solver Limitations
- Ansys Fluent User’s Guide, Release 2025 R2: Features Supported by the Fluent GPU Solver
- Ansys Fluent User’s Guide, Release 2024 R2: GPU Memory Usage
- SimuTech Group (updated 2026): CPU vs GPU computing, which is better for CFD simulation?
خدمة ذات صلة
مراجعة النماذج والدراسات المخصصة
معرفة ما يدعمه النموذج، وأين يبقى عدم اليقين، وما يحتاج إلى تحقق.
استعرض الخدمات