يمكننا المعيار مدى سرعة CUDA أو OpenCL بالمقارنة مع وحدة المعالجة المركزية الأداء ؟

StackOverflow https://stackoverflow.com/questions/4268181

سؤال

كيف أسرع بكثير يمكن أن خوارزمية على CUDA أو OpenCL كود تشغيل مقارنة مع عام واحد معالج core ؟ (النظر الخوارزمية هو مكتوب و الأمثل لكل من وحدة المعالجة المركزية CPU و GPU الهدف).

وأنا أعلم أنه يعتمد على كل بطاقة الرسومات وحدة المعالجة المركزية ، ولكن أقول واحدة من أسرع وحدات معالجة الرسومات NVIDIA و (جوهر واحد من ألف) Intel i7 ?

وأنا أعلم أنه يعتمد أيضا على نوع من الخوارزمية.

أنا لست بحاجة إلى إجابة صارمة ، ولكن شهدت أمثلة مثل: من أجل معالجة الصور باستخدام خوارزمية الدقة المزدوجة العائمة نقطة و 10 عمليات لكل بكسل أخذت أول 5 دقائق و الآن يعمل في x ثانية باستخدام هذه الأجهزة.

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

المحلول

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

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

في حين أن هناك بعض الحالات التي يكون فيها هذا لا يهم (سواء صغيرة أو هناك مرحلة ثانية الحساب أن يقلل من زيادة النتيجة في الحجم) ، وعادة المرء أن نقل النتائج و البيانات الأولية.

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

الى حد كبير نفس الشيء ينطبق على الجمع بين نتائج مختلف بطاقات الجرافيك.

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

نصائح أخرى

سؤالك بشكل عام ، يصعب الإجابة عليه ؛ هناك ببساطة العديد من المتغيرات المختلفة التي تجعل من الصعب إعطاء إجابات دقيقة أو عادلة.

والجدير بالذكر ، تقارن كلا 1) اختيار الخوارزمية 2) الأداء النسبي للأجهزة 3) القدرة على تحسين التحويلات البرمجية 4) اختيار لغات التنفيذ و 5) كفاءة تنفيذ الخوارزمية ، كل ذلك في نفس الوقت ...

لاحظ أنه ، على سبيل المثال ، قد تكون الخوارزميات المختلفة مفضلة على وحدة المعالجة المركزية GPU vs ؛ وينقل البيانات من وإلى وحدة معالجة الرسومات في التوقيت أيضًا.

لدى AMD دراسة حالة (عدة ، في الواقع) في أداء OpenCL لرمز OpenCL الذي ينفذ على وحدة المعالجة المركزية وعلى وحدة معالجة الرسومات. هنا هو واحد مع نتائج الأداء لمتجه المصفوفة المتفرق.

انا اعتقد ان هذا مقدمة الفيديو إلى OpenCl يعطي إجابة جيدة على سؤالك في الحلقة الأولى أو الثانية (لا أتذكر). أعتقد أنه كان في نهاية الحلقة الأولى ...

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

يعتمد ذلك كثيرًا على الخوارزمية وكيف يمكن أن يكون التنفيذ فعالًا.

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

على سبيل المثال ، 1581.1 GFLOPS لـ GTX580 مقابل 107.55 GFLOPS لـ i7 980xe. لاحظ أن تصنيف GTX580 هو لدقة واحدة. أعتقد أنك بحاجة إلى خفض ذلك بعامل 4 لفئة Fermi Non-Tesla للوصول إلى التصنيف الدقيق المزدوج. لذلك في هذه الحالة ، قد تتوقع حوالي 4x.

تحذير حول سبب قيامك بعمل أفضل (أو ترى النتائج التي تدعي سرعات أكبر بكثير):

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

  2. الاستخدام الذكي للذاكرة (ذاكرة الملمس وما إلى ذلك) والتي يمكن أن تتيح لك القيام بعمل أفضل من النطاق الترددي المعلن عنه.

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

  4. التفاح مع المقارنات البرتقالية. إن مقارنة وحدة معالجة الرسومات العلوية مقابل وحدة المعالجة المركزية منخفضة الطرف غير عادلة بطبيعتها. الرفض هو أن وحدة المعالجة المركزية عالية تكلفة أكثر بكثير من وحدة معالجة الرسومات الراقية. بمجرد الانتقال إلى مقارنة GFLOPS/$ أو GFLOPS/WATT ، يمكن أن تبدو أكثر ملاءمة ل GPU.

لقد رأيت أرقام تتراوح من 2x إلى 400x. أعلم أيضًا أن وحدات معالجة الرسومات المتوسطة المدى لا يمكن أن تتنافس مع وحدات المعالجة المركزية عالية المدى في حساب مزدوج الدقة-MKL على Xeon 8 نواة سيكون أسرع من CULA أو Cublas على وحدة معالجة الرسومات 300 دولار.

Opencl هو أبطأ من قصوى من كودا.

يوجد جناحًا جديدًا يسمى SHOC (الحوسبة غير المتجانسة القابلة للتطوير) من Oak Ridge National Lab و Georgia Tech على كل من تطبيقات OpenCl و CUDA للعديد من النواة المهمة. يمكنك تنزيل الجناح من http://bit.ly/shocmarx. يتمتع.

__kernel void vecAdd(__global float* results )
{
   int id = get_global_id(0);
}

يمكن أن تفرخ رمز kernel هذا 16m مؤشرات ترابط على وحدة معالجة الرسومات 60 $ R7-240 في 10 مللي ثانية.

هذا يعادل 16 إبداعات الخيط أو مفاتيح السياق في 10 نانو ثانية. ما هو توقيت وحدة المعالجة المركزية ذات 810 دولارًا من 8150 دولارًا؟ إنه موضوع واحد في 50 نانو ثانية لكل قلب.

كل تعليمات تمت إضافتها في هذه النواة هي فوز ل GPU حتى يجعل المتفرعة.

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