‏نمایش پست‌ها با برچسب MATLAB. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب MATLAB. نمایش همه پست‌ها

۱۳۸۹/۰۲/۰۷

MATLAB و پردازنده‌های چند هسته‌ای (۲)

یاد آن روزهایی که با ماشین حساب fx 3600 برنامه می‌نوشتم و وقتی ماشین حساب برای اجرای یک برنامه ۲ دقیقه در کما فرو می‌رفت، به‌خیر. از اینکه می‌توانستم حسابی مشغولش کنم کیف می‌کردم.
حالا هم وقتی نمی‌توانم از تمام ظرفیت پردازشی سیستم -درحالیکه نیاز دارم- استفاده کنم اعصابم خرد می‌شود.
قبلاً در این پســـــت راجع به چگونگی استفاده از چند هستهٔ CPU در MATLAB مطلبی را نوشته بودم و گفته بودم:
ظاهراً نسخه‌های جدید MATLAB امکانات موازی سازی، محاسبات توزیع‌شده و چندنخی (Multithreading) خوبی دارند.
اون موقع هنوز نسخه جدید را نداشتم ولی به تازگی MATLAB نسخهٔ R2009a را نصب کرده‌ام که جعبه ابزار Parallel Computing را دارد. یک دستور اضافه شده در این نسخه، دستور parfor است که برای اجرای عملیات یک حلقه، به صورت همزمان بر روی چند هسته بکار می‌رود. نحوهٔ استفاده از آن هم همانند for است با یک سری محدودیت‌ها. به صورت موازی درآوردن یک الگوریتم نه همیشه شدنی و نه همیشه راحت است؛ لیکن MATLAB جدا از برخی محدودیت‌ها، کار را برای برنامه‌های Single Instruction Multiple Data یا SIMP، بسیار راحت کرده است. نحوهٔ استفاده از این دستور برای اجرای دستوراتی خاص روی چهار هسته در زیر آمده است:
matlabpool('open','local',4)
parfor i=1:4
statements
end

matlabpool('close')
اگر برنامه‌ای را به صورت معمول نوشته باشید و مثلاً ۷۰درصد اوقات سی‌پی‌یوی شما مشغول باشد و با دستورات فوق برنامهٔ خود را برای استفاده از چند هسته اصلاح نمایید، هر چهار هسته صددرصد مشغول بوده و سرعت بیشتری در حصول به نتیجه را شاهد خواهید بود؛ البته باز هم به شرطها و شروطها.
فعلاً به همین معرفی parfor بسنده می‌کنم؛ اشاءالله بعداً بیشتر خواهم گفت.

۱۳۸۸/۰۸/۱۹

MATLAB و پردازنده‌های چند هسته‌ای

خیلی بد است که یک پردازندهٔ ۴ هسته‌ای (QUAD Core CPU) داشته باشی، کلی محاسبات سنگین هم در MATLAB یا هر جای دیگر داشته باشی، آن وقت فقط یک هسته مشغول باشد و باقی هسته‌‌ها از بیکاری چرت بزنند.
ظاهراً نسخه‌های جدید MATLAB امکانات موازی سازی، محاسبات توزیع‌شده و چندنخی (Multithreading) خوبی دارند ولی در نسخه MATLAB 7.3 R2006b که من استفاده می‌کنم این امکانات به صورت کامل وجود ندارد و امکان استفاده از توان کامل سی‌پی‌یوهای چندهسته‌ای وجود ندارد. با این حال برای انجام یک سری از عملیات جبرخطی امکاناتی وجود دارد که برای استفاده از آنها باید تنظیماتی را انجام داد. فرض کنید چهار هسته داریم، تنظیمات زیر را انجام دهید:
1. Right click on “My Computer” and select “Properties”.
2. Click on the “Advanced” tab.
3. Click on the “Environment Variables” button.
4. Create or edit the following "System variables":
Variable Value
---------- ----------
BLAS_VERSION mkl.dll
OMP_NUM_THREADS 4


برای اطلاعات بیشتر و نحوه استفاده در لینوکس اینجـــا را ببینید. البته ظاهراً Mathworks ایران را تحریم کرده است و باید از فیلترشکن استفاده نمایید.

نتیجه اجرا جالب بود. من کد زیر را که یک تجزیه QR است، در هر دو حالت (با و بدون انجام تنظیمات فوق) روی سی‌پی‌یوی Intel® Core™2 Quad Processor Q8200 اجرا کردم:

tic;a=magic(2001);qr(a); toc

بدون تنظیمات فوق ۳.۲ ثانیه زمان می‌برد و پس از تنظیم فوق ۱.۸۶ ثانیه به طول انجامید و هر ۴ هسته فعال شدند. یعنی کاهش بیشتر از ۴۰ درصدی زمان اجرا. خیلی خوب بود.

۱۳۸۷/۰۷/۲۵

مشکل متن های ریز در فایلهای .eps تولید شده توسط MATLAB در LaTeX.


به خاطر مشکلات میکروسافت ورد -از جمله تبدیل فرمولها به عکس، به هم ریختن سند با یک تغییر کوچک، عدم انعطاف در ازجاعات متقابل و...- مدتی است که گزارشات خودم شامل مقالات را با LaTeX آماده می کنم. ولی آن هم در عین زیبایی برای خودش دردسرهایی دارد. از آن جمله می توان به مشکل متن های با فونت بسیار کوچک در فایلهای .eps تولید شده توسط MATLAB در LaTeX اشاره نمود. این مشکل را با کمک وبلاگ Jason حل نموده ام و نتیجه را به صورت یک تابع MATLAB با نام print_EPS در اینجا گذاشته ام که می توانید استفاده نمایید.