OpenCL في المهام اليومية

تحدثنا مؤخرًا عن HSA وأثناء مناقشة مزايا النهج الجديد لبناء أجهزة الكمبيوتر الشخصية ، تطرقنا إلى موضوع مثير للاهتمام مثل GPGPU - الحوسبة للأغراض العامة على مسرع الرسومات. اليوم ، توفر مسرعات AMD للفيديو إمكانية الوصول إلى مواردها باستخدام OpenCL ، وهو إطار يوفر نظامًا متوازيًا بسيطًا وبسيطًا نسبيًا وقابل للبرمجة.


اليوم ، يتم دعم تقنيات OpenCL من قبل جميع اللاعبين الرئيسيين في السوق: القدرة على توفير البرامج مع إمكانية الوصول إلى التسارع "المتقدم" (مجانًا أيضًا ، نظرًا لأن OpenCL لا يعني أي حقوق ملكية أو حقوق ملكية) من الواضح أنها تستحق ذلك ، ويستفيد الجميع من تعددية واجهات برمجة التطبيقات هذه الذي ينفذ دعم OpenCL في منتجاتهم.

اقرأ المزيد عن المكان الذي يمكنك فيه مقابلة OpenCL في الحياة اليومية اليوم ، وكيفية تسريع برامج المكتب العادية والفرص التي تفتحها للمطورين اليوم وسنتحدث.

GPGPU و OpenCL وقليل من التاريخ


بالطبع ، ليست OpenCL هي الطريقة الوحيدة لتنفيذ حوسبة GPU العامة. بالإضافة إلى OpenCL ، هناك CUDA و OpenACC و C ++ AMP في السوق ، ولكن أول تقنيتين شائعتان ومعروفتان حقًا.

نفس الأشخاص الذين أعطوا تقنيات OpenGL و OpenAM للعالم: مجموعة Khronos ، كانوا يطورون معيار OpenCL. العلامة التجارية OpenCL نفسها مملوكة لشركة Apple ، ولكن لحسن الحظ للمبرمجين والمستخدمين حول العالم ، هذه التقنية ليست مغلقة أو مرتبطة بمنتجات شركة "التفاح". بالإضافة إلى Apple ، يتضمن Khronos Goup عمالقة السوق مثل Activision Blizzard و AMD و IBM و Intel و NVidia وعشرات الشركات الأخرى (بشكل رئيسي مصنعي حلول ARM) التي انضمت إلى الكونسورتيوم لاحقًا.

إلى حد ما ، تتشابه OpenCL و CUDA من الناحية الإيديولوجية والنحوية ، والتي استفاد منها المجتمع فقط. بسبب تشابه بعض الأساليب والأساليب ، من الأسهل على المبرمجين استخدام كلتا التقنيتين ، للتبديل من الأجهزة "المغلقة" و NVidia CUDA إلى العالمية والعمل في كل مكان (بما في ذلك وحدات المعالجة المركزية العادية متعددة النواة ، وأجهزة الكمبيوتر الفائقة القائمة على بنية CELL) OpenCL .

OpenCL في الاستخدام اليومي


الآن ستفكر ، "نعم ، سوف يتحدثون عن الألعاب والفوتوشوب." لا ، OpenCL قادر على تسريع الحوسبة بما يتجاوز الرسومات فقط. أحد أكثر التطبيقات شيوعًا التي تستخدم إمكانيات GPGPU هو ... مجموعة مكتب عبر منصة LibreOffice. ظهر دعم OpenCL فيه عام 2014 ويستخدم لتسريع العمليات الحسابية في مدير جدول Calc.

فيما يلي مقارنة مرئية لأداء النظام مع AMD A10-7850K مع لب الرسومات R7 و Intel Core I5 ​​مع HD4600 على اللوحة:



في الاختبارات التركيبية ، يتفوق نفس AMD A10-7850K في الحوسبة غير المتجانسة باستخدام OpenCL على ضعف i5-4670K / 4690 تقريبًا :


بالمناسبة ، في العلوم ومجالاتها التطبيقية ، هناك الكثير من المهام التي تتحول تمامًا إلى معالجات ناقلات مسرعات الفيديو وتسمح لك بإجراء حسابات بعشرات المرات ومرات أسرع من وحدة المعالجة المركزية.

على سبيل المثال ، أقسام مختلفة من الجبر الخطي. مضاعفة المصفوفات والمصفوفات هو ما تفعله وحدات معالجة الرسومات كل يوم ، باستخدام الرسومات. في هذه المهام ، ليس لديهم عمليا على قدم المساواة ، لأنه تم شحذ الهندسة المعمارية الخاصة بهم لحل مثل هذه المشاكل لسنوات.

وهذا يشمل أيضًا تحويل فورييه السريع وكل ما يرتبط به: حل المعادلات التفاضلية المعقدة بطرق مختلفة. بشكل منفصل ، يمكننا تمييز مشاكل الجاذبية للأجسام Nالتي تستخدم لحساب الديناميكا الهوائية والهيدرولوجية ونمذجة السوائل والبلازما. يكمن تعقيد الحسابات في حقيقة أن كل جسيم يتفاعل مع الآخرين ، وأن قوانين التفاعل معقدة للغاية ، ويجب إجراء الحسابات بالتوازي. لمثل هذه المهام ، فإن قدرات OpenCL و AMD GPU مناسبة تمامًا ، مثل الحوسبة المتوازية مع العديد من الأشياء وتم حلها بنجاح على المعالجات من هذا النوع كل يوم: في تظليل البكسل .

غالبًا ما تستخدم الشبكات المنظمة في الرسومات النقطية. غير منظم - في الحسابات في مجال الديناميكا المائية وفي الحسابات المختلفة مع العناصر التي تحتوي رسومها البيانية على أوزان مختلفة. الاختلافات بين الشبكات المنظمة وغير المنظمة في عدد "الجيران" لكل عنصر: فالشبكات المنظمة لها نفس الاختلاف ، والشبكات غير المنظمة لها اختلافات مختلفة ، ولكن كلاهما يتناسب تمامًا مع قدرة OpenCL على تسريع الحسابات. الصعوبات في نقل الحسابات هي رياضية بشكل رئيسي. أي أن المهمة الرئيسية للمبرمج ليست فقط "كتابة" عمل النظام ، ولكن أيضًا تطوير وصف رياضي ينقل البيانات إلى قدرات الأجهزة باستخدام OpenCL.

منطق اندماجي (ينطبق أيضًا حساب التجزئة) ، طرق مونتي كارلو- التي يتم توجيهها بشكل جيد إلى GPU. الكثير من وحدات الحوسبة والأداء العالي في الحوسبة المتوازية هي التي تسرع هذه الخوارزميات حقًا.

ما الذي يمكن تسريعه باستخدام OpenCL ووحدات معالجة الرسومات القوية؟


ابحث في طريق العودة. حسابات الرسم البياني والبرمجة الديناميكية: الفرز واكتشاف التصادم (الاتصال والتقاطع) ، وإنشاء الهياكل المنتظمة ، ومجموعة متنوعة من خوارزميات الاختيار والبحث. مع بعض القيود ، لكنها تصلح لتحسين وتسريع عمل الشبكات العصبية والهياكل ذات الصلة ، ولكن هنا ، من المرجح أن تكون الهياكل العصبية "باهظة الثمن" للمحاكاة الافتراضية ، ومن الأفضل استخدام حلول FPGA. إن عمل آلات الحالة المحدودة (التي يتم استخدامها بالفعل في العمل مع وحدة معالجة الرسومات ، على سبيل المثال ، عندما يتعلق الأمر بضغط / إلغاء ضغط الفيديو أو عمل البحث عن العناصر المتكررة) ممتاز.

OpenCL مقابل CUDA


إن المقارنة المباشرة بين أداء OpenCL و CUDA لا معنى له. أولاً ، إذا قارناها على بطاقات فيديو AMD و NVidia ، فإن محولات فيديو AMD ستفوز في سباق تقريبي لقدرات الحوسبة: معجلات NVidia الحديثة لديها عدد من قيود الأداء بتنسيق FP64 الذي قدمته NVidia نفسها من أجل بيع بطاقات فيديو "احترافية" لـ الحوسبة (سلسلة Tesla و Titan Z). سعرها أعلى بشكل لا مثيل له من نظيراتها من FLOPS استنادًا إلى حلول AMD وبطاقاتها "ذات الصلة" في خط أرقام NVidia ، مما يجعل المقارنة معقدة إلى حد ما. يمكنك أن تأخذ في الاعتبار الأداء لكل واط أو الإنتاجية مقابل الدولار ، ولكن هذا لا علاقة له تقريبًا بالمقارنة النقية لقوة الحوسبة: "FLOPS بأي ثمن" يتناسب بشكل ضعيف مع الوضع المالي الحالي ،وفيما يتعلق بالأداء مقابل الدولار ، لا تزال "النسخة القديمة" 7970 غيغاهرتز (المعروفة أيضًا باسم R9 280X) واحدة من أكثر بطاقات الفيديو ربحية.

ثانيًا ، يمكنك محاولة مقارنة OpenCL و CUDA على بطاقة فيديو من NVidia ، لكن NVidia نفسها تطبق OpenCL من خلال CUDA على مستوى السائق ، لذلك ستكون المقارنة غير نزيهة إلى حد ما لأسباب واضحة.

من ناحية أخرى ، إذا كنت لا تأخذ في الاعتبار الأداء فقط ، فيمكن إجراء بعض التحليل.

يعمل OpenCL على قائمة من الأجهزة أكبر بكثير من NVidia CUDA. تقريبًا جميع وحدات المعالجة المركزية التي تدعم مجموعة تعليمات SSE 3 ومسرعات الفيديو من Radeon HD5xxx و NVidia GT8600 إلى أحدث Fury / Fury-X و 980Ti / Titan X و APU من AMD و Intel مدمجة للرسومات - بشكل عام ، يمكن لأي جهاز حديث تقريبًا مع العديد من النوى الاستفادة من هذه التكنولوجيا.

إن ميزات تنفيذ CUDA و OpenCL (بالإضافة إلى الوثائق المعقدة إلى حد ما ، حيث أن البرمجة المتوازية ككل بعيدة عن منطقة التطوير الأسهل) ، تنعكس إلى حد ما في قدرات وأدوات تطوير محددة ، وليس في مجال الإنتاجية.

على سبيل المثال ، لدى OpenCL بعض مشاكل تخصيص الذاكرة بسبب "وثائق OpenCL غير واضحة للغاية هنا".

في نفس الوقت ، CUDA أقل شأنا من OpenCL في مجال مزامنة التدفقات - البيانات ، التعليمات ، الذاكرة ، أي شيء. بالإضافة إلى ذلك ، باستخدام OpenCL ، يمكنك استخدام قوائم الانتظار والتعليمات الخارجة عن الطلب ، ولا تزال CUDA تعرف فقط كيفية الطلب. من الناحية العملية ، يتجنب هذا وقت تعطل المعالج أثناء انتظار البيانات ، ويكون التأثير أكثر وضوحًا ، كلما زاد غطاء المعالج وزاد الفرق بين سرعة الذاكرة وسرعة وحدات الحوسبة. باختصار: كلما زادت القوة التي تخصصها ضمن OpenCL ، كلما زادت الفجوة في الأداء. سوف تتطلب CUDA كتابة كود أكثر تعقيدًا لتحقيق نتائج قابلة للمقارنة.

أدوات التطوير (المصحح ، المحلل ، المترجم) CUDA أفضل إلى حد ما من تلك المتشابهة في OpenCL ، لكن CUDA تنفذ API من خلال C ، و OpenCL من خلال C ++ ، مما يبسط العمل مع البرمجة الموجهة للكائنات ، في حين أن كلا الإطارين يكثران مع "المحلية »الحيل والقيود والميزات.



نهج نفيديا في هذه الحالة يشبه إلى حد كبير طريقة عمل Apple. حل مغلق ، مع مجموعة كبيرة من القيود والقواعد الصارمة ، ولكن تم تحسينه جيدًا للعمل على أجهزة معينة.

يوفر OpenCL أدوات وقدرات أكثر مرونة ، ولكنه يتطلب مستوى أعلى من التدريب من المطورين. يجب تشغيل الكود العام على OpenCL النقي على أي جهاز يدعمه ، ولكن في الوقت نفسه "محسّن" لحلول معينة (على سبيل المثال ، مسرعات الفيديو AMD أو معالجات CELL) سيعمل بشكل أسرع.

Source: https://habr.com/ru/post/ar388421/


All Articles