جعبه ابزار پردازش موازی (Parallel Computing Toolbox)

379 views
Skip to first unread message

Amir Hosein Zamanian

unread,
Aug 25, 2011, 7:14:32 AM8/25/11
to

جعبه ابزار پردازش موازی (Parallel Computing Toolbox)

همانگونه که در مقاله بهینه نویسی اسکریپت در MATLAB ذکر شد، یکی از راه های افزایش سرعت محاسبات در این نرم افزار استفاده از جعبه ابزار پردازش موازی یا Parallel Computing می باشد. با استفاده از این جعبه ابزار می توانید شما انجام یک سری از کارها را تقسیم نمایید و به جای اینکه تمام کارها را به یک کارگر (Worker) واگذار نمایید، هر بخش را به یک کارگر محول نمایید. در MATLAB این کارگرها در ساده ترین حالت هسته های CPU و در حالت پیچیده تر هسته های کامپیوتر های متصل شده به هم می باشند.

به عنوان نمونه اگر سیستم کامپیوتر شما یک سیستم دو هسته ای می باشد. در حالت عادی تمامی عملیات انجام شده فقط در یک هسته (کارگر) انجام می گردد. اما با استفاده از جعبه ابزار پردازش موازی میتوان از هر دو هسته استفاده نمود، در این حالت به طور همزمان در هر یک از هسته ها دو عملیات به صورت مجزا از یکدیگر انجام شده و سرعت پردازش و اجرای برنامه تقریبا دو برابر می گردد.

برای استفاده از این جعبه ابزار کافی است بعد از اطمینان از نصب بودن این جعبه ابزار، حلقه های for برنامه خود را به parfor تبدیل نمایید. حلقه ها معمولاً زمان بر ترین مراحل محاسبات را در خود جای می دهند. نکته ای که در استفاده از parfor وجود دارد این است که در حلقه تکرار مورد نظر برای استفاده از parfor باید تکرارهای شما به یکدیگر وابسته نباشند. به عنوان نمونه در حل مساله پرتابه (یا تحلیل جریان) اگر لازم باشد سرعت (یا جریان) با استفاده از تکرارهای زمانی قبلی محاسبه شود، در این حالت استفاده از parfor غیر ممکن خواهد بود. برای توضیحات بیشتر در این زمینه به راهنمای MATLAB مراجعه گردد.

تنها نکته باقیمانده در این حالت تعریف تعداد کارگرها می باشد. تعیین تعداد کارگرها به سخت افزار های شما و نحوه اتصال آنها به یکدیگر بستگی دارد. در هر صورت برای استفاده از CPU های یک سیستم چند هسته ای معمولاً تعداد کارگرها برابر تعداد هسته ها در نظر گرفته می شود. این تعریف کارگر ها در این جعبه ابزار به کمک تابع matlabpool انجام می شود.

لذا اگر برنامه ساده ای در حالت عادی به صورت زیر صورت پذیرد.

کد:

clear
S=zeros(8,1000);

tic

for k = 1:8
    S(k,:) = eig(rand(1000));
end

toc


پیغام زیر در خط فرمان اجرا می گردد.

نقل قول :Elapsed time is 23.619181 seconds.

با استفاده از جعبه ابزار پردازش موازی می توان برنامه را به صورت زیر برای یک سیستم دو هسته ای بهینه نمود.

کد:

clear
S=zeros(8,1000);

matlabpool open local 2
tic

parfor k = 1:8
    S(k,:) = eig(rand(1000));
end

toc
matlabpool close


با اجرای برنامه فوق بر روی کامپیوتر من اجرای برنامه با پیغام زیر رو به رو گردید و سرعت محاسبات تقریبا دو برابر بیشتر گردید.

نقل قول :Starting matlabpool using the 'local' configuration ... connected to 2 labs.

Elapsed time is 17.045922 seconds.
Sending a stop signal to all the labs ... stopped.


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


برای دیدن آخرین مقالات ارسالی به وب سایت www.gomatlab.com مراجعه نمایید.
اگر این مقاله را سودمند یافتید آنرا برای دوستان خود بفرستید.


برای عضویت و یا لغو عضویت در خبر نامه به آدرس
http://groups.yahoo.com/group/gomatlab
یا
 
https://groups.google.com/group/gomatlab
مراجعه کنید.



Reply all
Reply to author
Forward
0 new messages