نرم‌افزار Matlab به عنوان ابزاری شناخته‌شده برای انجام محاسبات علمی، طراحی‌ها و شبیه‌سازی‌های فنی و مهندسی و به عنوان یک محیط ساده، اما منعطف برای انجام محاسبات ریاضی، کاربرد وسیعی در محیط‌های دانشگاهی و صنعتی یافته و جایگاه خود را به عنوان یک محیط عملیاتی و اسکریپت‌نویسی ساده اما قدرتمند در محافل علمی به خوبی باز کرده است. این نرم‌افزار در طی مدت مدیدی، از دهه ۱۹۷۰ در دانشگاه نیومکزیکو تاکنون که توسط Mathworks در کالیفرنیا عرضه می‌‌شود، مراحل مختلف پیشرفت و تکامل را پیموده است و نسخه‌های نهایی این نرم‌افزار که امروزه با قیمت پایه ۱۵۰۰ دلار با شش Toolbox پایه عرضه می‌‌شود (البته نسخه کامل آن حداکثر ۵ دلار هزینه در بر دارد)، امکانات بسیار پیشرفته‌ای را در اختیار کاربر می‌‌گذارد. مهم‌ترین ویژگی این نرم‌افزار، امکان تهیه و استفاده از ماجول‌هایی تحت عنوان Toolbox است که به صورت جدا قابل‌سفارش و خریداری است. یکی از این جعبه‌ افزار‌ها، Distributed Computing Toolbox است (در نسخه‌های جدید، عنوان این ابزار به Parallel Computing Toolbox تغییر یافته است) که امکاناتی برای انجام محاسبات در Matlab را به صورت موازی و توزیع شده در اختیار کاربر می‌‌گذارد. در این مقاله، امکانات و چند برنامه نمونه در این محیط را بررسی خواهیم کرد.

موتور پردازش توزیع یافته Matlab

ابـــــزار مــحاسبـــــات مـــوازی نـــــرم‌افــــزار Matlab (Matlab Parallel Computing Toolbox) و نــــــــــرم‌افـــــــــزارMatlab Distributed Computing Server امکان تقسیم اجرای کدهای نیازمند زمانِ اجرای بالا روی مجموعه‌ای از کامپیوترهای مختلف، کامپیوترهای چند پردازنده‌ای یا پردازنده‌های چند هسته‌ای را فراهم می‌‌سازد. این مجموعه ابزارها با استفاده از امکاناتی چون حلقه‌های For موازی، آرایه‌های توزیع یافته، الگوریتم‌های عددی موازی و توابع مبادله پیام، محیطی ساده اما قدرتمند را برای انجام محاسبات علمی به صورت موازی و بدون نیاز به شناخت عمیق از رشته‌های پردازشی (thread)، مبادلات داده‌ای و برنامه نویسی‌های پیچیده موازی به ارمغان آورده است. در این مجموعه، عملیات بزرگ و سنگین محاسباتی به عنوان Job شناخته می‌‌شوند که خود از زیر دستوراتی با نام Task تشکیل شده‌اند.
در این مجموعه، ماشینی که در آن Job‌ها و Task‌ها تعریف شده و مورد استفاده قرار می‌‌گیرند، Matlab Client نامیده می‌‌شود. در بیشتر موارد، ماشین کلاینت همان ماشینی است که کاربر در آن به برنامه‌نویسی (در اصل، اسکریپت نویسی) با دستورات Matlab می‌‌پردازد. این ماشین، با استفاده از Matlab Parallel Computing Toolbox به تعریف و برقراری رابطه با Job‌ها و ‌Task‌ها می‌‌پردازد. در این میان، ماجول MATLAB Distributed Computing Server وظیفه اجرای وظایف و انجام عملیات تبادل داده بین آن‌ها و ماشین کلاینت را برعهده داشته و در هسته نسخه‌های اخیر Matlab موجود است. قسمتی از موتور پردازش توزیع یافته Matlab که Job Manager نام دارد، وظیفه کلی ایجاد هماهنگی بین وظایف و مبادلات داده‌ای مربوطه و مقادیر بازگردانده شده آن‌ها را بر عهده دارد. اما وظیفه اصلی این ماجول، ارسال وظایف به ماشین‌های در حال اجرای Matlab (این ماشین‌ها، ماشین‌های کارگر یا Matlab Worker خوانده می‌‌شوند) و بازگرداندن نتایج از آن‌ها است.
در این مجموعه کاربر می‌‌تواند از Job Manager اصلی شرکت Mathworks موجود در نرم‌افزار Matlab استفاده کرده یا سیستم‌هایی نظیر Microsoft Windows HPC Server یا Platform LSF را به کار گیرد. شکل‌های ۱، ۲ و ۳ دیاگرام معماری سیستم پردازش موازی Matlab و انواع ترکیب‌های آن را نشان می‌‌دهند.تنظیمات موتور پردازش موازی نرم‌افزار Matlab در این سیستم، تعیین‌کننده معماری موجود سیستم و نحوه ارسال وظایف از کلاینت به Job Manager و از آنجا به ماشین‌های کارگر است. این تنظیمات در صورتی که موتور پردازش موازی و Toolbox پردازش موازی در نرم‌افزار Matlab نصب شده باشد، از طریق منوی اصلی Distributed و گزینه Manage Configurations قابل دسترسی است (شکل ۴).

شکل ۱- ساده‌ترین ترکیب Client، Job Manager و Worker در محیط پردازش موازی Matlab

 

شکل ۲- ترکیب چندگانه کلاینت‌ها با یک Job Manager و چندین Worker در محیط پردازش موازی Matlab

 

شکل ۳- ترکیب پیچیده چند‌گانه کلاینت‌ها، Job Manager‌ها و Worker‌ها در یک شبکه بزرگ در محیط پردازش موازی Matlab

 

شکل ۴- مدیریت تنظیمات موتور پردازش موازی نرم‌افزار Matlab

در صورتی که از نرم‌افزار Matlab روی یک کامپیوتر مجهز به پردازنده چند هسته‌ای یا یک کامپیوتر چند پردازنده‌ای استفاده ‌شود، می‌‌توان از تنظیمات local که به صورت پیش فرض در سیستم موجود است، استفاده کرد. در این حالت، Job Manager به تعداد هسته‌های سیستم (حداکثر هشت عدد)، Worker ایجاد کرده و آن‌ها را آماده انجام محاسبات می‌کند. در صورت نیاز می‌‌توان تنظیمات جدیدی در سیستم تعریف کرد. در هر نرم‌افزار Matlab روی هر کامپیوتر می‌‌توان تعداد زیادی از تنظیمات را ذخیره کرد که یکی از آن‌ها باید به عنوان پیش فرض تعیین شود. به عنوان مثال، مطابق شکل ۵ می‌‌توان یک Job Manager جدید در کامپیوتر تعریف کرد. هر Job Manager تنظیمات اختصاصی خود را دارد که در شکل ۶ نمونه‌ای از آن‌ها را مشاهده می‌کنید. همان‌طور که در شکل ۶ می‌‌بینید، گزینه‌های مختلفی از جمله نام سرور، حداکثر تعداد Job ها، فایل‌های مورد نیاز همراه برنامه برای ارسال به اعضای کلاستر و خصوصیات سفارشی برای توابع جهت تنظیم درJob Manager وجود دارد.

شکل ۵- روش تعریف یک Job Manager جدید در Matlab

 

شکل ۶- تنظیمات Job Manager

حلقه for موازی 
با توجه به نیازهای امروز، در نرم‌افزار Matlab امکاناتی برای استفاده از حلقه‌های For موازی برای اسکریپت‌نویسی وجود دارد. حلقه‌های For موازی حلقه‌هایی هستند که قسمتی از آن‌ها روی ماشین کلاینت Matlab اجرا شده و قسمتی از آن‌ها به صورت موازی به مجموعه ماشین‌های Matlab Workers ارسال می‌‌شود‌ (شکل ۷). داده‌های مورد نیاز ماشین‌های کارگر از کلاینت به آن‌ها ارسال شده و پس از انجام محاسبات، نتایج به کلاینت باز‌گردانده خواهد شد. نکته قابل توجه این که هر اجرای حلقه For موازی در یک ماشین کارگر یک Iteration بوده و هر کدام از آن‌ها از یکدیگر مستقل بوده و تضمینی برای همگامی اجرای آن‌ها وجود ندارد. بنابراین، تنها حلقه‌هایی که محاسبات و داده‌های آن‌ها امکان اجرا به صورت جداگانه را داشته باشند، با حلقه For موازی قابل پیاده سازی هستند.

شکل ۷
برای استفاده از حلقه‌های موازی For باید مجموعه موتور پردازش موازی نرم‌افزار را فعال کرد. برای این کار، باید با استفاده از تابع Matlabpool، Scheduler را فعال کرده و سپس تعداد خاصی از ماشین‌های کارگر را رزرو کنیم. با توجه به تنظیمات پیش فرض در Scheduler ماشین‌های کارگر انتخابی می‌‌توانند ماشین‌های فیزیکی بوده که در یک کلاستر قرار دارند یا این‌که مفهومی مجازی روی ماشین کلاینت Matlab باشند.در بخش قبل با سفارشی‌سازی تنظیمات Scheduler آشنا شده‌اید. برای آغاز یک Session با ماشین‌های کارگر بر اساس تنظیمات پیش فرض Scheduler، باید عبارتMatlabpool را در خط فرمان نرم‌افزار وارد کنید. این تابع، در صورت وجود تنظیمات مناسب ماشین‌های کارگر راه دور را برای انجام محاسبات موازی آماده کار خواهد کرد. در صورتی که این تنظیمات را تغییر نداده باشید و تنها گزینه موجود برای Scheduler گزینه local باشد، تابع مذکور به ازای هر هسته پردازنده سیستم، یک کارگر روی ماشین محلی ایجاد خواهد کرد. حداکثر تعداد این کارگرها، هشت عدد خواهد بود.
توجه کنید که در صورتی که از تابع Matlabpool برای ایجاد Session استفاده نکنید، حلقه‌های Parfor به صورت سریال اجرا خواهند شد. حال، تابعی مطابق آنچه در فهرست یک آمده است تعریف کرده و با عنوان benchmark.m ذخیره می‌‌کنیم. این تابع ساده، یک ماتریس به عنوان ورودی دریافت کرده و عملیاتی روی آن انجام می‌‌دهد. پس از تعریف تابع نمونه، نوبت به نوشتن اسکریپت تولید متغیرها (ماتریس مرجع) و استفاده از تابع بالا می‌‌رسد. برای این منظور، اسکریپتی مطابق فهرست ۲ ایجاد می‌کنیم.در این اسکریپت، ابتدا ماتریسی از اعداد تصادفی با ابعاد ۲ به توان ۲۰ و ۱۶ تولید می‌‌شود. سپس، در صورتی که Matlabpool فعال باشد، آن‌را می‌‌بندد و تابع مذکور را فراخوانی می‌کند. در این حالت، اجرای حلقه Parfor به صورت سریال اتفاق خواهد افتاد. در ادامهMatlabpool با تعداد کارگرهای دلخواه که در بالای اسکریپت مشخص شده‌اند، فراخوانی شده و تابع دوباره فراخوانی می‌‌شود. در این حالت، حلقه به صورت موازی به اجرا در خواهد آمد. در انتها، خروجی‌های به دست آمده نمایش داده شده و میزان افزایش سرعت نیز محاسبه شده و نمایش داده می‌‌شود. پس از اجرای اسکریپت فوق، نتایج به دست آمده مطابق با فهرست ۳ خواهد بود.

function [ T ] = benchMark( Ain, E )

% تعریف متغیرها
Msz = size(Ain,1);
a = zeros(Msz,1,›single›);
R = zeros(Msz,1,›single›);
k1 = single(pi/4);
k2 = single(pi/5);
A = single(Ain);
% شروع تایمر
tstart = tic;
% انجام محاسبات سنگین
parfor (e=1:E)
a = A(:,e);
R = k2*a – k1.^2*a.^2 …
+ k2.^2*a.^3 – k1.^3*a.^4 …
+ k2.^4*a.^5 – k1.^5*a.^6 …
+ k2.^7*a.^7 – k1.^8*a.^8 …
+ k2.^9*a.^9 – k1.^10*a.^10 …
+ k2.^11*a.^11 – k1.^12*a.^12 …
+ k2.^13*a.^13 – k1.^14*a.^14 …
+ k2.^15*a.^15 – k1.^16*a.^16 …
+ k2.^17*a.^17 – k1.^18*a.^18 …
+ k2.^19*a.^19 – k1.^20*a.^20;
end
% پایان تایمر
% برگرداندن زمان محاسبه
T = toc(tstart);
end

 

فهرست ۱- تابع نمونه برای انجام محاسبات سنگین

 

clear all;
% ایجاد متغیرها
NLNcols = 2^20;
E = 16;
% تعیین تعداد کارگرها
noWorkers = 2;

%تولید ماتریس رفرنس
Aref = rand(NLNcols,E);

%% محاسبات با یک ماشین کارگر
%==========================================================================
if matlabpool(‹size›) > 0
matlabpool close force;
end

% دریافت ماتریس ورودی
A = Aref;
T_single_CPU = benchMark( A, E );

%% محاسبات با چند ماشین کارگر
%==========================================================================
isOpenCorr = matlabpool(‹size›) == noWorkers;
if ~isOpenCorr,
matlabpool close force
matlabpool(noWorkers)
end

% دریافت ماتریس ورودی
A = Aref;
T_multi_CPU = benchMark( A, E );

%% PRINT DATA
fprintf(‹=============================================\n›);
strCPU1 = ‹# Workers: %d  ->   CPU Time [s]:     %۸٫۳f\n›;
fprintf(strCPU1, 1, T_single_CPU);

strCPU1 = ‹# Workers: %d  ->   CPU Time [s]:     %۸٫۳f\n›;
fprintf(strCPU1, noWorkers, T_multi_CPU);

fprintf(‹=============================================\n›);
str = ‹Speed-up; 1-CPU / M-CPU [-]:         %۸٫۳f\n›;
fprintf(str, T_single_CPU/T_multi_CPU);

 

فهرست ۲- اسکریپت استفاده کننده از تابع نمونه

 

=============================================
# Workers: 1  ->   CPU Time [s]:       ۵۸٫۹۹۲
# Workers: 2  ->   CPU Time [s]:       ۳۰٫۸۳۷
=============================================
Speed-up; 1-CPU / M-CPU [-]:            ۱٫۹۱۳

 

فهرست ۳- افزایش سرعت محاسبات با استفاده از Parfor به میزان ۱,۹۲ برابر برای ۲ کارگر (هسته)

 

همان طور که مشاهده می‌‌کنید، با انجام محاسبات به صورت موازی به افزایش سرعتی مطابق با ۹۲,۱ برابر دست یافته‌ایم. می‌‌توان با افزایش متغیر noWorkers به مقادیر بالاتر روی پردازنده‌های قدرتمند‌تر و چند هسته‌ای افزایش سرعت را برای تعداد هسته‌ها و کارگرهای بیشتر نیز محاسبه کرد.

یک برنامه، چندین داده 
یکی دیگر از امکاناتی که توسط ابزار محاسبات موازی Matlab در اختیار کاربران قرار گرفته ، امکان توسعه یک کد و اجرای آن روی چندین کارگر با داده‌های متفاوت است (Single Program, Multiple Data). در این حالت، یک کد به تمام کارگرها ارسال شده و هر کدام می‌‌توانند داده‌های اختصاصی و منحصر به فردی برای اجرا به کد مذکور وارد کرده و نتایج را ارسال کنند. برای استفاده از این قابلیت، می‌‌توان از کد نمونه فهرست‌۴ استفاده کرد. در کد بالا، متغیر m حداقل تعداد ماشین‌های کارگر برای اجرا و متغیرn حداکثر تعداد ماشین‌های کارگر را تعیین می‌‌کند. به عنوان مثال، کدی مطابق با فهرست ۵ می‌‌تواند به عنوان یک نمونه برای اجرا روی سه lab مورد استفاده قرار گیرد.  نکته قابل توجه این است که هر ماشین کارگر یک شاخص منحصر به فرد دارد که با متغیر labindexمشخص می‌شود. این متغیر برای سفارشی‌سازی متغیرهای محلی در هر ماشین کارگر مورد استفاده قرار می‌‌گیرد. فهرست ۶ نمونه‌ای از طرز استفاده از labindex را نشان می‌‌دهد. با استفاده از قابلیت شاخص منحصر به فرد برای هر ماشین کارگر، می‌‌توان به سادگی برای هر ماشین داده‌های منحصر به فردی بارگذاری کرد.

spmd (m, n)
<برنامه اجرایی>
end

فهرست ۴ – نمونه تعیین کد اجرایی برای ارسال به ماشین‌های کارگر با داده‌‌های مختلف

 

matlabpool
spmd (3)
R = rand(10000,10000);
end
matlabpool close

فهرست ۵- یک برنامه نمونه برای استفاده از Spmd

 

spmd (3)
if labindex==1
R = rand(9,9);
else
R = rand(4,4);
end
end

 

فهرست ۶- روش  استفاده از شاخص labindex در Spmd

 

فهرست ۷ نمونه‌ای از این تکنیک را برای بارگذاری فایل‌های متنی مختلف به عنوان ورودی‌های مختلف هر ماشین کارگرنشان می‌دهد. برای دسترسی به مقادیر داده‌های ایجاد شده روی هر ماشین کارگر، به سادگی می‌‌توان از نام متغیر مربوطه استفاده کرد. این متغیر، به صورت یک مجموعه کامپوزیت برگردانده می‌‌شود که هر عضو آن حاوی داده‌های مربوط به ماشین کارگر مربوطه است. به عنوان مثال، به فهرست۸ توجه کنید. همان‌طور که در فهرست ۸ نیز مشاهده می‌‌کنید، در Spmd تعیین شده است که در ماشین‌های کارگر با اندیس بالاتر از یک، متغیر HH با یک ماتریس ۴×۴ پر شود. پس از فراخوانی متغیر HH خروجی نشان می‌‌دهد که نخستین عنصر مجموعه خالی و باقی حاوی داده است. یکی دیگر از قابلیت‌های سودمند Spmd برای کار با آرایه‌ها، قابلیت توزیع آن‌ها بین lab‌هاست. برای توزیع یک آرایه عددی بین ماشین‌های کارگر، می‌‌توان از تابع Codistributed استفاده کرد. فهرست ۹ نمونه‌ای از توزیع یک ماتریس۱۰×۳ را بین چهار lab نشان می‌‌دهد. دستور getLocalPart نیز قسمت‌های تخصیص داده شده به هر lab را نشان می‌‌دهد.

spmd (3)
labdata = load([‹datafile_› num2str(labindex) ‹.ascii›])
result = MyFunction(labdata)
end

فهرست ۷- بارگذاری فایل‌های متنی مختلف به عنوان ورودی منحصر به فرد برای هر ماشین کارگر

 

>>spmd
>>    if labindex > 1
>>        HH = rand(4);
>>    end
>> end
>> HH
%———- خروجی در کلاینت —————–
Lab 1: No data
Lab 2: class = double, size = [4 4]
Lab 3: class = double, size = [4 4]

>> HH{2}
%———- خروجی در کلاینت —————–
HH{2}
۱۶   ۲   ۳
۵    ۱۱  ۱۰
۹    ۷    ۶
۴    ۱۴  ۱۵

>> Lab 2:
%———- خروجی در کلاینت —————–
HH
۱۶   ۲   ۳
۵    ۱۱  ۱۰
۹    ۷    ۶
۴    ۱۴  ۱۵

فهرست ۸- دسترسی به متغیرهای ایجاد شده در ماشین‌های کارگر

 

spmd
A = [11:20; 21:30; 31:40];
D = codistributed(A);
getLocalPart(D)
end
LAB 1         LAB 2      LAB 3      LAB 4
|      |      |
۱۱ ۱۲ ۱۳ | ۱۴ ۱۵ ۱۶ |   ۱۷ ۱۸ |  ۱۹ ۲۰
۲۱ ۲۲ ۲۳ | ۲۴ ۲۵ ۲۶ |   ۲۷ ۲۸ |  ۲۹ ۳۰
۳۱ ۳۲ ۳۳ | ۳۴ ۳۵ ۳۶ |   ۳۷ ۳۸ |  ۳۹ ۴۰

فهرست ۹- توزیع یک ماتریس۱۰´۳بین چهار lab به همراه خروجی

 

محاسبات موازی در محیط گرافیکی پس از بررسی ابزارهای سودمند Parfor و Spmd درParallel Computing Toolbox در نرم‌افزار Matlab، به معرفی و بررسی یک محیط گرافیکی برای اجرای دستورات در محیط پردازش موازی Matlab خواهیم پرداخت. در Parallel Computing Toolbox نرم‌افزار Matlab یک محیط گرافیکی برای اجرای دستورات و برنامه‌های موازی تعبیه شده است که امکان مشاهده اجرای دستورات و نمایش متغیرهای خروجی را دارد. این پنجره از طریق وارد‌کردن دستور Pmode با پارامترهای مناسب اجرا می‌‌شود. با وارد کردن دستورات مندرج در فهرست ۱۰ این پنجره چهار lab در سیستم محلی ایجاد‌کرده و ترمینال مربوط به هر کدام را در یک پنجره اما به صورت یکجا نمایش می‌‌دهد (شکل ۸). پارامتر دوم در دستور فوق (دراینجا local) نام تنظیمات Matlab Distributed Engine است که در قسمت آغازین این نوشتار به آن پرداختیم. در صورتی که بخواهیم به ماشین‌های کارگر واقعی که روی شبکه موجود هستند متصل شویم، باید نام تنظیمات مربوطه را وارد کنیم. در صورتی که این پارامتر خالی گذاشته شود، از تنظیمات پیش فرض استفاده خواهد شد. پارامتر دوم، تعداد ماشین‌های کارگر یا lab‌های مورد نیاز را تعیین می‌‌کند. در صورتی‌ که این پارامتر نیز خالی گذاشته شود، از مقادیر پیش فرض استفاده خواهد شد.

شکل ۸- محیط گرافیکی pmode که با اجرای کد فهرست ۹ اجرا شده است.

 

pmode start local 4

فهرست ۱۰- اجرای ابزار گرافیکی pmode با چهار lab به صورت محلی

 

همان طور که در تصویر می‌‌بینید، این محیط شبیه به وجود چهار ترمینال Matlab است که هر کدام در فضایی مجزا اجرا می‌‌شوند. یک خط فرمان کلی نیز وجود دارد که تمام دستورات به همه lab‌ها، از این طریق اعمال می‌‌شوند. روش کار با محیط گرافیکی pmode همانند روش استفاده از Spmd است و Pmode را می‌‌توان نمونه گرافیکی آن دانست. با توجه به خصوصیات و مشخصات این ابزار گرافیکی، می‌‌توان آن را وسیله‌ای برای آزمایش و ارزیابی برنامه‌های موازی به صورت گرافیکی دانست. هر چند این محیط از لحاظ کارایی با Spmd تفاوت چندانی ندارد، اما بیشتر برای اهداف اشکال زادیی و ارزیابی کد مورد استفاده قرار می‌‌گیرد. حال برای آشنایی بیشتر با محیط گرافیکی موازی Matlab دستورات آورده شده در فهرست ۱۱ را به ترتیب در خط فرمان آن وارد کنیم. خروجی pmode به این دستورات مطابق آنچه در شکل‌های ۹ و ۱۰ آمده است خواهد بود. برای بازخوانی داده‌ها از هر lab به ماشین کلاینت برای انجام محاسبات یا رسم انواع نمودار، باید در ترمینال ماشین کلاینت از پارامتر lab2client به همراه شماره lab مربوطه استفاده کرد. فهرست۱۲ نمونه‌ای از دریافت داده‌ها از چهار lab مثال بالا را نشان می‌‌دهد. با استفاده از دستورات و تکنیک‌های ساده توضیح داده شده در بالا اکنون می‌‌توانید با ترکیب آن‌ها در برنامه‌های پیچیده، حداکثر کارایی را از سیستم‌های چند هسته‌ای یا چند پردازنده‌ای به دست آورید.

شکل ۹- خروجی کارگرهای مختلف به دستورات وارد شده در رابط pmode

 

شکل ۱۰

 

ارزیابی عملکرد سیستم با استفاده از Mpiprofiler
همان طور که مشاهده کردید، نرم‌افزار Matlab با یک هسته درونی قوی، ابزاری ساده و کارا برای انجام محاسبات موازی در اختیار کاربران قرار داده است. اما حلقه تکمیل کننده این مجموعه ابزار پیشرفته، ابزاری برای ارزیابی عملکرد ماشین‌های کارگر و ارائه گزارش‌های مختلف به کاربر از عملکرد واقعی سیستم است. برای این منظور و جهت استفاده از این امکانات، باید هنگام اجرای وظایف، ابزار Mpiprofiler را فعال کرد تا به جمع‌آوری داده در رابطه با عملیات سیستم بپردازد. برای فعال‌سازی این ابزار می‌‌توان از کد آورده شده در فهرست ۱۳ استفاده کرد.  داده‌هایی که این ابزار جمع آوری می‌کند، داده‌هایی از قبیل زمان اجرای هر تابع در هر lab، زمان اجرای هر خط در توابع، شامل حجم داده‌های مبادله شده بین lab ها و زمانی که هر lab برای مبادله داده منتظر می‌‌ماند، است. به عنوان مثال، با اجرای کد فهرست ۱۴ در پنجره Pmode، ابزار Mpiprofiler نتایجی مشابه شکل ۱۱ ارائه خواهد داد.

شکل ۱۱ – نتایج به دست آمده برای آنالیز اجرای کد فهرست ۱۴ توسط mpiprofiler

 

شکل ۱۲- نتایج زمان مبادلات داده‌ای بین lab‌ها به صورت نمودار گرافیکی

 

P>> segment = [1 2; 3 4; 5 6]

P>> segment = segment + 10*labindex

فهرست ۱۱- نمونه‌ای از دستورات برای آزمایش محیط pmode

 

>> pmode lab2client segment 1
>> segment

segment =

۱۱    ۱۲
۱۳    ۱۴
۱۵    ۱۶

>> pmode lab2client segment 2
>> segment

segment =

۲۱    ۲۲
۲۳    ۲۴
۲۵    ۲۶

>> pmode lab2client segment 3
>> segment

segment =

۳۱    ۳۲
۳۳    ۳۴
۳۵    ۳۶

>> pmode lab2client segment 4
>> segment

segment =

۴۱    ۴۲
۴۳    ۴۴
۴۵    ۴۶

فهرست ۱۲- طریقه دریافت مقادیر از هر lab در ماشین کلاینت برای انجام اموری چون رسم گرافیکی

 

mpiprofile on

فهرست ۱۳- فعال‌سازی ابزارMpiprofiler

 

P>> R1 = rand(16, codistributor())
P>> R2 = rand(16, codistributor())
P>> mpiprofile on
P>> P = R1*R2
P>> mpiprofile off
P>> mpiprofile viewer

فهرست ۱۴- یک برنامه نمونه برای بررسی در mpiprofiler

جمع‌بندی
در این نوشتار به بررسی اجمالی قابلیت‌های محاسبات موازی Matlab پرداختیم و به صورت مختصر، اجزای اصلی تشکیل دهنده آن را مورد بررسی قرار دادیم. به یقین با ترکیب این تکنیک‌‌ها و ابزارها با کدهای ساده و سریال قدیمی و با نیاز اندک به دستکاری کد و بدون داشتن دانش کافی درباره مسائل و مشکلات مربوط به Threading، به سادگی می‌‌توان برنامه‌های خود را روی سخت افزارهای مناسب امروزی به نحو احسن و با کارایی بالا اجرا کرد.

 

منبع : ماهنامه شبکه