בוקר במיקרוסופט עם סשה ותכנות מקבילי

2 בספטמבר 2009

2 תגובות

במסגרת סדרת הארועים שמיקרוסופט מארגנת לקראת ההשקה של Visual Studio 2010 אי שם בשנה הבאה. זה הארוע השני בסדרה. הארוע הוקדש הפעם לנושא הטכנולוגיות וכלי התכנות המקבילי שנכללים בגירסא הבאה של VS2010.

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

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

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

סשה עבר בצורה מסודרת על היכולות החדשות של VS2010 והראה דוגמאות שהסבירו כל יכולת כזו. הוא התחיל במעבר על שרותי המערכת לביצוע תהליכים במקביל בצורה מפורשת (כל מה שקשור ל Task ול for, foreach, invoke וכו'). החלק הזה תפס את כל החצי הראשון של היום. משם סשה עבר למקביליות משתמעת (PLinq וכו'), מנגנוני סינכרון חדשים ולמבני נתונים חדשים ששימושים בתחום המקבילי. אחר כך קצת תיאוריה על Design Patterns מקביליים. הקטע האחרון עסק ב Debugging מקבילי ב VS2010 והראה את היכולות החדשות של מעקב אחר Parallel Tasks ושל Parallel Stacks. הקינוח היה קצת על תכונות עתידיות כמו STM.Net, מאסטרו, קצת Profiling וכו'.

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

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

נקודה נוספת שהפריע לי, זה שכל היום עסק בעיקר בקוד מנוהל (.NET) ולא הוזכרו בו בכלל, היכולות החזקות של VS2010 בתחום המקבילי בקוד הלא מנוהל (Native).

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

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

2 תגובות

  1. Sasha Goldshtein3 בספטמבר 2009 ב 8:49

    גדי, תודה רבה על ה- live blogging.

    אני מקבל בברכה את שתי ההערות שלך. לגבי Native, אתה יכול לתאר לעצמך שהייתי שמח מאוד לדבר על ConcRT אבל משיקולי זמן זה לא התאפשר (מה גם שהאג'נדה של יום העיון לא נקבעת באופן בלעדי על ידיי :-)).

    לגבי הרקע התיאורטי, לשם כך העברתי את יום העיון הקודם–שם נכנסתי לעובי הקורה בסוגיות התיאורטיות יותר על חשבון הדוגמאות המעשיות (למשל, שם כמעט ולא הראיתי Parallel Extensions).

    שוב תודה,

    סשה

    הגב
  2. דניאל וייסברג3 בספטמבר 2009 ב 11:43

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

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

    הגב