# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > مبتدی: تفاوت MPI و Multi-Threading در چیست؟

## saeidcd

سلام به همه دوستان 
نميدونم سوالمو جاي درستي پرسيدم يا نه  :متفکر: 
اگه جاي سوالم اشتباهه از همه عذرخواهي ميكنم!  :گیج: 
واقعيتش من خيلي سرچ كردم اما چيز خاصي گيرم نيومد

ميخواستم ببينم mpi چيه؟؟؟؟  :خیلی عصبانی: 
من مفهوم Threading و پياده سازيش رو ميدونم مي خواستم بدونم مفهومش با mpi يكيه؟؟؟؟
اخه هردوتاش درمورد چند  cpu هستش اما تفاوتش چيه؟؟
فرقش تو موازي سازي چيه؟

----------


## lpeiatb

اگه انگلیسیتون خوبه احتمالا این کمکتون کنه:




> If you are considering only a single node with multiple processor then multi-threading is the best way, also the performance is better. And for clusters i.e running a program to span across multiple nodes then MPI is the probably the best way. Also you can embed multi-threading within each MPI processes on these nodes which are running given MPI program.

----------


## mehdi.mousavi

> سلام به همه دوستان  نميدونم سوالمو جاي درستي پرسيدم يا نه  اگه جاي سوالم اشتباهه از همه عذرخواهي ميكنم!  واقعيتش من خيلي سرچ كردم اما چيز خاصي گيرم نيومد 
> ميخواستم ببينم mpi چيه؟؟؟؟  من مفهوم Threading و پياده سازيش رو ميدونم مي خواستم بدونم مفهومش با mpi يكيه؟؟؟؟ اخه هردوتاش درمورد چند  cpu هستش اما تفاوتش چيه؟؟ فرقش تو موازي سازي چيه؟


سلام.
MPI یا Message Passing Interface استانداردی است برای برنامه هایی که ارتباط با اونها از طریق ارسال و دریافت پیام به دیگر Node ها (همون برنامه، اما Instance دیگه ای از اون، روی Physical Machine دیگه ای، در نقطه دیگه از شبکه) میسر هستش. در حالت Multi-Threaded، برنامه در یک نقطه فیزیکی وجود داره و State خودش رو با دیگر Thread های در حال اجرا به اشتراک میذاره. اما در MPI، کنترل State صرفا در اختیار Process ای هستش که روی هر Node اجرا میشه و کسی جز با ارسال پیام، نمیتونه اون State رو تغییر بده یا از از اون آگاه بشه. بیشتر برنامه های MPI از معماری SPMD طبعیت می کنن، معماری ای که در اون وظائف به اجزای کوچکتری تقسیم میشن و هر جزء روی پردازنده ای مجزا بطور همزمان اجرا میشه تا محاسبات سریعتر انجام بشه...

موفق باشید.

----------


## saeidcd

خيلي ممنون از دوستان بخاطر جوابهاتون 
اقاي *mehdi.mousavi* خيلي ممنون

پس طبق گفته شما باهم فرق دارن پس:
ميشه لطف كنيد و بگين چطور ميتونم با  mpi يه مسئله رو  حل كنم يا چطور با mpi  يه الگوريتم رو طراحي كنم؟؟؟؟

بخاطر وقتي كه ميزاريد ممنون

----------


## mehdi.mousavi

> پس طبق گفته شما باهم فرق دارن پس: ميشه لطف كنيد و بگين چطور ميتونم با  mpi يه مسئله رو  حل كنم يا چطور با mpi  يه الگوريتم رو طراحي كنم؟؟؟؟ بخاطر وقتي كه ميزاريد ممنون


سلام.
بله. البته که فرق دارن. برای شروع، می تونید به مقاله Rich Ciapala در مجله MSDN رجوع کنید. اونجا، نحوه استفاده از MPI برای انجام عملیات موازی شرح داده شده. از طرفی، Open MPI پیاده سازی Open Source ای از MPI هستش که از طریق این آدرس در دسترسه که البته، برای کار با اون باید Documentation هاشون مطالعه کنید. اگر مایل باشید نیز می تونید از پیاده سازی MPI در محیط .NET تحت عنوان MPI.NET استفاده کنید.

موفق باشید.

----------


## saeidcd

چندتا مطلب مفيد براي دوستان گذاشتم

https://computing.llnl.gov/tutorials/mpi/
people.sc.fsu.edu/~burkardt/pdf/mpi_course.pdf


MPICH یک پیاده سازی انجام شده از MPI است که دارای امکان شبیه سازی هم می باشد.
دانلود mpich:
ftp://ftp.mcs.anl.gov/pub/mpi/nt/mpich.nt.1.2.5.exe

----------


## saeidcd

من نوشتن برنامه با MPI  رو یاد گرفتم اونو تو کامپایلر C  مینویسم اما وقتی به خط  include mpi.h# میرسه خطا میده    :گریه: 

اصلا نوشتن برنامه تو هر کامپایلر C درسته؟ 
اگه درسته چطور کتابخانه رو میشه اضافه کرد؟
اگه درست نیست چطور میشه برنامه ایی که EXE  رو نداری یا هنوز کامپایل نشده رو تو mpich اجرا کرد؟

----------


## shahmohammadi

سلام.



> include mpi.h#


اين دستور كه درست نيست. درستش اين طوريه:
#include <mpi.h>
اگر هم درست نوشتيد در كد، حتما فايل هاي .h مربوط به mpi رو در پوشه ي include كامپايلر نگذاشتيد.

----------


## saeidcd

> سلام.
> اين دستور كه درست نيست. درستش اين طوريه:
> #include <mpi.h>
> اگر هم درست نوشتيد در كد، حتما فايل هاي .h مربوط به mpi رو در پوشه ي include كامپايلر نگذاشتيد.


ممنون
اره درست نوشتم mpi.h رو اضافه هم كردم اما باز....
بدي كار اينه كه تو لينوكس هم خطاهاي مختلف ديگه ايي رو ميبينم

يعني كسي تاحالا يه برنامه شامل MPI رو اجرا نكرده؟؟؟؟؟؟؟؟؟  :ناراحت:  :ناراحت:  :ناراحت:

----------


## saeidcd

خطاهاي زيادي رو داشت اما.....


تو لینوکس اجرا شد :
برای اجرا تو لینوکس MPICH  رو نصب میکنین و با mpicc  برنامه رو اجرا میکنین

ويندوز هم اجرا شد:
http://www.cs.utah.edu/~delisi/vsmpi/

----------


## sibooy

در این پست هم روش نصب CUDA هم یک مثال از اون رو گذاشتم(برای برنامه نویسی موازی بر روی پردازنده های گرافیکی). هم برنامه نویسی موازی روی پردازنده های چندهسته ای با openMP رو با یک مثال گذاشتم. 
https://barnamenevis.org/showthread.p...7-%D8%A7%DB%8C
دوستان اگر نکته ای آموزشی چیزی در مورد برنامه نویسی موازی با پردازنده های چند هسته ای پردازنده های گرافیکی و چند پردازنده ای بلدید همونجا بذارید.
روش کار با MPI ها جاش اونجا خالیه. اگه کسی آموزشی در اون مورد داره اونجا بذاره تا خلایق استفاده کنن.
یه سوال دوستان. از اونجا که پردازنده های چند هسته ای اینتل از کش L3 اشتراکی استفاده می کنن. می شه با MPI براش برنامه نوشت؟ openMP که خیلی خوب جواب میده چون اساس کارش حافظه اشتراکی هست اما MPI چی؟ اون که با سیستم message passing  کار می کنه  با اونم می شه برای این پردازنده های اینتل برنامه نوشت؟
دوستان اگه توی MPI مطلب آموزشی دارین ممنون می شم که اونو توی اون لینک بالا بذارید داریم مطالب آموزشی مربوط به برنامه نویسی موازی رو جمع می کنیم.

----------


## hadidan

با سلام به دوستان
برای اطلاع بیشتر این لینک مفید هستش
http://hpclab.ir/index.php/84-parallel/119-mpi

----------


## a1281366

با عرض سلام و ادب
سوالی داشتم خدمت دوستان ما چندین سیستم بیکار(idle) داریم که می خواهیم  تحت شبکه و به همراه دیگر سیستم های فعال تعداد 4 نرم افزار سنگین و  پرکاربردمان را؛ به صورت پردازش موازی و حداکثر توان عملیات پردازشی را به  کار بگیریم تا زمان و هزینه مان پایین بیاید حال سوالم این جاست که آیا نرم  افزاری هست که بتواند همه موارد ذکر شده بالا را مدیریت کند؟ ممنون میشم  راهنمایی کنین

----------


## farhad_shiri_ex

> سوالی داشتم خدمت دوستان ما چندین سیستم بیکار(idle) داریم که می خواهیم تحت شبکه و به همراه دیگر سیستم های فعال تعداد 4 نرم افزار سنگین و پرکاربردمان را؛ به صورت پردازش موازی و حداکثر توان عملیات پردازشی را به کار بگیریم تا زمان و هزینه مان پایین بیاید حال سوالم این جاست که آیا نرم افزاری هست که بتواند همه موارد ذکر شده بالا را مدیریت کند؟ ممنون میشم راهنمایی کنین


اگر بخواهید به صورت موازی از توان پردازشی سیستم های خودتون استفاده کنید، البته ذکر این نکته بدیهی است که قطعا باید نرم افزارهایی که می فرمایید، از تکنیک ها موازی سازی پشتیبانی کنند. 
ولی اگر منظورتون استفاده از تکنیکهای سیستم های توزیع شده هست، که خوب خیلی بخوام ساده بگم باید شرایطی را برای هریک از نرم افزارهایی که در هریک از سیستم ها اجرا میکنید تعبیه کنید که بتوانند هرکدام بخشهای متفاوتی از اطلاعات را پردازش کنند و در زمان های مناسب تمامی این پردازش ها توسط هر سیستم در زمان مناسب باهم سینک شوند تا بتوانید از کاربردهای سیستم های توزیع شده استفاده ببرید. 
البته در صورت تمایل به صورت پیغام خصوصی درباره پروژه ای که دارید کمی بیشتر توضیح بدید تا در صورت امکان بیشتر در تعامل باشیم.

----------

