مفهوم وحدة المعالجة البيانية للأغراض العامة GPGPU

بواسطة أحمد علاء 9/14/2012 3:11:00 AM

ان وحدة المعالجة البيانية للأغراض العامة ( General-purpose computing on graphics processing units (GPGPU او كما تعرف ب GPGP هي تقنية استعمال وحدة المعالجة البيانية GPU التي كانت حصرا تقوم بمعالجة الحسابات من اجل العمليات البيانية بالمعالجة العامة شانها شان وحدة المعالجة المركزية .
فقد كانت وحدة المعالجة المركزية CPU هي التي تقوم بمعالجة الحسابات الكلية فيما مضى وحتى انها كانت تقوم بمعالجة العمليات البيانية من قبل ظهور GPU .

ملاحظة :
ان وحدات المعالجة البيانية GPU تعتبر بحد ذاتها وحوش معالجة فهي تحوي الكثير من انابيب المعالجة الصغيرة على عكس CPU الذي يحوي عددا اقل بكثير وبالتالي جاءت فكرة وحدة المعالجة البيانية للأغراض العامة لكي تستفيد من كلا من CPU& GPU بحيث نستفيد من ميزات كل منهمها في عمليات المعالجة ولا تترك GPU فقط للأغراض البيانية .
و نلاحظ كما في الشكل ان ذاكرة المعالج المركزي CPU تتخاطب مع ذاكرة المعالج البياني GPU .

ذاكرة المعالج المركزي CPU تتخاطب مع ذاكرة المعالج البياني GPU

كما نجد ان المعالج البياني يملك وحدات تنفيذ فقط دون وحدات تحكم وغيره كالتي تملكها CPU

المعالج البياني يملك وحدات تنفيذ فقط دون وحدات تحكم

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

صورة لآلن تورينغ:

آلن تورينغ

وفي العام 1990 ظهرت مكتبة ( أصبحت قياسية فيما بعد ) تحمل اسم OpenGL.
وامسى كل صانع من صناع البطاقات الرسومية Graphics Card ، يعمل implementation خاص به ، يستفيد من قدرات الهاردوير Hardware لتسريع عملية الرسم البياني .
البرامج الرسومية و الألعاب تصيب المعالج بإجهاد كبير ، وعملية نقل البيانات من المعالج إلى الذاكرة الرئيسية إلى البطاقة الرسومية ، تستهلك وقت وجهد ، بل أن النموذج السابق يحمل اسم Fixed-pipeline ، ويعني أن OpenGL كمكتبة رسومية قائمة على أمور ثابتة ومبرمجة مسبقاً ، بحيث تطلب من البطاقة الرسومية تغيير حالة ما .

ظهرت أفكار جديدة لعلاج مشاكل البرامج الرسومية و الألعاب ، وتتمحور حول مبدأ أساسي :
لماذا لا نضع معالج خاص + ذاكرة خاصة للبرامج الرسومية المبنية على OpenGL و أشباهها في مكان خاص وليس ببعيد عن المعالج ؟ فظهر بالتالي الوحدة لمعالجة البيانيات الرسومية Graphics Processing Unit او اختصاراً GPU وهو عبارة عن معالج مركزي خاص للمكتبات الرسومية مثل CG و OpenGL و Direct3D .
يوجد ضمن كرت الشاشة او الاظهار بهدف تقليل عمليات المعالجة المكلفة على وحدة المعالجة المركزية CPU .
وهذا لا يعني الاستغناء عن CPU فمثلا عملية ضرب المصفوفات وعملية معالجة كل بكسل ومعظم العمليات التي تختص في عمليات الغرافيكس امست تعالج في معالج كرت الاظهار لا معالج لوحة الام CPU الذي يتفرغ للعمل لتنفيذ اوامر النظام العامة .

تطورت معالجات GPU بشكل كبير اكثر من CPU للعديد من الاسباب لن نخوض في غمارها اليوم فظهرت لاحقاً فكرة وحدة المعالجة المركزية للأهداف العامة لتستفيد من قوة معالجات كروت الاظهار GPU في المعالجة فبدلا من جعل GPU مخصص فقط لمعالجة عمليات الغرافيكس المتطلبة لم لا يتم الاستفادة منها في جوانب تطبيقية اخرى .
ثم ظهرت فيما بعد الحاجة لمكتبة قياسية تستفيد من العدد الضخم من الأنوية cores وبالتالي تطبيق مبدأ البرمجة المتوازية ، بل والاستفادة من قدرات GPU الحسابية السريعة و الدقيقة ، حتى لو لم يكن التطبيق رسومي .

فقد قام مصنعو البطاقات الرسومية بتطوير قدرات GPU ، ليخدم قطاعات أخرى ، ولعل خطوة شركة انفيديا Nvidia في هذا المجال هي الأبرز من حيث تطوير CUDA وهي معمارية ظهرت على يد شركة انفيديا Nvidia وتعمل على بطاقات انفيديا الرسومية ، و يمكن من خلالها تطوير تطبيقات لا علاقة لها بالرسوميات ( ويمكن استخدامها طبعاً مع التطبيقات الرسومية ) ، وطبعاً يمكن الاستفادة من هذه المعمارية من خلال لغة C ولغات أخرى .

ومن ثم ظهرت مكتبة OpenCL من مختبرات Apple والتي أصبحت الآن تحت عهدة Khronos نفس الجهة التي تشرف على مواصفات OpenGL ، وبالتالي أصبحت مكتبة قياسية يشارك في وضع قياساتها ومن ثم عمل implementation لها ، عدة شركات ضخمة AMD, IBM, Intel, و Nvidia بالإضافة لـ Apple طبعاً .

تتميز OpenCl بقدرتها على العمل على أي قطعة hardware ,التي تسمى Device ، فهي قد تعمل على CPU وتستفيد من ,multi-core CPU .. وقد تعمل على GPU.
علماً أن عدد " أنوية " المعالج المركزي CPU قد تصل لثمانية أنوية أو أقل من هذا أما في ال GPU فأنت أمام عشرات ومئات الأنوية التي تتسابق لخدمتك .

OpenCl و CUDA لهما نفس الهدف تقريباً.
ولكن التوجه الآن هو بدعم OpenCl بشكل كامل ، باعتبارها قياسية وستعمل على أكثر من بطاقة رسومية وعلى أكثر من نظام تشغيل ، بل وحتى على أكثر من لغة برمجية .
بالتالي أصبحنا بغنى عن التطفل على مبرمجي الرسوميات واستخدام أدواتهم مثل لغة GLSL أو HLSL لاستغلال قوّة GPU في أمور غير رسومية ، بل هناك ما يسمى بـ kernel في OpenCl وهي لغة خاصة صممت لهذا الغرض ( مبنية على مواصفات لغة سي).

المصدر