יום עיון על Multi Core Tools אוניברסיטת תל אביב, חלק שלישי ואחרון

29 ביוני 2009

אין תגובות

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

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

מתכנת רב ליבות טוב, נמצא היום מבחינת המיקום שלו בפרמידת המקצוענות התכנותית הנדרשת. קצת מעל מתכנת של Device drivers, הרבה מעל מתכנת CPP, ובמרחק שנות אור ממתכנת VB או COBOL. זה שהוסיפו לשפה מילות מפתח כמו Parallel_Loop או Lock. או זה שנותנים לך ספריות שלמות כמו Open MP או TBB לא כל כך עוזר, למי שאין לו מושג על Data Dependency ועל Scalability, אלא להיפך, זה רק מגדיל את הסיכוי שהוא יגרום יותר נזק. הבעיה עם הנזק הזה, זה שאתה מגלה אותו לא רק אחרי שהמערכת נמצאת אצל הלקוח, אלא גם הרבה זמן לאחר שהיא גרמה המון נזקים מצטברים, שכבר קשה לתקן אותם.

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

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

אבל מה עושים עם אותם מתכנתים, שבגלל שיקולים כמו עומס עבודה וחוסר יכולת, לא יוכלו לכסות את הפער בזמן הנדרש ? עבור אלה צריך לבנות כלים, שיאפשרו להם לכתוב את הקוד שלהם, כאילו הוא סדרתי והקומפילר / מערכת ההפעלה, כבר יחליטו לבד, איך למקבל את זה הכי טוב שאפשר. בעולם המיקרוסופטי PLINQ ו F# הם דוגמאות לכיוונים כאלה.

גיא כיסח את הצורה לכל הפתרונות הקיימים לבעיה, כשהוא יורה לכל הכיוונים במהירות ויעילות שלא היו מביישים אף איש מכירות של מיקרוסופט (ואני מקווה שהוא לא ישנא אותי לעולמים על ה"מחמאה" הזו). המוטו של גיא היה, שהוא רוצה באמת ובתמים את הגביע הקדוש, דהינו מערכת, שתהיה כללית ולא ספציפית לתחום מסויים (כאן PLINQ נפצע קשה). שלא תדרדר אותנו לתחום של שפות פונקציונאליות (כאן חטף F# פגיעה ישירה ונדם). שלא תצטרך ללמוד כלים מורכבים לאיתור בעיות ואנליזה כדי לבנות קוד (כאן חוסלו בצורה ממוקדת כל כלי הפיתוח והאנליזה של מיקרוסופט ואינטל), ושאתה לא צריך לעשות כלום בקוד (כלום !!) אלא רק לקחת אותו כמו שהוא כתוב, ולהריץ אותו רגיל, והמערכת תעשה את השאר. כאן פחות או יותר חוסל כל  מי ששרד עד השלב הזה, אבל העיז לפתוח את הפה, ולהוסיף פה ושם איזה אופרטור או מילת מפתח חפה מפשע ותמימה לשפה. גיא גם טרח לבצע וידוא הריגה לכמה כיוונים שכבר היו מתים מזמן כמו JVSTM ו Atom-Java ליתר בטחון. ממש מחסל מקצועי. לאחר שקולות הקרב נדמו, והקברנים באו לקבור את הגופות, נשאר כמובן, באורח נס, רק פתרון אחד בחיים, Deuce.

 Juval 080

Deuce הוא פתרון שמבוסס על Java. אתה מצרף לספרית ה Run Time של Java שכבה שנותנת שרותים. אתה מתלבש על מנגנון הטעינה של ה Classes, ומשנה אותם בזמן הטעינה בטכניקות שמזכירות Code Injection של WCF, ואתה מקבל קוד, שהוא מוגן מקביליות בצורה הכי טובה שיש, ובלי צורך לשנות כלום בקוד שלך (פרט ללהוסיף באיזה שהוא מקום בהתחלה, שאתה רוצה את השרות הזה).

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

Juval 087

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

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

המרצה האחרון של היום היה Hazim Shafi ממיקרוסופט.שדיבר על Parallel tools in the upcoming VS 2010. חזים לא חידש לי הרבה, כי אני משתעשע בנושא הזה עוד מה PDC של שנה שעברה. פחות או יותר מאז שהכלים המקביליים של מיקרוסופט, הוכרזו פחות או יותר רשמית, ולא היו יותר משהו סודי. מה שהיה יותר מעניין בהרצאה הזו, זה שהמרצה לא נכח באולם, אלא הרצה ב Teleconferencing תוך שימוש במקבילה של Live messenger לארגונים. איכות הקול היתה סבירה, אבל המסך של המרצה, היה ברזולוציה גדולה מהמסך של המקרן, מה שחייב שמישהו ישב על הבמה, ויזיז מדי פעם את השקפים, כך שניתן יהיה לראות את התמונה המלאה. גם הדמו קצת סבל מהבעיה הזו (לא יותר מדי). ההרצאה הזו היתה מעין סגירת מעגל, לתאור של הכלים של אינטל, שהיו בהרצאה הראשונה של היום.

  Juval 118

יש הרבה חידושים מענינים בתחום הזה ב VS2010 ואני אשתדל איל"ז לכתוב עליהם פעם.

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

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

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

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

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

כתיבת תגובה

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