افزایش سرعت MATLAB بوسیله MEX
- 1393/06/29
- 5 دیدگاه
تکنیکهای افزایش سرعت MATLAB شامل روشهایی چون آنالیز عملکرد برنامه، بردارسازی و تبدیل کدهای MATLAB به فایلهای MEX میشود. MATLAB یک ابزار فوق العاده در پیاده سازی و اجرای الگوریتمها میباشد. این نرم افزار با ایجاد محیط برنامه نویسی ساده و ارائهٔ کتابخانه گسترده ای از توابع، امکان اجرا، تحلیل و نمایش الگوریتمهای پیچیده را به کابر میدهد.
افزایش سرعت MATLAB بوسیله MEX
این مقاله به مرور روشهای افزایش سرعت نرم افزار MATLAB میپردازد و مباحثی چون آنالیز عملکرد برنامه، بردارسازی و تبدیل کدهای MATLAB به فایلهای MEX را پوشش میدهد.
چرا سرعت MATLAB پایین است؟
MATLAB یک زبان ترجمه شده (interpreted) میباشد. این بدان معنی است که هر عملیات نیاز به پردازش اضافی دارد. در زبانهای تفسیر شده چون C یا ++C این زمان اضافی را نداریم. MATLAB دارای مکانیزم ایجاد کد بصورت لحظه ای و فوری میباشد که این مشکل را در مواردی کاهش میدهد.
برای انجام یک دستورالعمل ساده در MATLAB، مترجم باید به اپرندهای مربوطه رجوع کند و محاسبات صحیح را برای اجرا انتخاب کند. این انتخاب بستگی به انواع داده (حقیقی، مختلط، کاراکتر، منطقی و…) و شکل اپرندها (اسکالر، ردیف، ستون، ماتریس و…) دارد. هنگامی که دستورالعملها انجام شد، مقادیر بدست آمده باید ذخیره شود. برای یک تخصیص حافظه ساده، مترجم MATLAB باید هر دو اپرند ورودی و خروجی را مد نظر قرار دهد و تصمیم بگیرد که آیا احتیاج هست که حافظهٔ بیشتری اختصاص یابد یا اینکه مقادیر بدست آمده باید در عمل اختصاص حافظه تبدیل شوند.
این پردازش اضافی که صرف عمل اختصاص و انتخاب میگردد عامل اصلی کند بودن MATLAB نسبت به زبانهای تفسیر شده است. این زمان اضافی هنگامی قابل توجه است که عملیاتی روی اسکالرها یا مجموعه کوچکی از دادهها انجام میشود. به همین دلیل حلقههایی که درآن عملیات عددی انجام میشود سرعت اجرای پایینی در MATLAB دارند.
توجه کنید که اگر 80 درصد زمان اجرا به 20 خط از برنامه یا اجرای یک تابع اختصاص یابد، این قسمت همان جایی است که باید بهینه گردد.
استفاده از ابزار MATLAB Profiler راه بسیارخوبی در تشخیص نقاطی از برنامه است که اجرای آن سنگین میباشد. این نقاط که اجرای آن سخت و وقت گیر است، اصطلاحا تنگه برنامه نامیده میشود. این ابزار را میتوان به دو صورت فراخوانی و استفاده نمود. راه اول استفاده از دستور profile در خط فرمان MATLAB میباشد و راه دیگر این است که در قسمت Desktop در صفحه اصلی MATLAB گزینه profile را انتخاب کنیم. این ابزار به شما اجازه میدهد تشخیص دهید که کدام قسمت از برنامه وقت بیشتری از پردازش را به خود اختصاص داده است.
تصاویر بالا گزارش ابزار profiler را در مورد یک برنامه تخمین حرکت نشان میدهد. در این برنامه از الگوریتم تطبیق بلوک استفاده شده است. با مطالعه گزارش بالا میتوان به سرعت پی برد که اکثر زمان اجرا به تابع costFunctionMAD اختصاص یافته است. قسمت محاسبه میانگین اختلاف مطلق بلوکها مهمترین عامل وقت گیر در داخل این تابع است.
هنگامی که تنگههای برنامه را مشخص کردیم، میتوانیم روشهای زیر را به منظور بهبود عملکرد MATLAB به کار بگیریم.
1- پیش تعریف آرایهها
2- بردارسازی برنامه
3- کاربرد فایل MEX تفسیر شده
این روشها تنها برای برنامههایی که شما نوشتهاید کاربرد دارند. برای سریع کردن اجرای توابع داخلی و توکار MATLAB همانند filter و fft راه حل کلی وجود ندارد و در واقع این توابع به خوبی بهینه شدهاند.
پیش تعریف آرایهها
هنگامی که آرایهها در داخل حلقه میآیند. زمان اضافی برای تخصیص حافظه و کپی کردن اطلاعات تلف میشود. بطور کلی میتوانیم توسط عمل اختصاص اولیه حافظه این زمان را کاهش دهیم. بدین منظور باید قبل از حلقهها، توابع zeros را فراخوانی نمود. همچنین میتوان با استفاده از تابع struct به همراه تابع repmat آرایههای ساختاری را به برنامه اضافه نمود.
بردارسازی برنامه
راه حل کلی برای افزایش سرعت اجرا، بردارسازی میباشد. این کار را با جایگزین کردن حلقهها و عملکردهای عددی با عملکردهای برداری انجام میدهیم. در راهنمای بردارسازی شرکت Mathworks میتوانید روشهای متعدد بردارسازی برنامه را پیدا کنید. در برنامه بالا، یک حلقه کار محاسبه میانگین اختلاف مطلق بلوکها را به عهده دارد. میتوان با کاربرد تابع sum بجای این حلقه، این قسمت را بردارسازی نمود. این تغییر ساده سرعت اجرای کلی برنامه را دو برابر افزایش میدهد.
کد:
% EngPedia.ir
function cost = costFuncMAD(currentBlk,refBlk, n)
% Non-vectorized code
% err = 0;
% for i = 1:n
% for j = 1:n
% err = err + abs((currentBlk(i,j) – refBlk(i,j)));
% end
% end
% Vectorized code
err = sum(abs(currentBlk(:) – refBlk(:)));
cost = err / (n*n);
بردارسازی برای محاسبات آرایه ای که شامل استثناء در محاسبات نیستند، مناسب میباشد. به بیان دیگر هرگاه بخواهیم عمل محاسباتی ای را بدون وجود استثنا بر روی مجموعهٔ بزرگی از دادهها اعمال کنیم، بهتر است از بردارسازی کمک بگیریم. بردارسازی بر روی الگوریتمهایی که شامل تعدادزیادی استثناء یا ساختارهای نامنظم هستند، خوب عمل نمیکند. استفاده از بردارسازی در این چنین محاسباتی موجب میشود که برنامه پیچیده تر شود و در نتیجه فهم، نگهداری و اشکال زدایی برنامه سخت تر گردد. در برخی شرایط ممکن است که استفاده از بردارسازی ممکن نباشد یا حتی استفاده از آن سرعت اجرای برنامه را به دلیل افزایش کاربرد حافظه کاهش دهد. در این شرایط باید حلقهها و توابع را تبدیل به فایلهای MEX نمود.
فایلهای MEX همانند توابع داخلی MATLAB، فایلهای کامپایل شده هستند. بنابراین بسیار سریع میباشند. کار با توابعی که بصورت فایل MEX در آمدهاند بسیار ساده است. این توابع همانند دیگر توابع میتوانند بطور مستقیم توسط MATLAB فراخوانده شوند. در MATLAB میتوان با کاربرد دستور mex، فایلهای MEX مبتنی بر C یا Fortran ایجاد کرد. درصورت استفاده از اینترفیس برنامه نویسی MEX (MEX API) کدهای C یا Fortran را باید به صورت دستی نوشت. توابع MEX قادرند ورودی را به طور مستقیم از MATLAB بخوانند، خروجی را به MATLAB بازگردانند و یا به متغیرهای سراسری دسترسی داشته باشند.
MEX API این امکان را فراهم میکند که از hook در برنامه استفاده نمود. به کمک hook میتوان برای استفاده از توابع مصور سازی و … به MATLAB بازگشت. راهنمای MEX-file شرکت Mathworks اطلاعات بیشتری در مورد نوشتن فایلهای MEX در اختیارتان قرار میدهد. پر واضح است که نوشتن فایلهای MEX بطور دستی کاری وقت گیر است. از طرف دیگر احتمال اشتباه نیز زیاد است.
برای تبدیل کدهای MATLAB به C یا Fortran چندین کار باید انجام شود. در مرحله اول باید الگوریتم برنامهتان را که شامل توابع MATLAB میباشد، پیاده سازی کنید. به این منظور میتوانید کدهای جدیدی بنویسید یا اینکه توابع و کتابخانههای موجود قبلی را فراخوانی کنید. درخلال نوشتن این کدها، باید با کاربرد روتینهای مناسب مدیریت حافظه و تعریف متغیرهای داخلی عمل تخصیص حافظه را انجام دهید. در پایان باید بوسیله MEX API، کدها را با مدل MATLAB ارتباط دهید.
اشکال زدایی فایلهایی MEX سخت است چرا که در اشکالگیر (debugger) زبان C یا Fortran هیچ کدام از توابع تحلیل و مصورسازی MATLAB در دسترس نیست. همچنین زبانهای C یا Fortran نسبت به خطاها و اشکالات به اندازهٔ MATLAB حساس نیستند. راه ساده تری نیز وجود دارد و آن این است که که به طور اتوماتیک از طریق MATLAB فایل MEX را ایجاد کرد. به این ترتیب به طور کامل از محیط MATLAB به منظور اجرا و بهینه سازی برنامهتان بهره میگیرید. هر زمان که شما برنامهتان را تغییر دهید و آن را به فایل MEX تبدیل کنید، تغییرات اعمالی روی برنامهتان بر روی فایل MEX منعکس میگردد.
با کاربرد فناوری مفسر بهینه ساز میتوانید برنامهٔ MATLAB را به فایلهای پرسرعت MEX تفسیر نمایید. به این صورت برنامه ای که در MATLAB نوشتهاید به طور داخلی به کدهای واسطه ای C ترجمه میشود. توانایی تولید کدهای C از MATLAB به شما تنها امکان تولید فایلهای MEX را نمیدهد. بلکه با استفاده از آن میتوانید مدلهای ANSI مبتنی بر C ایجاد کنید. این مدلها بصورت مستقل اجرا میشوند.
در برنامهٔ مثال بالا، ایجاد فایل MEX موجب میشود برنامه بالاترین سرعت اجرا را داشته اشد. در مثال بالا، برنامه اصلی دارای زمان اجرای s 46، برنامه بااعمال روش بردارسازی دارای سرعت اجرای s 26 و برنامهٔ فایل MEX دارای زمان اجرای 2.7 ثانیه میباشد. چگونه فایلهای MEX سرعت اجرای الگوریتم مثال بالا را تقریباً ده برابر افزایش داده است.
مطالب مرتبط
برچسب ها : increase matlab performace, increase matlab speed, Matlab, mex, افزایش سرعت MATLAB بوسیله MEX, افزایش سرعت متلب, متلب
دیدگاهتان را بنویسید
نشانی ایمیل منتشر نخواهد شد
مطالب جدید
- IEDScout 5.22 پایش و عیب یابی IED در شبکه
- TINA 16 تحلیل مدار آنالوگ، دیجیتال، MCU و مختلط
- EMD energyPRO 5 تحلیل سیستم های انرژی
- ADAPT PT/RC 23.0.1 تحلیل غیرخطی تیر و سازه بتنی
- RISA Section 2.1.1 تحلیل مقاطع فولادی و سازه ای
- vMix 29 تولید و پخش زنده حرفه ای
- Ampsa ADW v24 طراحی تقویتکننده RF
- Ampsa MW v24 طراحی شبکه تطبیق امپدانس RF
- DSS Professional 8.7 مدیریت و نظارت تصویری هوشمند
- PowerACOUSTICS 2026 تحلیل آکوستیک و نویز در طراحی صنعتی
مطالب پربازدید
- دانلود کتاب هیدرولیک و پنوماتیک فستو Festo فارسی
- دانلود استاندارد
- دانلود نرم افزار کلید فولاد (Key to Steel) پرتابل
- دانلود فول استاندارد ASTM بصورت رایگان
- آموزش میکروکنترلر AVR
- دانلود آنتی ویروس شورتکات (Back 2 Normal)
- دانلود جدول استاندارد DIN
- دانلود کتاب آموزش Abaqus (فارسی)
- دانلود نرم افزار MATLAB برای آندروید(MATLAB Android)
- فول استاندارد ASME (بروز)
مطالب تصادفی
- Graitec BIMware Master 2025 پکیج طراحی و تحلیل سازه
- دانلود پروژه چرخش تصاویر با OpenGL
- SulphurPro 8.1 2025 طراحی و کنترل واحد بازیافت گوگرد
- XPAD Office Fusion 2025 پردازش داده های نقشه برداری
- LbPre 3.4.1 تحلیل آیرودینامیک خودرو، هواپیما و توربین
- EMTP 4.6 شبیه سازی حالت گذرا سیستم های قدرت
- نرم افزارهای شرکت Emtomo تفسیر دادههای ژئوفیزیکی
- Caneco BT 2025 تحلیل شبکههای LV
- Proficy iFIX 2024 مدیریت یکپارچه فرآیندهای صنعتی
- AVEVA Everything3D 3.1 طراحی 3D پیشرفته صنایع


