יום ראשון, 18 בדצמבר 2011

הדרת קבצים

"הרשו לי לפנות את הבמה בפוסט הזה לטובת בלוגר אורח – חנן קביץ, אשר התארח בבלוג הזה לפני שלושה פוסטים. חנן עובד יחד עמי בחברת סיסטמטיקס, ומתמחה בכלי MathWorks למחשוב טכני, עם דגש על ניתוח נתונים, חישוב מקבילי, הנדסה פיננסית וקימפול אפליקציות MATLAB".


לפני שמשקיעים זמן יקר בפיתוח אלגוריתם, דיבוג ובדיקות של מקרי קצה, כדאי לבדוק ב-File exchange של MathWorks האם מישהו אחר כבר עשה עבורנו את העבודה. ה-File exchange, למי שלא מכיר, הוא אתר שיתוף קבצים אליו אלפי משתמשי MATLAB ו-Simulink ברחבי העולם העלו ב-15 השנים האחרונות פרויקטים רבים אשר ניתן להורידם בחינם ולעשות בהם כל שימוש שהוא.

מה ניתן להוריד? החל מאלגוריתמים פשוטים, דרך פרויקטים מלאים (כולל GUI), שעורי הדרכה (tutorials) ואפילו חבילות שלמות (Toolboxes) שהעלו המשתמשים. רק חשוב לזכור שלמרות שהאתר מאוחסן בשרתים של MathWorks, הוא אתר שיתוף קבצים חופשי ולכן אין שום ערובה לנכונות הקוד והאלגוריתמים המופיעים בו, וחובה על כל משתמש לשוב ולבחון כל אלגוריתם בו הוא עומד לעשות שימוש.

ואם רוצים להעלות תכנים? כל משתמש MATLAB או Simulink שיש לו חשבון באתר של MathWorks יכול להעלות תכנים לאתר ולהתקדם במעלה הדירוג בו, הנקבע בהתאם לכמות ההורדות של התכנים שלו בחודש האחרון על ידי המשתמשים, אשר יכולים גם לתת ציונים לתכנים.

לאחרונה העלתי מספר פרויקטים משלי אותם אתם מוזמנים לבחון (ועל הדרך לשפר את הדירוג שלי...):

1. מחשבון Black & Scholes להצגת מחירים ורגישויות של אופציות

2. עץ אדום-שחור

אני גם ממליץ לכם לבחון את ה-tutorial ללימוד יכולות בסיסיות ב-Simulink, שהעלה רוני פאר, שהתארח בעצמו בבלוג הזה מספר פעמים.

ואגב, החל מגרסת R2009b ניתן לגשת ל-file exchange ישירות מתוך ה-desktop של MATLAB.

אז לפני שאתה רצים ליישם את הפרויקט הבא שלכם, בדקו שאתם לא עומדים להמציא את הגלגל מחדש...



האם העליתם פעם קובץ לאתר שיתוף הקבצים של MathWorks? יש לכם המלצה על תכנים שהורדתם? ומה עם ביקורת על הקבצים שהעלו עובדי סיסטמטיקס?

יום שני, 28 בנובמבר 2011

האצת ביצועי MATLAB על ידי שימוש ב-GPU

בכרטיס המסך של כל מחשב מצוי מעבד גרפי (Graphical Processing Unit, או בקיצור - GPU), המאפשר להוריד מהמעבד הראשי (CPU) עומס בזמן ביצוע חישובים גרפיים שונים. להבדיל מבקרי הגרפיקה הראשונים, ניתן כיום לתכנת את המעבדים הגרפיים, בדומה למעבדים אחרים. למשל, המעבדים הגרפיים של חברת nVIDIA ניתנים לתכנות באמצעות שפת CUDA, אשר מהווה הרחבה של שפת C.

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

התוצאה הישירה של שימוש ב-GPU על מנת לבצע חישובים שונים הינה האצה של משך הזמן הנחוץ לקבלת תוצאות. למשל, בסמינר שנערך בסוף 2010 ראיתי דוגמה לאלגוריתם שהיה רץ במשך 180 שעות (יותר משבוע), והיום הסימולציה נמשכת פחות מ-6 דקות ! רבים בארץ כבר גילו את הפוטנציאל הטמון ב-GPU, והדבר הפך את ישראל לאחת המדינות המובילות בתחום. ולראיה, המפגש המקצועי השנתי של nVIDIA התקיים ב-2011 בישראל, וזו היתה הפעם הראשונה בה הוא נערך מחוץ לארצות הברית !

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

1.  אפשרות להפעיל 150 פונקציות built-in של MATLAB הפועלות על מערכים ישירות על ה-GPU, עם מינימום שינוי של קוד קיים.
2.  אפשרות להמיר פונקציות שכתבתם ב-MATLAB (המכילות אחת או יותר מ-109 פונקציות נבחרות) לקוד ב-GPU native language היכול לרוץ בצורה מקבילית על ה-GPU . ושוב, עם מינימום שינוי של קוד קיים.
3.  אפשרות לקרוא לקוד CUDA קיים ישירות מתוך MATLAB .

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

איזה GPU יש לכם במחשב? כמה ליבות יש בו? האם ניסיתם להאיץ את ביצועי קוד ה-MATLAB שלכם על ידי שימוש ב-GPU?

יום ראשון, 23 באוקטובר 2011

צייר לי figure

הפוסט הפעם קצר במיוחד, אך מאוד שימושי.


כחלק ממסמך סיכום פרויקט הגמר שלי במסגרת התואר השני בהנדסת חשמל באוניברסיטת ת"א, היה עליי לשלב תרשימים שהכילו גרפים של אותות חד-מימדיים לצד תמונות המתארות אותות דו-מימדיים. לא אלאה אתכם יותר מידי בפרטים, אלא אקפוץ ישר לתוצאה הסופית, ואשאל אתכם האם אתם יודעים כיצד לקבל figure שנראה, למשל, כמו זה שלמטה?

כפי שאתם שמים לב, ה-figure לעיל מכיל שתי תמונות, מערכת צירים "קטנה", ומערכת צירים שגודלה כפול פי 3 ממערכת הצירים הקטנה (ואשר הציר האופקי שלה זהה לזה של קודמתה, ולכן זה של קודמתה הושמט). אם אתם לא יודעים איך לייצר כזה figure מבלי להשתמש ב-paint, אתם כנראה נמנים על קבוצה שהשליטה היחידה שהיא יודעת להשיג על figures ב-MATLAB מתבצעת על ידי שימוש טריוויאלי בפקודת subplot, והפוסט הזה הוא בשבילכם.

הקוד אשר שימש להפקת ה-figure מצורף למטה, והוא די מסביר את עצמו. חשוב רק לחדד שנעשה כאן שימוש ב-graphic handles, וכן שנמחקו השנתות האופקיות של מערכת הצירים ה"קטנה" כיוון שהן זהות לאלה של זו שמתחתיה (כך מקבלים תצוגה "נקייה" יותר).



האם יש לכם figures מעניינים שאתם רוצים לחשוף בפני כל קוראי הבלוג? האם עד קריאת הפוסט הזה הדרך היחידה שלכם להגיע לתוצאה דומה היתה על ידי תוכנת  paint?

יום ראשון, 2 באוקטובר 2011

מקומפל עליכם ?

 "הרשו לי לפנות את הבמה בפוסט הזה לטובת בלוגר אורח חנן קביץ, אשר עובד יחד עמי בחברת סיסטמטיקס. חנן מתמחה בכלי MathWorks למחשוב טכני, עם דגש על ניתוח נתונים, חישוב מקבילי, הנדסה פיננסית וקימפול אפליקציות MATLAB. על התחום האחרון חנן ירחיב בשורות הבאות"

כלי הקומפילציה של MathWorks הפכו בשנים האחרונות לכלים מרכזיים בארגז הכלים של כל מפתח אפליקציות ב-MATLAB. הכלים מאפשרים למפתח לקחת את אפליקצית ה-MATLAB שלו ולקמפל אותה לסביבה אחרת, לדוגמה: לבנות אפליקציה Stand alone לתוכנת Windows אשר יכולה לרוץ אצל משתמשים נוספים שאין להם בכלל רשיון MATLAB. היכולת הזאת מרחיבה באופן ניכר את התפקיד והחשיבות של מפתח MATLAB בתוך כל אירגון, והאפליקציות שנוצרות ב-MATLAB הופכות לעיתים קרובות לאבן מרכזית בתהליך הפיתוח.


כאמור, הרעיון המרכזי בכלי הקומפילציה הוא היכולת לפרוס את האפליקציות/אלגוריתמים שפותחו ב-MATLAB למשתמשים חיצוניים רבים ככל שנרצה, ללא צורך ברישיון MATLAB אצל משתמשי הקצה. יכולת זו מתאפשרת באמצעות מספר כלים:


- MATLAB Complier זהו שער הכניסה לתהליך הקומפילציה. כלי זה מאפשר לקחת קוד MATLAB ולקמפל אותו לאפליקצית Stand alone או לקמפל אותו ל-DLL של C או C++. במקרה של אפליקצית stand alone – ניתן יהיה להפעיל אותה מחוץ לסביבת MATLAB (לדוגמה, ניתן לקמפל ממשק משתמש גרפי שנבנה באמצעות MATLAB כך שיופעל מתוך תוכנת Windows). DLL של C או C++ ניתן יהיה לקרוא מתוך קוד של C או C++ בהתאם.
 MATLAB Builder Ex - מאפשר לקמפל את קוד ה-MATLAB ל- add-ins הניתנים לשילוב בתוך סביבת EXCEL. ניתן יהיה להשתמש בפונקציות אלו בדיוק כמו בכל פונקצית EXCEL אחרת.

Builder NE  MATLAB- מאפשר לקמפל אלגוריתמי MATLAB לקומפוננטות של .NET ושל COM כך שניתן יהיה לגשת אליהם מתוך סביבת .NET הכלי מסייע להמיר את הפונקציות שלנו למתודות של classes בסביבת .NET
 MATLAB Builder JA-  הכלי מקמפל קוד MATLAB לסביבת JAVA ויוצר קובץ JAR אשר ניתן להפעלה מתוך סביבת JAVA כמו כל קובץ JAR אחר. הכלי ממיר את פונקציות ה-MATLAB למתודות של classes בתוך קובץ JAR.
 חשוב לציין ששני הכלים האחרונים מאפשרים גם לשלב אלגוריתמי MATLAB בתוך שרתים שמריצים אפליקציות על גבי רשת האינטרנט, דבר שמאפשר לגשת לאפליקצית ה-MATLAB מתוך רשת האינטרנט.

מספר הערות פרקטיות:
·         על מנת להפעיל את כלל הרכיבים המקומפלים במחשבים שאין בהם MATLAB יש להתקין על המחשבים הללו את ה-MCR (MATLAB Compiler Runtime), אשר הינו המנוע שמריץ מאחורי הקלעים את כל האפליקציות המקומפלות ומגיע כחלק מה-MATLAB Compiler.
·         מהירות הריצה של האפליקציות המקומפלות היא פחות או יותר כמו מהירות הריצה שלהן בסביבת MATLAB.
·         שאלה שנשאלת לעיתים קרובות היא מה מתקמפל ומה לא? התשובה היא די פשוטה - כמעט כל שפת MATLAB, על כליה המשלימים, מתקמפלת, למעט מעט מאוד דברים שלא. הדברים העיקריים שאינם מתקמפלים הם הממשקים למשתמש שמגיעים עם MATLAB והכלים המשלימים שלה.
·         כחלק מה-MATLAB Compiler קיים ממשק משתמש (deploytool, בתמונה) אשר מפשט מאוד את תהליך הקומפילציה לכל הסביבות ואת תהליך הפצת הרכיבים המקומפלים למשתמשים פשוטה ומהירה.

האם אתם משתמשים בכלי הקומפילציה של MathWorks? לאיזו סביבה אתם מקמפלים?