سؤال

أنا مهتم لمعرفة ما إذا كان أي شخص قد كتب أحد التطبيقات التي تستفيد من GPGPU باستخدام ، على سبيل المثال ، nVidia CUDA.إذا كان الأمر كذلك ، ما هي القضايا التي لم تجد ما المكاسب الأداء هل تحقيق مقارنة مع معيار المعالجة المركزية ؟

هل كانت مفيدة؟

المحلول

لقد تم القيام gpgpu التنمية ATI تيار SDK بدلا من Cuda.أي نوع من كسب الأداء سوف تحصل يعتمد على الكثير من العوامل, ولكن الأكثر أهمية هو الرقمية كثافة.(أي أن نسبة من حساب عمليات الذاكرة المراجع.)

A بلاس المستوى 1 أو بلاس مستوى-2 وظيفة مثل إضافة موجهات اثنين فقط لا 1 الرياضيات العملية كل 3 المراجع الذاكرة ، لذلك ني هو (1/3).هذا هو دائما تشغيل أبطأ مع كال أو Cuda من مجرد القيام على وحدة المعالجة المركزية.السبب الرئيسي هو الوقت الذي يستغرقه نقل البيانات من وحدة المعالجة المركزية والجرافيك مرة أخرى.

عن وظيفة مثل الاتحاد الفرنسي للتنس ، وهناك O(N log N) الحسابات O(N) المراجع الذاكرة ، لذلك ني O(log N).إذا كان N هو كبير جدا ، ويقول 1,000,000 فإنه من المرجح أن يكون أسرع للقيام بذلك على gpu ؛ إذا كان N هو صغير ، يقول 1,000 فإنه يكاد يكون من المؤكد سوف يكون أبطأ.

بالنسبة بلاس من المستوى 3 أو LAPACK وظيفة مثل لو التحلل من مصفوفة أو العثور على القيم الذاتية ، وهناك O( N^3) الحسابات O(N^2) المراجع الذاكرة ، لذلك ني O(N).صغيرة جدا المصفوفات ، أقول N هو عدد قليل من النقاط, هذا سوف لا يزال تكون أسرع في القيام على وحدة المعالجة المركزية ، ولكن كما يزيد ن ، خوارزمية بسرعة يذهب من الذاكرة-ملزمة حساب منضم و زيادة في الأداء على gpu يرتفع بسرعة كبيرة.

أي شيء تنطوي مجمع arithemetic لديه المزيد من الحسابات العددية من الحساب ، والتي عادة ما يضاعف ني ويزيد من أداء gpu.


(المصدر: earthlink.net)

هنا هو أداء CGEMM -- مجمع دقة واحدة مصفوفة مصفوفة الضرب على Radeon 4870.

نصائح أخرى

كنت قد كتبت تافهة التطبيقات ، فإنه يساعد حقا إذا كنت يمكن أن parallize حسابات النقطة العائمة.

وجدت التالية الحال cotaught من قبل جامعة إلينوي أوربانا شامبين أستاذ نفيديا مهندس مفيدة جدا عندما كنت بدأت: http://courses.ece.illinois.edu/ece498/al/Archive/Spring2007/Syllabus.html (يشمل التسجيلات جميع المحاضرات).

لقد استخدمت CUDA عدة خوارزميات معالجة الصور.هذه التطبيقات ، بالطبع ، هي مناسبة بشكل جيد للغاية CUDA (أو أي GPU تجهيز النموذج).

المنظمة البحرية الدولية ، هناك ثلاث مراحل نموذجية عند ترقية خوارزمية CUDA:

  1. الأولي ترقية: حتى مع المعرفة الأساسية CUDA, يمكنك ميناء خوارزميات بسيطة في غضون ساعات قليلة.إذا كنت محظوظا, يمكنك الحصول على عامل من 2 إلى 10 في الأداء.
  2. تافهة التحسينات: وهذا يشمل استخدام القوام إدخال البيانات و الحشو من المصفوفات متعددة الأبعاد.إذا كنت من ذوي الخبرة ، وهذا يمكن أن يتم خلال يوم واحد و قد تعطيك عامل آخر من 10 في الأداء.مما أدى البرمجية لا تزال قابلة للقراءة.
  3. المتشددين التحسينات: وهذا يشمل نسخ البيانات إلى الذاكرة المشتركة لتجنب العالمية الذاكرة الكمون, تحويل التعليمات البرمجية داخل للحد من عدد من استخدام السجلات ، وما إلى ذلك.يمكنك قضاء عدة أسابيع مع هذه الخطوة ، ولكن الأداء مكاسب ليست حقا يستحق ذلك في معظم الحالات.بعد هذه الخطوة سيتم قانون لذلك غموض أن لا أحد يفهم ذلك (بما فيهم أنت).

هذه هي مشابهة جدا إلى تحسين رمز وحدات المعالجة المركزية.إلا أن استجابة GPU إلى تحسينات الأداء هو حتى أقل قابلية للتنبؤ من وحدات المعالجة المركزية.

لقد تم استخدام GPGPU على كشف الحركة (في الأصل باستخدام CG و الآن CUDA) و الاستقرار (باستخدام CUDA) مع معالجة الصور.لقد تم الحصول على حوالي 10-20 X تسريع في هذه الحالات.

من ما قرأت هذه نموذجية إلى حد ما عن البيانات الخوارزميات المتوازية.

في حين ليس لدي أي تجارب عملية مع CUDA حتى الآن, لقد تم دراسة هذا الموضوع و وجدت عددا من الأوراق التي توثق نتائج إيجابية باستخدام واجهات برمجة تطبيقات GPGPU (تشمل جميع CUDA).

هذا ورقة توضح هذه المقالة كيفية قاعدة بيانات ينضم يمكن paralellized من خلال إنشاء عدد من متوازية الأوليات (خريطة, مبعثر, جمع الخ) والتي يمكن دمجها في خوارزمية فعالة.

في هذا ورقة, انطلاق تنفيذ معيار التشفير AES يتم إنشاؤه مع مقارنة سرعة سرية تشفير الأجهزة.

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

لقد نفذت مونت كارلو حساب في CUDA لبعض المالية الاستخدام.الأمثل CUDA هو رمز عن 500x أسرع من "قد حاولت أكثر صعوبة ، ولكن ليس حقا" متعددة الخيوط تنفيذ وحدة المعالجة المركزية.(مقارنة GeForce 8800GT إلى Q6600 هنا).أنها تعرف جيدا أن مونتي كارلو المشاكل محرج بالتوازي مع ذلك.

القضايا الرئيسية التي واجهتها ينطوي على فقدان الدقة بسبب G8x و G9x رقاقة حد IEEE دقة واحدة أرقام النقطة العائمة.مع الافراج عن GT200 رقائق يمكن أن يكون هذا التخفيف إلى حد ما باستخدام الدقة المزدوجة وحدة على حساب الأداء.أنا لم أجربها بعد.

أيضا, منذ CUDA هو C التمديد ، ودمجها في تطبيق آخر يمكن أن يكون غير تافهة.

لقد نفذت الخوارزمية الجينية على GPU و حصلت شكا من سرعة من حوالي 7..مزيد من المكاسب الممكنة مع أعلى الرقمية كثافة شخص آخر أشار.لذا نعم, المكاسب هناك, إذا كان التطبيق صحيح

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

كان مشروع السنة النهائية.استغرق الأمر مني سنة كاملة.

http://www.maths.tcd.ie/~oconbhup/Maths_Project.pdf

لقد نفذت Cholesky التعميل لحل كبيرة معادلة خطية على GPU باستخدام ATI Stream SDK.ملاحظاتي كانت

alt text

حصلت الأداء تسريع تصل إلى 10 مرات.

العمل على نفس المشكلة لتحسين ذلك أكثر من خلال زيادة إلى عدة وحدات معالجة الرسومات.

نعم.لقد نفذت غير الخطية متباين نشر تصفية باستخدام CUDA api.

فمن السهل إلى حد ما ، حيث إنه مرشح يجب أن يكون بالتوازي إعطاء صورة مدخلات.لم واجه العديد من الصعوبات في هذا لأنه فقط المطلوب بسيط النواة.على تسريع كان في حوالي 300x.هذا هو بلدي المشروع النهائي على CS.المشروع يمكن العثور عليها هنا (إنه مكتوب في البرتغالية انت).

لقد حاولت كتابة مومفورد&شاه خوارزمية تجزئة أيضا ، لكن ذلك كان الألم في الكتابة ، منذ CUDA لا يزال في بداية و حتى الكثير من أشياء غريبة تحدث.حتى رأيت على تحسين الأداء من خلال إضافة if (false){} في قانون O_O.

نتائج هذا خوارزمية تجزئة لم تكن جيدة.لقد كان أداء فقدان 20x مقارنة مع وحدة المعالجة المركزية النهج (ومع ذلك, منذ انها وحدة المعالجة المركزية ، مقاربة مختلفة أن yelded نفس النتائج التي يمكن اتخاذها).إنه لا يزال التقدم في العمل ، ولكن unfortunaly غادرت المختبر كنت تعمل على ، لذا ربما يوما ما قد ينهي ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top