ما هي الوظيفة الأكثر تافهة من شأنها أن يتم حسابها من GPU؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

أنا فقط بدأت تعلم opencl. أحاول أن أشعر بأي مكاسب للأداء تتوقع عند نقل الوظائف / الخوارزميات إلى GPU.

النواة الأساسية المعطاة في معظم البرامج التعليمية هي نواة تأخذ صفيفتين من الأرقام وتسليم القيمة في الفهارس المقابلة وتضيفها إلى صفيف ثالث، مثل ذلك:

__kernel void 
add(__global float *a,
    __global float *b,
    __global float *answer)
{
    int gid = get_global_id(0);
    answer[gid] = a[gid] + b[gid];
}

__kernel void
sub(__global float* n,
    __global float* answer)
{
    int gid = get_global_id(0);
    answer[gid] = n[gid] - 2;
}

__kernel void
ranksort(__global const float *a,
         __global float *answer)
{
  int gid = get_global_id(0);
  int gSize = get_global_size(0);
  int x = 0;
  for(int i = 0; i < gSize; i++){
    if(a[gid] > a[i]) x++;
  }
  answer[x] = a[gid];
}

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

ما أتساءله هو ما سيكون المثال الأكثر تافهة حيث تتوقع تسريع كبير عند استخدام Kernel OpenCL بدلا من وحدة المعالجة المركزية؟

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

المحلول

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

للبدء، أود أن أوصي بالبدء مع Pycuda لأنه بسيط إلى حد ما للبدء لأنه يوفر مستوى عال للغاية من التجريد وسيسمح لك القفز بسرعة كبيرة. تحقق من هذه الدورة على الحوسبة الموازية باستخدام CUDA من جامعة إلينوي http://courses.ece.illinois.edu/ece498/al/ عندما تكون مستعدا للغوص في أبعد من ذلك.

نصائح أخرى

يعتمد على تعريف تافهة. في رأيي، سيكون منتج ماتريكس مصفوفة، لأنه لديه O(3)/O(2) حساب نسبة الذاكرة. من المرجح أن تستفيد الخوارزميات التي تظهر نسبا مماثلة، من تنافسها على GPU.

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

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

بطبيعة الحال، تعتمد GPUs على وجود خيوط كافية لإخفاء زمن البيانات، لذلك يجب أن يكون حجم مجموعة عملك المحلية كبيرة إلى حد ما (يقول 256 أو 512) ويجب أن يكون حجم مجموعة عملك العالمي كبيرا جدا (مثل مئات الآلاف) لتكون فعالة، ولكن هذا نوع من النقطة!

أعرف أن السؤال قديم جدا ولكن ... لقد وجدت أن حسابات مجموعة ماندلبروت هي الأمثل تماما ل GPU. لديك ناقلات المدخلات المعقدة (Float2) وناتج العددية (int) وستحصل على مئات العمليات لكل متجه المدخلات في المتوسط.

يمكن استخدامه كتطبيق مثال جيد، كما هو ...

  • لديه مجموعة بيانات مدخلات ثنائية الأبعاد (بحساب صورة)
  • يمكنك شرح واجهات الموجة ولماذا المعالجة الثانية الأبعاد مفيدة في بعض الحالات
  • يوضح أنواع بيانات ناقلات
  • تنتج صورة، والتي يتم التحقق منها بسرعة عن طريق عيون الإنسان (تصحيح الأخطاء)
  • يمكن توسيعها بسهولة من خلال: تعيين اللون (__constant)، ومعالجة float4 بدلا من float2 (التحسين)، وإنتاج ناقلات الإخراج INT4 (R، G، B، أ) ناقلات الإخراج (التحسين). خطوات الحد (RGBA) => (RGB)
  • المعرفة الرياضيات اللازمة مقبولة (صيغة بسيطة)

التحيات، ستيفان

بعد الضرب المصفوفة، أود أن أقول إنتفيد الصورة (مثل Blur، Denoising، إلخ). الدفع برنامج AMD التعليمي.

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

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