صفحه شخصی محمود امین‌طوسی

Aug 25,2019

  • صفحه شخصی محمود امین‌طوسی

  • 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 بسنده می‌کنم؛ اشاءالله بعداً بیشتر خواهم گفت.