פודקאסט מספר 363 של רברס עם פלטפורמה - אורי ורן מארחים את יקי ויובל מחברת NVIDIA לשיחה (קצת) על החברה בישראל ו(בעיקר) על מה עושים היום עם GPU, האפליקציות המעניינות ומהם הדברים עליהם עובדים בישראל.יקי טבקה מוגדר ב-NVIDIA כ- Distinguished Engineer (כמו Individual Contributor, ברמה גבוהה), עוסק כבר הרבה שנים בכלי פיתוח תוכנה, בעיקר בתחום של גרפיקה תלת-מימדית, חישוב מקבילי ובינה מלאכותית.יובל מזור הוא Senior Solution Architect ב-NVIDIA - זה שתפקידו לקחת את הטכנולוגיות שיקי מדבר עליהן (וגם בונה, וגם עובדים יחד) וליישם אצל לקוחות.אם יצא לכם לפרק מחשב פעם ולראות מה יש בפנים, בטח נתקלתם בלוגו ירוק יפה של NVIDIA - החברה מוכרת הסטורית בהקשר של כרטיסים גראפיים, והיום (וכבר לא מעט זמן) יש כבר הרבה יותר מזה.החברה נוסדה ב-1993 ע”י שלושה יזמים עם ~$20M השקעה של VC, היום החברה מוערכת בכ-$90B, ויש לה מעל 11,000 עובדים. גדלה יפה.ההתחלה הייתה עם כרטיסי משחק - המעבד המרכזי לא ממש מתאים לציור פיקסלים, והתחילו לייצר מאיצים למיניהם. הראשון ש-NVIDIA הוציאה ב-98 נקרא RIVA TNT, שידע לייצר 2 פיקסלים במקביל (!).מאז התחום התחום התפתח . . . הכרטיס הנוכחי יודע לעשות Ray Tracing, בינה מלאכותית, לשמש כמובן ככרטיס ל-Gaming - ומגיע מבחינת ביצועים ל-14 טרה-פלופס (Tera FLOPS), שזה מספר לא ממש נתפס עם 12 אפסים של פעולות בשנייה.החברה פעולת בשלושה שווקים מרכזיים - גרפיקה תלת מימדית: Gaming, Professional Graphics (CAD, CAM, MRI, etc.) and moreחישוב מקבילי (High Performance Computing, Super Computers) בינה מלאכותית - בעיקר Deep Neural Networksבערך בשנת 2001, כרטיסים גרפיים החלו להיות ניתנים לתכנות (לפני כן היו Fixed pipeline), מה שגרם לאנשים לחשוב “למה רק גרפיקה?” - אפשר גם פיסיקה, חישוב מזג אוויר ועוד - ונוצר התחום של General Purpose computing on GPUs :GPGPU, שהפך למאוד משמעותי ב-NVIDIA.127 מתוך 500 מחשבי העל הגדולים בעולם כוללים מעבדים של NVIDIA, מערכים של High Performance Computing ועוד.רגע, GPU ו-CPU . . . על ה-Central Processing Unit אפשר להריץ חישובים (גם פיסיקליים) למיניהם, אז למה ה-GPU (או ה-GPGPU) יודע יותר טוב?אלו שני יצורים שונים לגמרי, עם מטרות שונותהמטרה של ה-CPU היא לקחת כל Thread ולהריץ אותו הכי מהר שאפשר (Minimal Latency). יש המון “טריקים” לאיך אפשר עשות את זה: למשל Out Of Order Execution - אם צריך לחשב ++i וגם ++j אז אפשר במקביל; אפשר לעשות Pre-fetching (למשל להביא נתון מהזכרון לשימוש בעוד 20 פקודות כדי שלא יחכה, אם אני יודע לצפות את זה סטטיסטית), אפשר לעשות Branch Prediction ועוד הרבה שיטות.זה מתאים להמון אפליקציות - Office למשל, או בכלל כל אפליקציה עם לוגיקה סדרתית. “סדרתית” זו מילת המפתח, כי לפעמים אנחנו מגיעים לבעיות שהן “Embarrassingly Parallel” - ניתנות לפירוק להמון בעיות “קטנות” ומקביליות, למשל גרפיקה תלת-מימדית, חישובי מטארולוגיה וכו’. לזה כבר מתאים יותר GPU.ה-GPU הוא מכונה שנועדה למקסימום Throughput (בשונה ממינמום Latency של ה CPU)איך זה עובד? לדוגמא אותו מעבד גרפי למשחקים שדיברנו עליו (ההוא עם ה- 14TeraFLOPS. . .) יודע “להחזיק באוויר” 4600 Warps - כש-Warp מייצג 32 יחידות אריתמטיות לוגיות (ALU) שיודעות לעשות כפל, חילוק וכו’. בניגוד ל-Thread של ה-CPU שמחזיק Instruction Pointer לכל ALU, כאן יש 32 יחידות לוגיות עם Instruction Pointer יחיד שיודע לעשות Crunching לכל ה-32 פעולות במקביל.תנשמו עמוק - יש 4600 כאלה במקביל.נזכיר שהמטרה היא אופטימיזציה של Throughput ולא Latency, אז אם למשל נתקעים כי צריך נתון מהזכרון, פשוט “זורקים הצידה” את ה Warp שרץ ומריצים Warp אחר. אם גם הוא ניתקע - שוב זורקים ומריצים עוד אחד - וכיוון שיש כמות עצומה של כאלה באוויר, אנחנו “מחביאים” את ה-Latency שלהם - כל אחד לא בהכרח רץ הכי מהר שהוא יכול, אבל ה-Throughput הוא עצום.רן רוצה להקשות בכל זאת - בשנים האחרונות (יותר מ-10 כבר) יש מעבדים מרובי ליבות (32, 64, איפה עצרנו?). האם זה נותן פתרון דומה ל-GPU?לא.טכנית - אפילו מבחינה מספרית, מעבד עם 8 ליבות ונניח 16 Threads או אפילו 32 או 64 - כשה-GPU יודע לבצע סדר 150,000 פעולות ALU במקביל . . . זה בסדר גודל שונה לחלוטין. אולי אם היה לי מעבד עם 150,000 ליבות היה על מה לדבר.האם יש גם שוני ב- instruction set? יש דברים שפשוט יותר קל לעש…