יום חמישי, 2 בדצמבר 2010

מהר יותר, גבוה יותר, ולא בהכרח על מחשב חזק יותר !

זהו הפוסט השני בסדרת הפוסטים בנושא החידושים בגרסת R2010b של כלי MathWorks והפעם נעסוק באפשרות להאיץ את ביצועי MATLAB על ידי שימוש במעבד הגרפי (GPU) הנמצא בכרטיס המסך של המחשב שלכם.
ה-GPU מאפשר להוריד מהמעבד הראשי (CPU) עומס בזמן ביצוע חישובים גרפיים שונים. ולהבדיל מבקרי הגרפיקה הראשונים, ניתן כיום לתכנת את המעבדים הגרפיים, בדומה למעבדים אחרים. למשל, המעבדים הגרפיים של חברת NVIDIA ניתנים לתכנות באמצעות שפת CUDA, אשר מבוססת על שפת C.
בשנים האחרונות, עם התגברות הדרישה לכח חישוב חזק יותר, יותר מפתחי תוכנה "זונחים" את ה-CPU, המכיל cores בודדים, ומתחילים לנצל את מאות ה-cores הממתינים בחוסר מעש ב-GPU לצורך ניתוח כמויות גדולות של מידע באופן מקבילי. בעקבות כך, אפליקציות רבות מתחומים שונים עושות כיום שימוש במעבדים גרפיים. בין היתר, המעבד הגרפי מבצע כיום חישובים פיננסיים, משימות עיבוד אות, תמונה ווידאו, סימולציות כימיות, ניתוחים סיסמיים, חישובים של אלגברה לינארית, סימולציות של דינמיקת נוזלים ומשימות מעולם הביולוגיה החישובית. למעשה, במקרים רבים, ה-GPU שבכרטיס המסך משמש כיום ככח עבודה זול וזמין לטחינת נתונים (data crunching) אשר אפילו לא יבואו לידי ביטוי על גבי המסך...
התוצאה הישירה של שימוש ב-GPU על מנת לבצע חישובים שונים הינה האצה של משך הזמן הנחוץ לקבלת תוצאות. רבים בארץ כבר גילו את הפוטנציאל הטמון בכך, והדבר הפך את ישראל לאחת המדינות המובילות בתחום. אולם בישראל, כמו בכל העולם, עדיין חסר ניסיון בכתיבה בשפת CUDA, דבר הגורם לאי מיצוי הפוטנציאל הגלום בטכנולוגיה הזו.

ניסיון בשימוש ב-MATLAB, לעומת זאת, לא חסר בארץ ובעולם. מעל מיליון משתמשים מתכנתים כיום ב-MATLAB, ונהנים מיכולות ניתוח הנתונים והויזואליזציה של הכלי אשר הולך ומשתבח עם השנים, והמהווה בסיס לעוד כ-90 כלים נוספים, ביניהם ה-Parallel Computing Toolbox. בגרסה החדשה של הכלי, R2010b, אשר יצאה בספטמבר 2010, נוספה לו היכולת לתקשר ישירות עם ה-GPU, בשלוש דרכים:

1. אפשרות להפעיל מעל 100 פונקציות built-in של MATLAB הפועלות על מערכים ישירות על ה-GPU,
    עם מינימום שינוי של קוד קיים.
2. אפשרות להמיר קוד MATLAB לקוד היכול לרוץ בצורה מקבילית על ה-GPU.
3. אפשרות לקרוא לקוד CUDA קיים ישירות מתוך MATLAB.

למעשה, בגרסת ה-MATLAB החדשה הושלמה בניית הכביש המהיר המחבר בין סביבת ה-MATLAB על כל יתרונותיה לבין חומרת ה-GPU על כל הפוטנציאל הטמון בה. ובאמצעות החידוש ב-MATLAB, ניתן כעת לתקשר עם ה-GPU ישירות מתוך MATLAB, מבלי לדעת CUDA !

לשני סמינרים שערכנו בנושא זה באמצע נובמבר הגיעו 200 משתתפים, ואם פספסתם, אתם מוזמנים להתעדכן במצגות. בין היתר, הוצגה בסמינר דוגמה בה קוד MATLAB שהיה רץ במשך 180 שעות (7.5 ימים!) רץ כיום על ה-GPU בחמש דקות בלבד! הפידבקים שקיבלנו על הסמינר ועל הפיצ'ר החדש היו די טובים, ונראה שרבים עכשיו שואלים את עצמם למה לעבוד עם dual-core או לשדרג ל-quad-core, כאשר מאות cores זמינים במחשב שלהם ויכולים לקצר את זמני הריצה של האלגוריתם שהם כתבתו.

איזה GPU יש לכם במחשב? כמה זמן לוקח לאלגוריתם הכי ארוך שלכם לרוץ? האם אתם מכירים את השימושים האחרים של ה-Parallel Computing Toolbox? על אילו עוד חידושים בגרסת R2010b תרצו שאכתוב?