رفع خطای Out of Memory متلب
رفع خطای Out of Memory متلب
متلب برنامه ای هست که در طی تحلیل و اجرای برنامه بر اساس مقدار دیتای مورد محاسبه رم سیستم را درگیر می کند.
در این پست قصد داریم راهکارهای متفاوتی را برای رفع خطای خارج شدن از حافظه, بررسی کنیم و به آن بپردازیم.
مهم نیست که چگونه با این خطا مواجه شده اید, ما بهینه کردن برنامه و سیستم را برای گذر از این خطای Out of Memory توضیح می دهیم.
چه زمانی خطای Out of Memory رخ می دهد؟
متلب بسیار هوشمند است و برای مواقعی که محاسبات بیشتر از مقدار 100درصدی حافظه یا همان Ram سیستم هست با نمایش خطای Out of Memory کاربر را مطلع می سازد. از این رو کاربر متوجه می شود مشکل از پر شدن حافظه بوده است.
این در صورتی هست که برنامه های دیگر وقتی از حداکثر ظرفیت رم استفاده میکنند, سیستم هنگ می کند یا برنامه بسته میشود.
شاید الان با خودتان بگویید پس چرا گاها سیستم من با اجرای برنامه متلب هنگ می کند!
پاسخ این است که متلب این قابلیت را دارد که از 100درصد رم برای محاسبات استفاده کند. در تنظیمات متلب می توان مقدار حداکثر استفاده متلب از رم را مشخص کرد. برای اینکار به مسیر زیر بروید:
Home تب, Environment بخش , Preferences کلیک . MATLAB > Workspace را انتخاب کنید
از سمت چپ به راست به ترتیب عمل کنید.
خب حالا طبق این لینک تنظیمات را اعمال کنید. (چون مبحث در مورد راه های رفع خطای حافظه هست این موضوع را بیشتر تشریح نکردیم)
استراتژی حل خطای Out of Memory در متلب
در زیر راه های مختلف را با هم بررسی می کنیم. ما راهکار حل مشکل را هم با تغییرات در پروژه متلب و هم در سخت افزار و ویندوز و… بررسی می کنیم. چرا که این خطا میتواند با عوامل بسیار زیادی مرتبط باشد و کارهای زیر همگی در رفع این خطا موثر هستند:
- رم سیستم خود را افزایش دهید (دارای هزینه)
رم (RAM) حافظه موقت سیستم شماست, میتوانید از یک متخصص کامپیوتر یا لپ تاپ برای این امر کمک بگیرید.
- افزایش رم به صورت مجازی (virtual memory) (بدون هزینه)
با یک جستجوی ساده در گوگل میتوانید راهکارهای افزایش حافظه مجازی را مطابق با ویندوز خود مشاهده و اعمال نمایید. این یک اقدام بسیار کار ساز برای رفع مشکل Out of Memory در متلب است.
- از نسخه 64بیتی متلب استفاده کنید
ویندوز های 64بیتی فضای بیشتری از حافظه رم سیستم را برای استفاده در نظر می گیرند.
- برنامه های اضافی را ببندید
هر برنامه ای که در ویندوز شما فعال هست از رم سیستم استفاده می کند. با بستن آن مقدار رمی که در اختیار متلب قرار می گیرد را افزایش دهید.
برای این کار بعضی از نرم افزار ها با نام بوستر رم در فضای اینترنت موجود است که میتوان استفاده کرد.
- از ذخیره سازی اطلاعات مناسب استفاده کنید
از کلاس عددی مناسب استفاده کنید. یعنی برای داده ای که میشود از کلاس Single یا uint8 استفاده کرد, به هیچ عنوان از Double استفاده نکنید
کلاس (نوع داده) |
بایت | عملیات پشتیبانی شده |
single |
4 |
بیشتر ریاضیات |
double |
8 |
همه ریاضیات |
logical |
1 |
عملیات منطقی / شرطی |
int8, uint8 |
1 |
حساب و برخی توابع ساده |
int16, uint16 |
2 |
حساب و برخی توابع ساده |
int32, uint32 |
4 |
حساب و برخی توابع ساده |
int64, int64 | 8 |
حساب و برخی توابع ساده |
- فراخوانی دیتا با کلاس مناسب
مثال زیر را در نظر بگیرید:
fid = fopen('large_file_of_uint8s.bin', 'r'); a = fread(fid, 1e3, 'uint8'); % Requires 8k whos a Name Size Bytes Class Attributes a 1000x1 8000 double a = fread(fid, 1e3, 'uint8=>uint8'); % Requires 1k whos a Name Size Bytes Class Attributes a 1000x1 1000 uint8
همانطور که مشاهده میشود دیتا با کلاس دابل 8کیلوبایت و با کلاس uint8 یک کیلوبایت حجم در حافظه اشغال می کند.
- در صورت امکان آرایه ها را کم حجم کنید
شاید برای شما هم جالب باشد که آرایه های صفر در ماتریس ها فضای بیشتری اشغال می کنند.
باز هم مثال میزنیم:
A = eye(1000); % Full matrix with ones on the diagonal As = sparse(A); % Sparse matrix with only nonzero elements whos Name Size Bytes Class Attributes A 1000x1000 8000000 double As 1000x1000 24008 double sparse
در ابعاد کوچک تر نتیجه این دو دستور را نمایش میدهیم.
A= eye(4)
نتیجه:
A =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
و اما دستور زیر:
As = sparse(A)
As =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
دستور sparse عناصر صفر را حذف می کند. یعنی فقط عناصر غیر از صفر را نگه میدارد.
گاهی یک برنامه چند 100 خطی را میتوان با چند دستور و به بهینه ترین و سبک ترین حالت پیاده سازی کرد. فقط باید دایره شناخت ما از دستورات متلب بازتر شود. هلپ متلب بزرگترین و قویترین منبع آموزش متلب است.
- وبلاگ و اخبار متلبی
- آموزش رفع مشکل لایسنس متلب
- رفع خطای must be monotonically increasing در سیمولینک متلب
- آموزش رفع خطای License Error –4,0 موقع باز کردن Polyspace متلب
این مطلب باز هم آپدیت میشود و راهکارهای بیشتری را ارائه خواهیم کرد.
نظرات خود را با ما در بخش دیدگاه های همین پست در میان بگذارید.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.