الجلسة الأولى - Eng . Rami Mahfoud

Download Report

Transcript الجلسة الأولى - Eng . Rami Mahfoud

‫البرمجة التفرعية‬
‫الجلسة األولى‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫البرامج التسلسلية‬
‫جرى تقليديَا بناء وتصميم البرمجيات لتعمل بطريقة تسلسلية‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫صممت ليجري تشغيلها على حواسيب وحيدة المعالج )‪.(Single CPU‬‬
‫تقسم البرامج إلى أجزاء واضحة من التعليمات التسلسلية‪.‬‬
‫يجري تنفيذ التعليمات التسلسلية واحدة تلو األخرى‪.‬‬
‫يجري تنفيذ تعليمة واحدة فقط في نفس اللحظة‪.‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫البرامج التفرعية‬
‫يمكن تبسيط مفهوم الحساب التفرعي بالقول أنه مرتبط باالستخدام‬
‫المتزامن لعدة مصادر حساب من أجل حل مسألة ‪:‬‬
‫•يعتمد النجازه على استخدام عدة معالجات )‪.(Multiple CPUs‬‬
‫•يجري تقسيم المسألة إلى أجزاء منفصلة واضحة ويمكن حلها بشكل مستقل ‪.‬‬
‫ضا تقسيم كل جزء من األجزاء السابقة إلى سلسلة من التعليمات التسلسلية‪.‬‬
‫•يمكن أي ً‬
‫•يجري تنفيذ تعليمات كل جزء بشكل متزامن على عدة معالجات بنفس الوقت‪.‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫أسباب ظهورها‬
‫ظهرت فكرة البرمجة التفرعية من الحاجة إلى تسريع عمليات الحساب‪ ،‬حيث أن البرمجة التسلسلية‬
‫لم تستطع أن تعطي حلول لبعض المسائل(مثل التبؤ الجوي‪ ،‬دراسة حركة األجرام السماوية‪ ،‬فك‬
‫التشفير ‪ )...‬بزمن مقبول‪.‬‬
‫وهذا ال يعني أن المسائل إما أن تكون ذات طبيعة تسلسلية أو ذات طبيعة تفرعية‪ ،‬بل من الممكن أن‬
‫تكون المسألة ذات طبيعة تسلسلية وتفرعية معًا‪ ،‬وعندها نفاضل بين أسلوبي البرمجة للحصول على‬
‫الحل باألسلوب ألمثل‪.‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫خصائص المسائل التفرعية‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫تتمتع المسألة الحسابية المدروسة بعدة مواصفات تعكس ما يلي‪:‬‬
‫القدرة على تجزئة المسألة إلى أجزاء منفصلة من الممكن حلها بشكل متزامن‪.‬‬
‫القدرة على تنفيذ عدة تعليمات بنفس الوقت‪.‬‬
‫حل المسألة بوقت أقل عند استخدام عدة مصادر للحساب مقارنة بحالة استخدام‬
‫مصدر حساب وحيد‪.‬‬
‫تطويرا للحساب التسلسلي وهو محاولة لمحاكاة ما يحدث‬
‫يعتبر الحساب التفرعي‬
‫ً‬
‫في الطبيعة في واقع األمر حيث تجري عدة أحداث مترابطة فيما بينها في نفس‬
‫الوقت بد ً ال من أن تحدث تسلسليًا‪ .‬مثل ( خط تجميع آلي ‪ -‬حركة الطبقات‬
‫المكونة للقشرة األرضية‪) .‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫‪Example: Weather Forecasting‬‬
‫مثال‪ :‬التنبوء الجوي‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫يمكن نمذجة الغالف الجوي بتقسيمه إلى خاليا ثالثية األبعاد وتجري الحسابات‬
‫على مستوى كل خلية بشكل متكرر لمحاكاة عملية مرور الوقت‪.‬‬
‫إذا أخذنا الغالف الجوي المحيط باألرض حتى ارتفاع ‪ 10‬ميل‪ ،‬فيمكن تقسيمه‬
‫إلى خاليا من األبعاد التالية‪:‬‬
‫‪ mile X 1 mile X 1 mile‬يبلغ عدد الخاليا ‪5x 108‬‬
‫إذا افترضنا أن كل عملية حساب تحتاج إلى ‪ 200‬عملية فاصلة عائمة‬
‫‪ floating point operations‬ليتم انجازها فمن أجل مرحلة واحدة من‬
‫مراحل الحساب فإننا نحتاج إلى تنفيذ حوالي ‪ 1011‬عملية فاصلة عائمة‬
‫فبالتالي من أجل التنبوء حول حالة الجو خالل فترة سبعة أيام القادمة على‬
‫شكل فترات يفصل بينها مدة دقيقة واحدة‪ ،‬فإننا نحتاج إلى تنفيذ ‪ 1015‬عملية‬
‫فاصلة عائمة في الثانية‪.‬‬
‫إذا استخدامنا حاسوب قادر على تنفيذ ‪ 10 Gflops‬فإننا نحتاج النجاز‬
‫عمليات الحساب لزمن قدره ‪ 105‬ثانية ‪ (.‬أي ‪ 27‬ساعة )‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫تصنيف الحواسيب التفرعية حسب الذاكرة‬
‫الذاكرة المشتركة‬
‫بيرا‪ ،‬ولكنها‬
‫• تتنوع الحواسيب التفرعية التي تعتمد في عملها على وجود ذاكرة مشتركة تنو ً‬
‫عا ك ً‬
‫تشترك في توفير إمكانية للتعامل مع هذه الذاكرة‪َ ،‬وتعتبر كافة المعالجات فيها هذه الذاكرة كما لو‬
‫أنها فضا ء عا ًما للعناوين‪.‬‬
‫الذاكرة الموزعة‬
‫•‬
‫•‬
‫تشبه النظم التفرعية ذات الذاكرة الموزعة مثيالتها ذات الذاكرة المشتركة من حيث تنوعها ولكنها‬
‫ضا تشترك جميع أشكالها في أنها تتطلب توفير شبكة اتصال للربط بين ذواكر المعالجات‬
‫أي ً‬
‫المختلفة‪.‬‬
‫تتحقق هذه البينية بواسطة الحواسيب متعددة المعالجات ذات الذاكرة الموزعة‪ ،‬أو مجموعة‬
‫حواسيب مرتبطة فيما بينها بواسطة شبكة للوصل(وهو الصنف األكثر انتشارا ً للحواسيب‬
‫التفرعية)‪ .‬وتتصل الحواسيب فيما بينها هنا بأسلوب تبادل الرسائل‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫تصنيف الحواسيب التفرعية حسب الذاكرة‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫أساليب البرمجة التفرعية‬
‫‪Parallel Programming Models‬‬
‫يوجد عدة أساليب للبرمجة التفرعية والتي نذكر منها‪:‬‬
‫• ‪.Threads‬البرمجة باستخدام النياسيب‬
‫• ‪.Message Passing‬البرمجة باستخدام أسلوب تبادل‬
‫الرسائل‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫نموذج البرمجة بواسطة تبادل الرسائل‬
‫‪Message Passing Model‬‬
‫يتميز نموذج البرمجة بواسطة تبادل الرسائل بالميزات التالية‪:‬‬
‫• تمتلك مجموعة من المهام ذاكرة محلية خاصة بها‪ .‬كما يمكن‬
‫لهذه المهام أن تتواجد ضمن نفس الحاسوب أو أن تكون‬
‫موزعة على عدة حواسيب‪.‬‬
‫• تتبادل المهام المعطيات فيما بينها عبر عمليات االتصال‬
‫بواسطة الرسائل المتبادلة‪.‬‬
‫• تتطلب عملية تبادل المعطيات تنفيذ مجموعة من العمليات‬
‫المطلوب تنفيذها من قبل اإلجراءات ‪:‬مثال ً عملية إرسال‬
‫رسالة توفر طرف آخر الستقبال الرسالة‪.‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫نموذج البرمجة بواسطة تبادل‬Message Passing Model
‫الرسائل‬
Eng. rami mahfoud http://irami.im
‫التحقيق البرمجي‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫من وجهة نظر برمجية‪ ،‬يتضمن التحقيق البرمجي ألسلوب البرمجية باستخدام أسلوب تبادل الرسائل إنشاء‬
‫مكتبة برمجية من اإلجرائيات التي يمكن تضمينها ضمن النصوص البرمجية‪ .‬وتترك مسؤولية التفريع بكافة‬
‫أشكالها على عاتق المبرمج‪.‬‬
‫‪ .‬جرى تاريخيًا بناء مكتبات متعددة منذ عام ‪1980‬‬
‫ولقد اتصفت هذه المكتبات باختالفاتها الجوهرية فيما بينها وبصعوبة استخدامها من قبل مطوري تطبيقات‬
‫قابلة للتحميل على منصات عمل مختلفة‪.‬‬
‫تأسس في عام ‪ 1992‬منتدى )‪ Message Passing Interface (MPI‬من أجل تعريف معيار لتحقيق‬
‫أسلوب برمجي تفرعي معتمد على تبادل الرسائل‪. .‬‬
‫ظهر في عام ‪ 1994‬الجزء األول من ‪ . MPI‬أما الجزء الثاني فظهر عام ‪1996‬‬
‫معيارا صناعيًا لتبادل الرسائل لتحل محل كافة التحقيقات البرمجية األخرى لتبادل‬
‫أصبحت ‪ MPI‬اآلن‬
‫ً‬
‫الرسائل‬
‫‪Eng. rami mahfoud http://irami.im‬‬
•
•
•
•
•
•
•
•
•
•
•
•
‫• هناك عدة بيئات برمجة تعمل كتنجيز للمعيار‬
1. Microsoft Cluster compute pack SDK
2. Intel MPI Library
3. MPI .net
4. MPICH .net
5. CHMPI
6. Parsec(PHP and parallel computing for web applications)
7. CXC
8. Erlang
9. JIBU
10. Prism
11. Parallaxis
12. MPI for Delphi
Visual Studio ‫الذي يسمح لنا بتنفيذ البرامج التفرعية تحت بيئة‬Microsoft ‫وسنعمل في المقرر على تنجيز‬
Eng. rami mahfoud http://irami.im
‫تجهيز بئية العمل‬
: ‫• يجب تجهيز الجهاز بالبرامج التالية‬
Microsoft Visual Studio (2010) .1
Microsoft HPC Pack 2008 SDK package .2
Windows 32 bit : sdk_x86.msi
windows 64 bit :sdk_x64.msi
Eng. rami mahfoud http://irami.im
‫بعد تثبيت البرامج السابقة يجب تضمين الملفات الرأسية وملفات‬
‫المكتبات إلى المشروع وذلك كمايلي‪:‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫نختار الخيارات المحدد بالصورة ثم نضغط ‪ok‬‬
‫‪Eng. rami mahfoud http://irami.im‬‬
next ‫تظهر النافذة التالية نختار‬
Eng. rami mahfoud http://irami.im
finish ‫ ونضغط‬Precompiled header ‫نزيل التحديد عن‬
Eng. rami mahfoud http://irami.im
‫ندخل إلى خصائص المشروع كما في الصورة‬
‫‪Eng. rami mahfoud http://irami.im‬‬
) 1 ( windows 64 bit ‫• خاص ب‬
Eng. rami mahfoud http://irami.im
) 2 ( windows 64 bit ‫• خاص ب‬
Eng. rami mahfoud http://irami.im
) 3 ( windows 64 bit ‫• خاص ب‬
Eng. rami mahfoud http://irami.im
Include Directories ‫ وثم‬VC++ Directories ‫ و ثم‬Configuration Properties ‫ثم إلى‬
: ‫ في مجلد الحزمة‬include ‫ والموجودة في المجلد‬MPI ‫نضع في البداية موقع الملفات الرأسية الخاصة بال‬
. ‫ ثم نضع فاصلة منقوطة‬Eng.
C:\Program
HPC Pack 2008 SDK\Include
rami mahfoudFiles\Microsoft
http://irami.im
:‫ سنضيف موقع الملفات المكتبية الموجودة في العنوان التالي‬Library Directories ‫تحت‬
C:\Program Files\Microsoft HPC Pack 2008 SDK\Lib\i386
:(64-bit ‫أو(إذا كان نظام التشغيل‬
C:\Program
Files\Microsoft HPC Pack 2008 SDK\Lib\amd64
Eng. rami mahfoud http://irami.im
Additional Dependencies ‫ في بداية‬msmpi.lib ‫ ونكتب‬Input ‫ نختار‬Linker ‫ثم من‬
Eng. rami mahfoud http://irami.im
:‫التالي لالختبار‬code ‫ضا عنه ال‬
ً ‫ ونكتب عو‬،‫المولد تلقائيًا في الملف المصدر األساسي‬Code ‫نمسح كامل ال‬
#include "stdafx.h"
#include<iostream>
#include<mpi.h>
using namespace std;
int main(int argc, char**argv)
{
int mynode,totalnodes;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&totalnodes);
MPI_Comm_rank(MPI_COMM_WORLD,&mynode);
cout<<"HELLO WORLD FROM PROCESS "<<mynode;
cout<<" of "<<totalnodes<<endl;
MPI_Finalize();
system("pause");
return 0;
}
Eng. rami mahfoud http://irami.im
:‫للمشروع‬Build ‫ثم‬
Eng. rami mahfoud http://irami.im
‫أصبح المشروع اآلن جاهز للتشغيل‪ ،‬يمكن تشغيله على حاسوب محلي لالختبار‪ ،‬أو على عنقود حواسيب‬
‫نذهب إلى خيارات المشروع ثم ‪ Debugging‬كما في الصورة‬
‫‪Eng. rami mahfoud http://irami.im‬‬
‫ثم من‬Run Environment ‫نختار‬:Edit Hpc Node
Eng. rami mahfoud http://irami.im
:Edit Hpc Node ‫نختار‬Run Environment ‫ثم من‬
:‫كمايلي‬Node Selector ‫من النافذة‬Number of processes ‫و‬Head Node ‫نحدد‬
F5
Eng. rami mahfoud http://irami.im
‫ وننفذ بواسطة‬ok ‫ونضغط‬