MATLAB و پردازندههای چند هستهای
خیلی بد است که یک پردازندهٔ ۴ هستهای (QUAD Core CPU) داشته باشی، کلی محاسبات سنگین هم در MATLAB یا هر جای دیگر داشته باشی، آن وقت فقط یک هسته مشغول باشد و باقی هستهها از بیکاری چرت بزنند.
ظاهراً نسخههای جدید MATLAB امکانات موازی سازی، محاسبات توزیعشده و چندنخی (Multithreading) خوبی دارند ولی در نسخه MATLAB 7.3 R2006b که من استفاده میکنم این امکانات به صورت کامل وجود ندارد و امکان استفاده از توان کامل سیپییوهای چندهستهای وجود ندارد. با این حال برای انجام یک سری از عملیات جبرخطی امکاناتی وجود دارد که برای استفاده از آنها باید تنظیماتی را انجام داد. فرض کنید چهار هسته داریم، تنظیمات زیر را انجام دهید:
ظاهراً نسخههای جدید 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
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
بدون تنظیمات فوق ۳.۲ ثانیه زمان میبرد و پس از تنظیم فوق ۱.۸۶ ثانیه به طول انجامید و هر ۴ هسته فعال شدند. یعنی کاهش بیشتر از ۴۰ درصدی زمان اجرا. خیلی خوب بود.