جعبه ابزار پردازش موازی (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
Elapsed time is 17.045922 seconds.
Sending a stop signal to all the labs ... stopped.
در
این حالت ملاحظه میگردد که سرعت اجرای برنامه بهبود یافته است، اما این میزان
بهبود دقیقا دو برابر نیست. دلیل این امر به معماری و ساختار تقسیم کار و پردازش
مربوط می باشد که خارج از بحث این مطلب است. اما برای درک شهودی به طور ساده در
نظر داشت باشید که دو کارگر ساده همزمان به اندازه دو برابر ظرفیت یک کارگر کار نمی
کنند.
|
برای دیدن آخرین مقالات ارسالی به وب سایت
www.gomatlab.com
مراجعه نمایید. |
|
برای عضویت و یا لغو عضویت در خبر نامه
به آدرس |