יום חמישי, 15 במרץ 2012

מה חדש ב-MATLAB ו-Simulink בגירסת R2012a ?


בתחילת מרץ שוחררה גירסת R2012a של כלי MathWorks, המכילה יכולות חדשות ב-MATLAB ו-Simulink, וכן עדכונים לעשרות כלים אחרים.


בין היכולות החדשות במשפחת מוצרי MATLAB :

MATLAB – ביצועים משופרים לפונקציות מתמטיות בסיסיות ולפונקציות האינטרפולציה, וכן Variable Editor משודרג.

Image Processing Toolbox – התווספה יכולת לבצע רגיסטרציה אוטומטית של תמונות בעזרת intensity-metric optimization, וכן נוספו פונקציות למציאת מעגלים בתמונה והצגתם.

Computer Vision System Toolbox – הכלי המקל על תכנון וסימולציה של מערכות ראיה ממוחשבת ומערכות עיבוד וידאו ותמונה תומך כעת גם בגילוי פנים באמצעות אלגוריתם Viola-Jones, גילוי פיצ'רים בשיטת MSER, עקיבה בגישת CAMShift וחישוב Integral Image. הכלי אינו מצריך עוד את ה-DSP System Toolbox וה-Signal Processing Toolbox לצורך פעולתו.

Image Acquisition Toolbox – הכלי המאפשר להזין בקלות את סביבות MATLAB ו-Simulink במידע ויזואלי (וידאו/תמונה) על ידי מגוון מצלמות ו-frame grabbers כולל כעת System Object הניתן להמרה אוטומטית לקוד C באמצעות ה-MATLAB Coder.

MATLAB Compilerה-MCR ניתן כעת להורדה מהאינטרנט, דבר המקל על הפצת אפליקציות וקומפוננטות מקומפלות לעמדות בהן אין התקנה של MATLAB. מעבר לכך, הכלי תומך במספר פונקציות נוספות המשתייכות ל-Computer Vision System Toolbox.

MATLAB Coder – הכלי המאפשר המרה ישירה של קוד MATLAB לקוד C מאפשר כעת גם המרה של System Objects שפותחו על ידי המשתמש.

HDL Coder – הכלי, אשר נקרא בעבר Simulink HDL Coder ואיפשר המרת מודלי Simulink לקוד HDL, מאפשר כעת גם המרה ישירה של קוד MATLAB לקוד HDL מטיפוס Fixed-Point לצורך קבלה מהירה של אבטיפוס ולשם מימוש אלגוריתמים על רכיבי ASIC ו-FPGA. הנ"ל אמור גם לגבי System Objects. הכלי אינו מצריך עוד Simulink Fixed-Point או Simulink לצורך פעולתו (דורש רק MATLAB Coder ו-Fixed-Point Toolbox).

HDL Verifier – מאפשר שימוש חוזר ב-test benches קיימים ב-MATLAB ו-Simulink לצורך וריפיקציה של קוד HDL על ידי קו-סימולציה עם סימולטורי HDL או בדיקות hardware-in-the-loop עם רכיבי FPGA. הכלי מחליף את ה-EDA Simulator Link וכולל כעת תמיכה בביצוע בדיקות hardware-in-the-loop גם לרכיבי FPGA של חברת Altera (חמישה-עשר דגמי FPGA של Altera ו-Xilinx נתמכים).

Statistics Toolbox – מכיל ממשק משופר לביצוע התאמה, חיזוי והצגה באמצעות רגרסיה לינארית, לינארית-מוכללת, ולא-לינארית.

Communications System Toolbox – מכיל כעת מודלים לערוצי LTE MIMO, ומאפשר ניצול של הכרטיס הגרפי (GPU) שבמחשב לצורך האצת סימולציות של מגוון System Objects הרלוונטים לתכנון, סימולציה וניתוח השכבה הפיזית
 (Physical Layer) של מערכות תקשורת.

Parallel Computing Toolbox – מאפשר כעת האצת ביצועים של מגוון פונקציות ה-FFT (על כל הסינטקסים שלהן) ופונקציות נוספות על ידי שימוש בכרטיס הגרפי (GPU) שבמחשב. בנוסף, פונקצית arrayfun שודרגה.



בין היכולות החדשות במשפחת מוצרי Simulink :

Simulink – מאפשר כעת הרצה של מודלים על חומרה זולה דוגמת LEGO MINDSTORMS NXT ו-BeagleBoard ישירות מתוך Simulink. בנוסף, חלון ה-editor של בלוק ה-MATLAB Function משולב כעת עם חלון ה-editor הרגיל של MATLAB, הורחבה התמיכה במערכות source control באמצעות ה-Source Control Adapter SDK, נוספה היכולת להוסיף legends בבלוק ה-Scope, הצטרפה האפשרות לשמור מודלים וספריות בפורמט הקבצים החדש של Simulink הנקרא SLX (חוסך מקום בזיכרון, מספק מידע רב למערכות הצגת קבצים, חוסך בזמן ביישומים מסוימים, וצפוי להיות הפורמט היחיד החל מ-R2012b) והתווסף ה-Signal Hierarchy Viewer.

Simulink Verification & Validation – לכלי המאפשר, בין היתר, שמירה על עקביות במודל אותו מפתחים, נוספה יכולת להחריג בלוקים ותת-מערכות כך שלא ייבדקו על ידי ה-Model Advisor, דבר אשר מקצר את משך פעולתו.

SimMechanics – לכלי המקל על מידול וסימולציה של מערכות מכאניות התווספה טכנולוגית דור 2 המאפשרת ליצור מודלים תלת-מימדיים ריאליסטיים יותר ולבחון את תוצאות הסימולציה שלהם באמצעות אנימציה משופרת בתלת-מימד. בנוסף, ניתן כעת להגדיר צורות באמצעות קוד MATLAB (שימושי אם אין תוכנת CAD זמינה), קל יותר לבצע שימוש חוזר באבני בנין ואפשר לנווט בתוך המודל המכאני באמצעות דפדפן.

Real-Time Windows Target – מאפשר הרצת מודלים של Simulink ב-
real-time בסביבת Windows תוך שימוש ב-Normal Mode, לצורך rapid prototyping או בדיקות hardware-in-the-loop
. כלומר, הכלי אינו מצריך עוד את ה-MATLAB Coder וה-Simulink Coder לצורך פעולתו, שכן פרט ל-External Mode, ניתן להשתמש כעת גם ב-Normal Mode.


עוד משהו?

מידע נוסף על החידושים הללו ועל יתר היכולות שהתווספו ניתן למצוא בעמוד הגרסה באתר MathWorks.

האם הורדתם כבר את הגרסה החדשה? איזו יכולת חדשה שצוינה למעלה שימושית במיוחד עבורכם? האם יש חידוש שגיליתם שלא הופיע למעלה?

יום חמישי, 1 במרץ 2012

CAD קטן | על המרת מידע בין תוכנות CAD ותוכנת MATLAB


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


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

אם המטרה היא לחבר את המודל למערכת בקרה או ליצור סימולציה מערכתית רחבה יותר, אזי ניתן להשתמש בכלי של MathWorks שנקרא SimMechanics, אשר מאפשר יצירת מודלים של Simulink מתוך מודל ה-CAD. התוצאה היא מודל Simulink לא ליניארי, אשר מכיל את כל התכונות של מודל ה-CAD, לרבות שמות החלקים, תכונות פיסיקליות כמו מסה ואינרציה, אופן חיבור החלקים וכו'. אופציה זו משמשת מהנדסי בקרה ומהנדסי מערכת רבים לתכנון מערכות בקרה אופטימליות.

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

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

תמונה 1: שמירת המודל בפורמט STL

2. יש להוריד מתוך אתר שיתוף הקבצים של MathWorks את הקובץ stlread.m

תמונה 2: הורדת הקובץ מאתר שיתוף הקבצים של MathWorks

3. הפונקציה stlread מתועדת היטב, וקל לעקוב אחרי הוראות השימוש בה. ייבוא הנתונים פשוט מאוד, כפי שניתן לראות בתוכנית הקצרה הבאה שכתבתי:

תמונה 3: קוד המשמש לקריאת הנתונים והצגת המודל בתוך MATLAB

ועל ידי השימוש בפונקציה patch, התוצאות ב-MATLAB נראות כך:

תמונה 4: הצגת הנתונים ב-MATLAB על ידי שימוש בפקודת patch

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

תמונה 5: צילום מסך מתוך SolidWorks

האם העליתם פונקציה משלכם לאתר שיתוף הקבצים של MathWorks? האם יש פונקציה מסויימת שהורדתם והפכה את החיים שלכם לקלים יותר? האם השתמשתם בעבר ב-SimMechanics? ומה לגבי פונקציית patch?

יום שלישי, 14 בפברואר 2012

DO-178 - הדרך המהירה להסמכה

על פי הבדיחה, שאלו פעם בכנס של מהנדסים העוסקים בתחום התעופה מי מהם היה מוכן להשתתף בטיסת המבחן הראשונה של מטוס שהוא היה מעורב בפיתוחו. רוב המהנדסים, כצפוי, לא מיהרו להתנדב, פרט למהנדס אחד שהרים את ידו. "כיצד אתה כל כך בטוח בחלקך בעבודה על מטוס חדשני ולא חושש שהוא יתרסק", נשאל המהנדס, שבתגובה ענה: "מטוס שאני עבדתי על פיתוחו בכלל לא ימריא"...
על מנת לגרום למהנדסים וללא-מהנדסים להרגיש בטוחים יותר במטוסים שבהם הם טסים, חובר לפני שלושים שנים מסמך ה-DO-178, שהפך דה-פקטו לסטנדרט בטיחות בינלאומי לתהליכי פיתוח של תוכנות המשמשות במטוסי נוסעים, כלי טייס לא מאוישים ובמערכות מוטסות (מערכות תקשורת, תצוגה, מערכות בקרה וכדומה). רוצים לדעת איך MATLAB ו-Simulink מסייעים בקיצור תהליך ההסמכה לתקן הזה? אם כן, היכנסו לכתבה אותה כתבתי, שהתפרסמה בגיליון דצמבר של המגזין הצבאי של ניו-טק.

יום רביעי, 1 בפברואר 2012

Cody & Trendy


אם נמאס לכם מ-Angry birds, ולא בא לכם לשחק אפילו פעם אחת נוספת ב-Bubbles, זה הזמן להתקדם ל-Cody .Cody הינו פיצ'ר חדש באתר קהילת המשתמשים של MathWorks המאפשר לכם להפגין את יכולות התכנות שלכם ב-MATLAB על ידי פתרון של משימות פשוטות באתר עצמו. למה לכם לעשות את זה? כיוון שתוכלו לקבל חיווי על אופטימליות הפתרון שלכם לכל משימה, ולשפר את יכולות התכנות שלכם על ידי התבוננות בפתרונות שהציעו משתמשי MATLAB אחרים. ואם בא לכם, אגב, אתם גם יכולים להעלות חידות משלכם. כל חידה שתפתרו או שתעלו תזכה אתכם בנקודות ותקדם אתכם במעלה הטבלה !

למידע נוסף על המשחק ולהשתתפות בו, היכנסו לעמוד ה-Cody ב-MATLAB Central. שימו לב שיש להיות בעל חשבון באתר MathWorks על מנת לשחק במשחק, אבל אל דאגה – הרישום חינמי, ואף אחד לא יקשר בינכם לבין הפתרון שבו שכחתם להוסיף
נקודה-פסיק ...

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

פיצ'ר אחר שנוסף לאתר קהילת המשתמשים של MathWorks נקרא Trendy. Trendy הוא שירות לעקיבה אחר מגמות (Trends) ולהצגה שלהן, על סמך נתונים המתפרסמים בדפי אינטרנט ציבוריים. הפיצ'ר אוסף מידי יום את המידע אותו אתם מעוניינים לנתח, ומשתמש בקוד MATLAB שכתבתם על מנת להציג את הטרנד העדכני, כך שכל מה שנותר לכם לעשות הוא רק להיכנס לאתר על מנת לראות איך הטרנד נראה.

בדף ה-Trendy ב-MATLAB Central יש כבר מספר טרנדים שניתן לבחון. טרנד מעניין, למשל, הוא מספר המשתמשים בפיצ'ר הקודם שהוזכר, cody, ומספר החידות הזמינות בו. שימו לב לכך שגם על מנת להשתמש ב-Trendy יש צורך בחשבון באתר MathWorks, ואף ברישיון MATLAB תחת חוזה שירות.

מה דעתכם על החידה שפרסמתי? רוצים לתת קישור לחידה שאתם חיברתם? מצאתם טרנדים מעניינים ב-Trendy?

יום שלישי, 17 בינואר 2012

כיפת ברזל

כולנו נחשפנו בשנה האחרונה ליכולותיה של מערכת כיפת ברזל, המשמשת ליירוט רקטות קצרות טווח המשוגרות לעבר יישובי הדרום. המערכת המורכבת הזו, המהווה דוגמה ל-System of systems, מסוגלת להתמודד עם כל תנאי מזג האויר, באור ובחושך, ואף עם תרחיש הכולל מספר רב של טילים הנעים בו זמנית במרחב.

החל מגרסת R2010a, שיצאה לפני קרוב לשנתיים, נוספה ל-Simulink פונקציונליות הנקראת For Each Subsystem. הבלוק הזה מאפשר לבצע "סימולצית על" המורכבת מתת סימולציות של מספר מערכות בעלות אופי זהה הפועלות במקביל אך בעלות פרמטרים ותנאי התחלה שונים. ניתן, למשל, להשתמש בו לצורך מידול וסימולציה של תנועת להק מטוסים, קווי ייצור רובוטיים וכן יירוטי טילים.

זה בדיוק מה שעשה אריאל רובננקו, העובד יחד עמי בחברת סיסטמטיקס:

 אריאל, אשר הינו מהנדס אפליקציה לתחום הסימולציות האווירונאוטיות ובקרת טיסה, פיתח את המודל הבא:


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

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

ואם אתם רוצים להריד את הקוד ולהריצו אצלכם, תוכלו למצוא את המודל של אריאל כאן. כדי להריץ את המודל יש צורך ברישיון Simulink ו-SimEvents. אם אין לכם הרשאות לכלים האלה, אשמח לספק לכם גירסת ניסיון.
 
מה דעתכם על המודל של אריאל? האם הכרתם את בלוק ה-For Each Subsystem? מי מכם שמע על כלי ה-SimEvents?  

יום שני, 2 בינואר 2012

האצת ביצועי אלגוריתם לעיבוד וידאו בעזרת FPGA-in-the-Loop

"הרשו לי לפנות את הבמה פעם נוספת לטובת בלוגר אורח – יגאל ירוסלבסקי, אשר התארח בבלוג הזה לפני כחצי שנה. יגאל עובד יחד עמי בחברת סיסטמטיקס. ומתמחה בכלי MathWorks המיועדים לעולם התקשורת, עיבוד אות, יצירה אוטומטית של קוד HDL ואימות (Verification) שלו, וכן בתהליכי פיתוח של אלגוריתמים המתוכננים לפעול על FPGA-ים".
מה קיבלתם לראש השנה האזרחית? אתם לא באמת חייבים לענות, זאת הייתה שאלה רטורית שכל מטרתה היתה להביא אותי לספר על מה שאני קיבלתי. ובכן, אני קיבלתי לוח FPGA חדש, "צעצוע" שצפוי לספק לי שעות של הנאה בחודשים הקרובים. ומה היה הדבר הראשון אותו החלטתי לבדוק אחרי שפתחתי את הקופסא? ובכן, החלטתי לבדוק עד כמה הרצת האלגוריתם על גבי ה- FPGA יכולה להאיץ את ביצועי סימולציות ה-Simulink שלי.

אז הנה לכם, בפינה השמאלית עומד לו מעבד אינטל עם 4 ליבות הנמצא במחשב בעל 4 ג'יגה זכרון ומערכת הפעלה של 64 ביט. ומולו, בפינה הימנית, לוח FPGA של אחת משתי היצרניות הגדולות ביותר לשבבי FPGA. הלוח, אגב, איננו חמוש ב High-End FPGA חדש אלא ב-FPGA "ותיק" ממנו בשני דורות. אז מי לדעתכם ינצח? אם קראתם את הכותרת, אתם כבר יודעים את התשובה.

לטובת בדיקת הביצועים בחרתי במודל לדוגמה (DEMO) המסופק כחלק מה-HELP של MATLAB. הדמו עוסק בחידוד של וידאו על ידי שימוש ב-Computer Vision System Toolbox, והוא נמצא תחת כלי בשם EDA Simulator Link אשר שימש אותי לטובת הורדת קוד ה-HDL (הנוצר אוטומטית מתוך המודל) לתוך שבב ה-FPGA. אלה מכם שירצו לחזור על הפעולות שלי פשוט צריכים לחפש fil_videosharp_fpga ב-HELP בכל גרסת MATLAB החל מ-R2011a.

להלן המודל המיועד לריצה ב-Simulink "בלבד":


כאשר הרצתי חצי שניה של סימולציה ומדדתי זמן ריצה קיבלתי:

>> tic; sim('fil_videosharp_sim'); toc
Elapsed time is 752.932444 seconds.
לא מעט זמן... השאלה היא לאיזו תוצאה אפשר להגיע על ידי שימוש בלוח FPGA.

כדי לענות עליה, יש קודם כל לזהות איזה חלק מהמודל ניתן וכדאי להוריד אל ה-FPGA. ברור כי לא כל חלקי המודל ניתנים למימוש על גבי ה-FPGA, שכן המודל מורכב מלא מעט בלוקים שתפקידם לקרוא או להציג וידאו. אבל לב המודל, מסנן FIR דו-מימדי הצבוע בתמונה למעלה בצבע ורוד, בהחלט ניתן להורדה אל ה-FPGA, וטוב שכך. זהו צרכן זמן ה-CPU הגדול ביותר בסימולציה.

על מנת להוריד אלגוריתם לשבב FPGA, יש להפוך אותו לקוד Hardware Description Language, או בקיצור - HDL. ניתן לממש את האלגוריתם לעיל מחדש בשפת HDL באופן ידני, אך קל יותר פשוט להשתמש ב-Simulink HDL Coder שעושה זאת עבורנו בצורה אוטומטית – מהר יותר, ללא שגיאות קידוד, ופשוט יותר. כל מה שעלינו לעשות הוא להקליק עם הלחצן הימני של העכבר על הבלוק הורוד ולבקש יצירה של קוד HDL:

והתוצאה - קבצי ה-HDL של האלגוריתם (אצלי ברירת המחדל היא קבלת VHDL, אבל ניתן לקבל גם Verilog):

שימו לב כי הקבצים למעלה הינם "רק" קבצי מימוש האלגוריתם. על מנת ליצור את רכיבי השרות, האחראים בין היתר על ניהול התקשורת מול Simulink, יש לפתוח את אשף
ה-
FPGA-in-the-Loop  באמצעות הפקודה filWizard:

העבודה עם האשף די אינטואיטיבית, ובסיומה נוצרים בצורה אוטומטית קבצי השרות:

בנוסף, האשף יוצר גם בלוק Cosimulation אותו יש לשלב במקום הבלוק האלגוריתמי המקורי. שינוי נוסף שיש לבצע במודל המקורי הוא להתאים את הממשק בין המודל לבלוק הסימולציה, וכן יש לתרגם את ה-frames הדו-מימדים של אות הוידאו לוקטורים חד-מימדיים בעלי אותה כמות פיקסלים. המודל הסופי לצורך FPGA Cosimulation נראה כך:

וכעת, כל מה שנותר הוא רק לסתנז את קבצי ה-HDL לקבצים בינאריים הניתנים לטעינה לתוך ה-FPGA ולטעון אותם אל ה-FPGA. נשמע מסובך? אז תשמחו לגלות שגם תהליך זה נעשה בצורה אוטומטית. קליק כפול על בלוק ה-Cosimulation ולחיצה על Load יגרמו לביצוע תהליכי הסינתזה, המיפוי, המיקום, הניתוב וטעינת השבב:
לחיצה על כפתור ה-PLAY במודל ה-Simulink ומדידה של זמן הריצה עבור עיבוד 10 שניות של וידאו (פי 20 ממשך הוידאו שעיבדתי קודם לכן) מניבה את התוצאה הבאה:


>> tic; sim('fil_videosharp_fpga'); toc
Elapsed time is 7.571201 seconds.

סיכום כמותי:

Simulink בלבד:                         חצי שניה של וידאו מעובד = 753 שניות ריצה בפועל
קו-סימולציית Simulink + שבב FPGA: עשר שניות של וידאו מעובד = 7.6 שניות ריצה בפועל

בחישוב גס, שימוש ב- FPGA-in-the-Loop הביא להאצה של כמעט פי 2000 ! ואם הסימולציות שלכם כבדות יותר (כאלה שבהן איטרציה אחת יכולה לקחת שעות או אולי ימים), האצה של פי 2000 יכולה להיות קריטית לעתיד הפרוייקט שבמסגרתו הסימולציות האלה צריכות להתבצע. ואגב, אותם הכלים שהוזכרו לעיל יכולים לשמש לא רק לטובת האצת ביצועים, אלא אף לפיתוח השבב ולאימות קוד HDL ידני או קנוי מחברה חיצונית. אבל על כך אני כבר אכתוב בפעם אחרת.

האם הייתם מודעים ליכולת להאיץ סימולציות על ידי FPGA-in-the-Loop ? האם ידעתם שניתן גם להמיר קוד MATLAB לקוד HDL באופן אוטומטי?

יום ראשון, 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?