יום ראשון, 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? לאיזו סביבה אתם מקמפלים?

יום ראשון, 11 בספטמבר 2011

גרסה חדשה, לכבוד השנה העברית החדשה


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


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

• קיצור משך עליית תוכנת MATLAB על גבי סביבת Windows, בדגש על התקנות רשת.

• ממשק הודעות שגיאה ידידותי יותר למשתמש.

• הוספת אפשרות לשינוי שמות פונקציות ומשתנים ב-MATLAB בצורה אוטומטית, מבלי להיחשף לסיכונים הכרוכים בשימוש ב-Find & Replace.

• פונקציית matfile ב-MATLAB ליצירת אובייקטי MAT File המאפשרים טעינה של מקטעי משתנים מתוך MAT Files. הדבר שימושי כאשר ב-MAT File שמור משתנה גדול, ומעוניינים לטעון רק חלק ממנו ל-Workspace.

• כלי אינטראקטיבי בשם  Spreadsheet Import Tool לייבוא מידע מתוך קבצי Excel וקבצי CSV לתוך MATLAB, המאפשר להגדיר כללי טיפול בנתונים שאינם מספרים (הכלי מחליף את ה-Import Wizard).

• אפשרות לייצר System Objects מותאמים אישית.

• ב-Parallel Computing Toolbox נוספו מעל 30 פונקציות הניתנות למיקבול על גבי ה-GPU (סה"כ קיימות מעל 150) וכן נוספה יכולת להריץ על גבי ה-GPU אפליקציות אשר קומפלו באמצעות ה-MATLAB Compiler.

• מספר ה-worker-ים המקומיים המרבי האפשרי בשימוש ב-Parallel Computing Toolbox עלה מ-8 ל-12.

• פונקציית blockproc של ה-Image Processing Toolbox, המשמשת לעיבוד תמונות גדולות במיוחד, יכולה להשתמש ב-Parallel Computing Toolbox על מנת להאיץ את ביצועיה.

• ב-MATLAB Coder נוספה היכולת לייצר קוד C++/C גם מתוך קוד MATLAB בו מתבצעת מחיקה של שורות/עמודות מטריצה.

• תמיכה בטכנולוגיית Bluetooth ב-Instrument Control Toolbox, כלי המאפשר לתקשר עם מכשירי מדידה וציוד בדיקה ולשלוט עליהם.

• הרחבת התמיכה של ה-Data Acquisition Toolbox בהתקני NI.

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


• אפשרות ליצור mask כמעט לכל בלוק ובלוק ב-Simulink (ולא רק לתת-מערכות), על מנת לייצר Icon ותיבת דיאלוג מותאמת אישית.

• אפשרות לשנות את אופן הצגת הגרפים בבלוק ה-Scope.

Simulink Projects - כלי אינטראקטיבי לניהול קבצים הרלוונטיים לפרויקט כלשהו ב- Simulink ולעבודה עם תוכנות ניהול גרסאות. באמצעות הכלי ניתן ליצור סביבה משותפת לכל חברי הצוות העובדים על הפרויקט, דבר המקל על העבודה בגישת Model-Based Design ומייעל אותה.

Simulink Code Inspector – כלי חדש לאוטומציה של סקירות-קוד עבור תקני בטיחות.

• ב-Simulink Coder, כלי הממיר מודלי Simulink ודיאגרמות Stateflow לקוד C++/C, נוספה אפשרות לייצר קוד multitasking אשר יכול לרוץ במקביל על מעבדים מרובי ליבות הפועלים על מערכות ההפעלה Windows, Linux או MAC OS X.

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


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

יום ראשון, 28 באוגוסט 2011

עניין של זמן (דגימה)

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

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



ל-Simulink שני מנגנונים לקידום צעד הזמן – צעד קבוע (Fixed Step) או צעד
משתנה (Variable Step). במנגנון הראשון, ממש כמו בעולם הדיגיטלי, צעד הדגימה הינו קבוע והסימולציה תרוץ במרווחי זמן קבועים. שיטה זו מתאימה כשאנחנו רוצים לבחון אלגוריתם כפי שירוץ במימושו הסופי.



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


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


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


בקטע הקוד הבא מוצגים לדוגמא שני אותות מתוך שתי ריצות שונות של Simulink, שנדגמו בזמני דגימה שונים:


אם ברצוננו לחשב את הממוצע של אותות אלו, עלינו ליצור מהם אובייקטי timeseries:



כעת, לאחר שיצרנו אובייקטים אלו, ניתן לסנכרן בין הזמנים השונים, באמצעות שימוש ב-method שנקראת synchronize. האופציה 'Union' מגדירה כי ברצוננו לחבר את האותות, ולייצר אותות הכוללים את כל זמני הדגימה, ולא רק את החיתוך ביניהם. ניתן להגדיר כאן פרמטרים נוספים, כמו שיטת האינטרפולציה בה יש לעשות שימוש בין כל שתי דגימות זמנים שונות:
ועכשיו, כל שנותר הוא לחשב את הממוצע, ולהציג את האות החדש לצד האותות המקוריים, כאשר כולם מסונכרנים מבחינת זמני הדגימה:
והערה לסיום - ניתן לבצע את כל הפעולות שבוצעו לעיל גם על ידי שימוש ב-GUI מיוחד שפותח לצורך כך, ושאותו ניתן לפתוח על ידי הקשת tstool . ממשק זה מאפשר ליצור timeseries, להציג אותם, לשרשר אותם, לנתח אותם, ועוד. אז זכרו - אם יש לכם משימה מסויימת שאתם רוצים לבצע ב-MATLAB, תמיד אפשר לכתוב קוד - אבל לא תמיד צריך.

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




יום ראשון, 10 ביולי 2011

כל המוסיף גורע מזמן הריצה

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

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



הלולאה הראשונה כופלת את כל האיברים שבמטריצות x ו-y, ולפיכך אמורה לרוץ יותר זמן מיתר הלולאות, אשר כופלות מטריצות הקצרות בשורה אחת או בעמודה אחת. אולם בפועל, הלולאה הראשונה רצה הכי פחות זמן מבין השלוש – רק 0.25 שניות על המחשב שלי, בעוד שהשניה רצה 1.75 שניות, והשלישית – 6.65 שניות.

מדוע הלולאה הראשונה היא המהירה ביותר ?

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

ומדוע הלולאה השניה רצה יותר מהר מהשלישית?

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

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

יום שני, 9 במאי 2011

מ-MATLAB ל-HDL

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


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


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


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


ובמקרה שלי, אני משתמש ב-MATLAB על מנת לעצב ולבצע סימולציות למערכות חומרה ספרתית.


איך זה אפשרי? המאמר המפורט להלן יתן לכם הצצה ראשונה לשימוש ב-MATLAB עבור מערכות חומרה ספרתית. 



כנגד ארבעה System Toolboxes דיברה תורה

בפוסט הקודם סקרתי "ממעוף הציפור" את החידושים בגרסת 2011a של כלי MathWorks והבטחתי להתמקד בחלק מהם. החידוש המשמעותי הראשון שבו אעסוק הינו השקתם של ה-System Toolboxes, שנועדו להקל על פיתוח מערכות עיבוד אות ותמונה, מערכות Phased Array ומערכות תקשורת.

למי שדואג, ה-Image Processing Toolbox ו- Signal Processing Toolbox ממשיכים להתקיים, ובגרסה החדשה פשוט הצטרפו אליהם מספר כלים המהווים את משפחת ה- System Toolboxes, שנועדה להקל על פיתוח מערכות עם MATLAB ו-Simulink בהיבטים של:

• מהירות הסימולציות,
• יכולת עבודה עם טיפוסי מידע מסוג Fixed-Point,
• כמות האלגוריתמים האמינים המוכנים לשימוש,
• יצירה אוטומטית של קוד C++/C מתוך האלגוריתמים,
• שימוש חוזר ב-IP בעת מעבר בין MATLAB ו-Simulink.

מדובר למעשה בצעד שלישי בנתיב שבו MathWorks החלה לצעוד בו בגרסת 2010a, עם השקת טכנולוגיית ה-System Objects , כאשר החל מגרסת 2011a כבר אין אפילו צורך לקנות Blocksets על מנת לעבוד עם ה-System Objects, שממילא עובדים איתם רק מתוך סביבת MATLAB, (למי שלא יודע Blocksets הם כלי עזר לסביבת Simulink).

הכלים החדשים הינם:

1. DSP System Toolbox – הכלי משמש לתכנון וסימולציה של מערכות עיבוד אות, והוא איחוד של שלושה מרכיבים מוכרים –
• Filter Design Toolbox
• Signal Processing Blockset
• Signal Processing System Objects
הכלי דורש את ה-Signal Processing Toolbox לשם פעולתו.

2. Communications System Toolbox – הכלי משמש לתכנון, סימולציה וניתוח השכבה הפיזית (Physical Layer) של מערכות תקשורת, והוא איחוד של שלושה מרכיבים מוכרים –
• Communication Toolbox
• Communication Blockset
• Communication System Objects
הכלי דורש את ה-DSP System Toolbox לשם פעולתו.

3. Computer Vision System Toolbox – הכלי משמש לתכנון וסימלציה של מערכות ראיה ממוחשבת ועיבוד וידאו. הכלי הינו איחוד של שני מרכיבים מוכרים ומרכיב חדש –
• Video & Image Processing Blockset
• Video & Image Processing System Objects
אלגוריתמים יעודיים לראייה ממוחשבת ב-MATLAB ו-Simulink.
הכלי דורש את ה-DSP System Toolbox וה-Image Processing Toolbox לשם פעולתו.

4. Phased Array System Toolbox – כלי חדש
למי שלא מכיר, Array Signal Processing פירושו שימוש במערך גלאים הנמצאים במקומות שונים, על מנת לגלות אותות תלויי זמן ומקום ולחלץ מידע לגביהם (למשל – מאיזה כיוון הגיע האות). הכלי יכול להיות שימושי למפתחי מערכות מכ"מ, מערכות Ultrasound, מערכות תקשורת מרובות-אנטנות, מערכות חיפוש גז ונפט ומערכות לבדיקות לא-הורסות.

לסיכום, הנה תרשים שמתאר את המעברים השונים ואת ה-Dependencies השונים:

האם יצא לכם להשתמש ב-System Toolboxes החדשים? אילו פונקציות חסרות לכם לצורך פיתוח אלגוריתמי ראיה ממוחשבת? על אילו חידושים ב-R2011a תרצו שארחיב בפוסטים הבאים?

יום שלישי, 12 באפריל 2011

שי לחג – גרסת R2011a

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


בתקופה הקרובה אסקור לעומק כמה מהחידושים המשמעותיים, אבל בינתיים – הנה משפט אחד על כל אחד מהעיקריים שבהם:
 
System Toolboxes חדשים לפיתוח ב-MATLAB ו-Simulink:
  • Computer Vision System Toolbox – מכיל אלגוריתמים חדשים מתחום הראיה הממוחשבת ומשלב בתוכו את יכולות ה-Video and Image Processing Blockset.
  • Phased Array System Toolbox – כלי חדש המשמש לתכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות רפואיות (למשל Ultrasound), מערכות סלולר ועוד.
  • DSP System Toolbox – מאחד את יכולות ה-Filter Design Toolbox וה-Signal Processing Blockset.
  • Communications System Toolbox – מאחד את ה-Communications Toolbox וה-Communications Blockset.
כלי יצירת קוד חדשים:
  • MATLAB Coder – לייצור קוד C/C++ ישירות מתוך פונקציות MATLAB, ללא צורך ברישיון Simulink.
  • Simulink Coder – לייצור קוד C/C++ ישירות מתוך Simulink ו-Stateflow (מאחד את יכולות ה-Real-Time Workshop וה-Stateflow Coder, ומוסיף על יכולות ה-MATLAB Coder).
  • Embedded Coder – לייצור קוד Embedded ישירות מתוך MATLAB, Simulink או Stateflow (מאחד את יכולות ה-Real-Time Workshop Embedded Coder, Embedded IDE Link וה-Target Support Package, ולא מחייב רישיון Simulink).
בין היכולות החדשות במשפחת מוצרי MATLAB:
  • ביצועים משופרים לפונקציות רבות מתחום האלגברה הלינארית.
  • אפליקציות המקומפלות תוך שימוש ב-MATLAB Compiler וב-Parallel Computing Toolbox מסוגלות לרוץ באופן מקבילי על עד 8 ליבות אצל משתמש הקצה.
  • אפשרות לייצר אפליקציות Standalone מיישומים העושים שימוש ב-System Objects, באמצעות ה-MATLAB Compiler.
  • פותרן (Solver) חדש ב-Optimization Toolbox לבעיות תכנות רבועי (Quadratic Programming) בעלות אלפי אילוצים.
  • ממשק חדש לפתרון בעיות אופטימיזציה של תיקי השקעות ב-Financial Toolbox.
בין היכולות החדשות במשפחת מוצרי Simulink:
  • Signal Logging Selector להשוואת תוצאות סימולציה של מודלים שונים וריצות שונות של אותו מודל ב-Simulink.
  • FPGA-in-the-loop, Customizable I/O ותמיכה ברכיבי Xilinx ב-Simulink HDL Coder, EDA Simulator Link ו-xPC Target.
  • זיהוי אוטומטי של שגיאות Overflow וחלוקה באפס בעת שימוש בטכנולוגיית Polyspace ב-Simulink Design Verifier.     
מידע נוסף על הגירסה החדשה ניתן למצוא כבר כעת באתר MathWorks.

יום רביעי, 9 במרץ 2011

וגרה מטריצה עם וקטור

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

ראשית, הייתם מגרילים את המטריצה:















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










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














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















הסיבה שבגללה לא הייתם יכולים להפחית את וקטור הממוצעים ישירות מהמטריצה היא אי התאמה בין מימדי המערכים:








אולם פונקציה שרבים אינם מכירים יכולה להתמודד עם חוסר ההתאמה הזה בין מימדי המטריצה והוקטור כל עוד יש התאמה מינימלית – הרשו לי להציג בפניכם את bsxfun, והנה דוגמה לשימוש בה לצורך ביצוע פעולת החיסור (minus)
בין המטריצה A והוקטור b:















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


לסיום, שימו לב שכמובן היינו יכולים לעשות את כל המשימה עם שורת קוד אחת:














האם הכרתם את bsxfun? חשבתם על דרך אחרת לבצע את המשימה שהוצגה? יש פונקציה שעזרה לכם בעבר ולדעתכם רבים לא מכירים אותה? האם אתם מכירים את השימוש ב-@ בתוך MATLAB?

יום חמישי, 10 בפברואר 2011

הכל חוץ מקפה

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

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


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


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



מה הדבר הכי מעניין שעשיתם עם כלי MathWorks? האם ידעתם שהחל מגרסת R2010b ה-Image Acquisition Toolbox תומך גם בסטנדרט GigE Vision? האם שיערתם שהשיא העולמי של פתרון קוביה הונגרית עומד על 6.77 שניות? ניסיתם פעם להמיר קוד MATLAB או מודל Simulink ל-vhdl או verilog?

יום חמישי, 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 תרצו שאכתוב?