סיקור מקיף

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

כך קובל ד”ר עמי מרובקה מהחוג למדעי המחשב באוניברסיטת בר-אילן, בכנס משתמשי תוכנות אינטל, ובראיון מקיף לאתר הידען * המועצה להשכלה גבוהה: ועדה שבדקה את הנושא לא אמרה דבר על תכני התכנות המקבילי, אך אנו קוראים לאוניברסיטאות להתקדם לטכנולוגיות העדכניות ביותר

ד''ר עמי מרובקה, בר אילן
ד''ר עמי מרובקה, בר אילן

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

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

למה בעצם?

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

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

נעילה (Deadlock), ו-DATA RACE CONDITIONS, הן בעיות מאוד חמקמקות, מאוד קשות לגילוי, כמו וירוסים הן יושבות בקוד והאפליקציה עובדת כמו שצריך והם יכולים להתעורר אחרי חודשיים ואף אחרי שנתיים, לעשות את הנזק ולהעלם כלעומת שבאו. קשה לאתר זאת ללא שימוש בכלים.

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

מי אחראי לכך שלא מלמדים תכנות מקבילי?

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

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

מה לגבי המכללות?

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

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

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

מה קורה בעולם?

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

את דבריו של מרובסקה מחזק ג'יימס ריינדרס, אוונגליסט תוכנה ראשי ומנהל מוצרי פיתוח תוכנה באינטל העולמית, היה המרצה המרכזי בסמינר מיוחד על כלי אינטל למפתחי תוכנה אותו קיימה במלון דן אכדיה בהרצליה חברת מאגרי תוכנה, מפיצת תוכנות אינטל בישראל. “היום מתקרבים בשוק לכך כ- 100% מהמעבדים יהיו מקבילים, ומעבדי ליבה יחידה הם המיעוט”, אמר ריינדרס. “זה מציב מספר בעיות לתוכניתנים. ככל שיהיו לי יותר ליבות התוכנה תרוץ מהר יותר, אך זה לא אומר כמה מהר יותר. היעילות אינה המפתח – אלא עצם ההאצה. זה מסע ארוך להגיע לשם”.

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

המועצה להשכלה גבוהה: מרובקה לא פנה, וועדה בינלאומית שבדקה את הנושא לא המליצה

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

14 תגובות

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

  2. אני למדתי לתואר ראשון במדעי המחשב באונ’ תל אביב. במסגרת התואר למדתי בשנת 1985 או 1986 קורס בתיכנות מקבילי על ידי ד”ר (היום פרופסור) עוזי וישקין. הקורס זכור לי עד היום כאחד הקורסים המענינים בתואר. למעשה ה”קידוד” של תוכניות נעשה בפסואודו שפה שפותחה על ידו. כמובן שבאותם ימים לא היה בנמצא מחשב ומערכת הפעלה שמימשו אותה, אבל הרעיונות והכלים הדרושים לפיתוח שכזה נלמדו בקורס.
    שנה לאחר מכן למדתי (במסגרת תואר שני) קורס ב-ליספ מקבילי שגם פותח על ידי דוקטור באוניברסיטה (צר לי אך אינני זוכר את שמו).
    לכן אני מופתע מאוד לקרוא שכיום אין כל לימוד בנושא באוניברסיטאות. האם זה באמת כך?

  3. טוב נו, אני ממש נהנה לראות איך האלגוריתם שלי פועל פרקטית!

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

    אבל כל אחד וההנאות שלו 🙂

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

  5. חזי, ואם יש לך תוכנה שלוקחת 80% CPU USAGE מליבה אחת וקצת אטית ועוד כל שאר התוכנות במחשב שלך שנמצאים על הליבה השנייה ולוקחים 5 CPU USAGE, לא היה יותר נכון לחלק את התוכנה הראשונה לשתי הליבות וקח גם לשפר את ביצועיה (וביצועי כל תכנה אחרת ‘שתרצה’ להשתמש בליבה זאת?

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

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

  7. אני לא מבין בתחום, ואולי בגלל זה יש לי שאלת תם.

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

    מה אני מפספס?

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

  9. באותו נושא,
    http://asyncop.com/MTnPDirEnum.aspx?treeviewPath=%5Bf%5D+Video%5Bc%5D+Introduction+To+Multicore+Programming

    מעוד מעניין למי שמעוניין :)…

    נראה לי שהחברה שתצליח לבנות קומפיילר ‘מקבילי’ תהיה המייקרוסופט הבאה (אם זו לא תהיה מייקרוסופט בעצמה)

    מיכאל יש שמועות שאתה מתכנת לא רע, רוצה להצטרף לסטארת-אפ לבניית קומפיילר מקבילי?

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

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

  12. כתבה מעניינת. קצרת חסרה פה הגהה.

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

כתיבת תגובה

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

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