الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دروس البرمجه بأستخدام الopenmp

بدأه Ali Al-Zyoud في 17 أغسطس 2009 · 5 رد · 4,669 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

في الحقيقه لقد بدأت بكتابه بعض الدروس عن هذا الموضع في احد المنتديات ولكن حصل مشاكل معينه وسوف أبداء من جديد واكمل هنا .

بسم الله نبداء :

البدايه :

ال OpenMP اختصار لي (open multiprocessor) هي API يعمل على العديد من المنصات ومنها منصت ويندوز يستخدم للبرمجه بأستخدام ال C++ والذي يستخدم لعمل برامج على multicore processor .

يعني لو كان عندك معالج core2 dual واردت ان تستعمل المعالج بقدرته القسوه بحيث توزع عمل البرنامج على وحدتي المعالجه فأنك تحتاج ان تكتب برامجك بأستخدام ال OpenMP

البرامج العاديه المكتوبه بلغه السي تسمى (sequential programs) اي انه مهما كان عدد وحدات المعالجه عندك فانك سوف تستخدم واحد فقط لتنفيذ البرنامج

اما البرامج المكتوبه بمساعدت ال openmp تسمى (parallel programs) اي ان العمل سوف يوزع على جميع المعالجات وبتالي تزداد السرعه والاداء

3
#2

لتفعيل ال OpenMP سوف نقوم بتالي

نختار CLR Console Application (او اي نوع اخر) من الفيجيول ستوديو 2005/2008

post-210374-1250537396_thumb.jpg

الان نقوم بتفعيل خاصيه ال OpenMP

post-210374-1250537498_thumb.jpg

هكذا نستطيع ان نبداء بكتابه برامج بستخدام ال OpenMP

ملاحظه:

1) ال OpenMP مدعوم أصلاً في ال فيجيول ستوديو 2005/2008 فلا داعي لاي تحميل اي برامج أضافيه

2) البرامج التي سوف نقوم بكتابتها سوف تتكون من منطقتين(regions)

1- Sequential region اي انها تنفذ على معالج واحد فقط

2- *Parallel region تنفذ على كل معالج على حدا وبتالي زياده في سرعه المعالجه .

وفي الدرس القادم سوف نقوم بعمل اول برنامج وإن شاء الله سوف تتضح اي امور غير مفهومه واذا وجهتك اي مشكله في التشغيل انا حاضر لتقديم المساعده

تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 17 أغسطس 2009 في 22:32

3
#3

الان لنقوم ببناء أول برنامج بأستخدام ال OpenMP

ملاحظه : ان البرنامج يتيح لنا خاصيه محاكاه اي لو لم تكن تمتلك اكثر من معالج تستطيع عمل محاكاه لاي عدد من المعالجات

أولاً لا بد من أضافه header file لي ال openmp وهو

post-210374-1250537751_thumb.jpg

الان البرنامج ينكون من قسمين parallel و sequential كما قلنا سابقاً

ال parallel region تكتب بداخل pragma خاصه

post-210374-1250537762_thumb.jpg

t#pragma omp parallel تستخدم للكتابه برامج ال parallel بداخلها اما num_threads(2) jتستخدم للمحاكاه معالجين اما اذا كنت تمتلك معالجات core2 duel فلا داعي لجمله المحاكاه .

الان لو قمنا بكتابه اي امر داخل ال parallel region فسوف ينفذ على كل معالج على حدا فلو ادخلنا امر طباعه فسوف يقوم الكمبيوتر بكباعه مرتين لاحظ :

post-210374-1250537772_thumb.jpg

output:

post-210374-1250537782_thumb.jpg

اما لو قمنا بالكتابه في ال sequential region فأن الطباعه تكون سطر واحد .

هكذا ينتهي هذا الدرس الرجاء تطبيق البرنامج بنفسك واذا واجهتك اي صعوبه فالرجاء اخباري .

واذا لم تكن ترغب بأستخدام مكتبات خارجيه :

#include "stdafx.h"

#include "omp.h"

using namespace System;

void main()

{	

#pragma omp parallel num_threads(2)

{

	Console::WriteLine(L"Hello World");

}

Console::ReadKey(true);



}

OpenMP1.rar

تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 17 أغسطس 2009 في 22:37

3 −1
#4

الدرس الثاني :

بعد ان تعرفنا على عمليه تفعيل ال openmp و مناطق ال parallel region الان نبداء بالعمل الحقيقي .

كما نعلم ان core processors تحتوي على عدد معين من المعالجات فكيف فمثلاً core2 dual يحتوي على اثنين (الاول يكون رقمه( 0 rank) والثاني 1) اما لو استخدمنا core2 quad فعدد المعالجات 4 (الاول رقمه 0 الثاني رقمه 1 الثالث رقمه 2 الرابع رقمه 3) . كما تلاحظ فأن العد يبداء من 0 وهذا شيء مهم يجب اخذه بعين الاعتبار عند البرمجه .

الان لننتقل لل Visual C++.NET ولي نشاهد الأوامر التي تبين لنا عدد المعالجات وارقامها .

;()omp_get_num_threads//تحدد عدد المعالجات

;()omp_get_thread_num//تحدد رقم المعالج الحالي

الان سوف نقوم بعمل برنامج وسوف نرى المخرجات

post-210374-1250860680_thumb.jpg

كما شهدنا فهناك فقد قمنا بعمل محاكاه لي 3 معالجات وكانت ارقامها كما حددها البرنامج 0 1 2 وكان هناك ثلاث مخرجات .

ونلاحظ ايضاً ان اي معالج قادر على تحديد عدد معالجات النظام .

ان البرنامج يقوم بعمل نسخه لكل معالج حتى يقوم بتنفيذها على حدا ولا علاقه له بما سيحدث في المعالجات الأخرى .

ان المخرجات لم تكن مرتبه حسب ما شاهدنا وهذا راجع الى ان المعالجات تتنافس على ال resource اي وحدات الحاسوب مثل الشاشه بتساوي بين بعضها وهذا ما يسمه بال racing فلا يمكن توقع الترتيب لانه سوف يختلف كل مره .

post-210374-1250860730_thumb.jpg

وهكذا نكون قد بداءنا العمل الفعلي على openmp

اتمنى ان تكونوا قد استفدتوا من هذا الدرس وانا جاهز لاي سؤال بخصوص هذا الدرس او الدروس السابقه .

3
#5

اخي الكريم هل ممكن ان تساعدني هنا

/index.php?showtopic=221385

#6
aboazoz2004 كتب:

اخي الكريم هل ممكن ان تساعدني هنا

/index.php?showtopic=221385

ان شاء الله اخي الكريم .

مواضيع مشابهة