۱۳۸۸/۰۸/۱۹

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

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

۴ نظر:

ناشناس گفت...

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

محمود امین طوسی گفت...

آقا وحید سلام
توانایی اجرای یک برنامه روی چند CPU باید در زمان نوشتن برنامه موردنظر قرار گیرد. در واقع الگوریتم باید به نحوی باشد که بتواند کار را روی چند CPU به نحو مناسبی توزیع کند.
تقریباً همه برنامه‌های معمولی که استفاده می‌کنیم این توانایی را ندارند. در نسخه MATLAB مورد نظر من همانگونه که اشاره کردم فقط برای برخی الگوریتم‌های جبرخطی این توانایی لحاظ شده است، که به فرم گفته شده MATLAB از چند CPU استفاده خواهد کرد.

لذا روش مذکور ربطی به سایر برنامه‌ها و منجمله لاتک ندارد. هر برنامه خودش باید این قابلیت را داشته باشد.

این بحث به کامپایلرها و سیستم‌عامل‌ها هم مربوط می‌شود که به آن نمی‌پردازم.

وحيد قاسميان سوربني گفت...

دوستان عزيز،آيا مايليد كه اسكريپت mathtex رو براي توليد فرمولهاي LaTeX با اعداد فارسي به كار ببريم؟
براي اين كار ساده ترين راه، استفاده از XePersian است. براي همين، به يك ‌host بر روي Linux با فضاي 2 گيگ نياز است تا TeXLive را بر روي آن نصب كنيم. سپس نوبت به نصب XePersian مي رسد و راهنماي نصب mathtex هم كه در خود فايل mathtex.zip آمده است. آيا كسي هست كه مرا ياري كند؟!

محمود امین طوسی گفت...

آقا وحید بنا به پیشنهاد شما، سیستم آن‌لاین تبدیل فایل tex به pdf را روی سایت parsilatex.com راه‌اندازی کردم ولی استفاده از mathtex نیاز به کار بیشتری دارد.