האם NVIDIA פתחה את הקוד לדרייבר ה-GPU שלה?

החדשות שהופיעו באתרים שונים (לדוגמא: Phoronix) לפיו חברת NVIDIA החליטה לפתוח את קוד המקור של הדרייברים לכרטיסי ה-GPU שלהם – גרמו ללא מעט אנשים לחייך ואולי לאמר "ניצחנו", חברת NVIDIA נכנעה ופתחה את הקוד לדרייברים שלה!

אז זהו. שלא.

הדבר הראשון שכדאי להבין – זו הסיבה מדוע NVIDIA התעקשה להשאיר את הדרייברים כקוד סגור, והסיבה לכך קשורה להיסטוריה: NVIDIA קנתה חברות שונות והשתמשת בקניין הרוחני. בנוסף, NVIDIA חתמה על הסכמי רישוי שונים כולל השכרת פטנטים מחברות כמו S3, IBM וכו' הקשורים למימוש פונקציות שונות בדרייברים, והסכמים אלו אסרו על NVIDIA לפתוח את הקוד לחלקים אלו, כך של-NVIDIA לא נותרה ברירה ודרייברים ל-GPU ביתיים ומקצועיים – נשארו סגורים. לעומת זאת, בכל הקשור לציוד משובץ (Embedded) – ב-NVIDIA (עם דרייברים ל-Tegra, ה-GPU למערכות משובצות שלהם) התחילו הכל מאפס, כך שהם יכלו מהרגע הראשון לפתוח את הקוד לדרייברים, ואכן הדרייברים הללו נמצאים בחלקים השונים בלינוקס, כמו ב-Kernel, ב-Mesa ובמקומות אחרים.

אז מה בעצם השוני הגדול הפעם?

מה שקורה, הוא ש-NVIDIA פיתחה מיקרו מעבד חדש מבוסס RISC-V שנמצא בתוך ה-GPU (זה נקרא GSP) ואותו מעבד מבצע את מה שהדרייברים הקודמים עשו עם ה-CPU במחשב, במהלך איתחול ה-GPU כשה-OS עולה, רק שעכשיו הכל נעשה עם ה-GSP, באופן עקרוני:

  1. הדרייבר ב-Kernel מאתחל את ה-GPU ואת ה-GSP (ללא האיתחול, הדברים היחידים שאפשר לעשות עם ה-GPU זה בחירת מצב טקסטואלי ממה שנתמך דרך VESA, ומצב Frame Buffer mode, אם בא לך לשנן מחדש את קטלוג הקללות שאתה יודע..).
  2. הדרייבר מעלה קושחה סגורה ומוצפנת וה-GSP "לוקח פיקוד"
  3. בסיום, הכרטיס מודיע ל-Kernel לגבי מהות הציוד, כניסות, יציאות, פונקציות אפשריות, יכולות וכו'
  4. לאחר שהמודול הופעל בהצלחה, חלקים אחרים (User space) מתחילים לפעול מול המודול בזכרון

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

האם זה אומר שממחר בבוקר הדרייבר הפתוח הוא המענה החדש של NVIDIA? לא ממש. הדרייבר החדש הוא רק בראשית דרכו, יש לו עוד דרך חתחתים לעבור (והפעם כל יצרני הפצות לינוקס משתתפים בבניה ושילוב הדרייבר והכנת חבילות התקנה), כך שלבינתיים ממשיכים לעבוד עם הדרייברים הבינאריים הרגילים. בנוסף, ה-GSP בגירסה החדשה קיים רק בכרטיסים מבוססי Turing. שאר הכרטיסים הישנים יותר – ממשיכים לקבל תמיכה רק דרך הדרייברים הבינאריים הרגילים.

אז האם NVIDIA "ראתה את האור" בכך שהיא פותחת דרייבר חדש בקוד פתוח? רחוק מכך. אם תרצה לקודד וידאו, אם תרצה להעלות מהירות שעון של ה-GPU ואם תרצה להריץ קוד המצריך CUDA או OpenGL או דברים אחרים – תצטרך לעבוד מול החלקים האחרים (User Space) ש-NVIDIA משחררת כקוד סגור בלבד, ובשלב זה לא נראה ש-NVIDIA הולכת לפתוח את הקוד הזה.

ועוד משהו קטן לגבי המתחרה הגדולה של NVIDIA – חברת AMD. האם גרסאות הדרייברים בקוד פתוח שלהם נותנים בעצם יותר מעצם העובדה שהם פתוחים? לא תמיד. ב-AMD פשוט מחביאים את הפונקציות העיקריות והחשובות – בתוך קושחה בינארית מוצפנת. כמו ב-NVIDIA, רק שב-AMD החלקים הקשורים ל-User space – פתוחים. אגב, גם במקרה של אינטל, הדברים זהים למה ש-AMD מבצעים (אם כי גם שם יש חלקים סגורים, היי Intel Media SDK), ויש גם קוד חופף ל-AMD ואינטל בחלקים כמו Mesa וכו'.

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

קצת על הכרטיסים הגרפיים החדשים של nVidia

חברת nVidia הציגה אתמול את הכרטיסים הגרפיים למשתמש הביתי/סמי-מקצועי, סידרת ה-RTX, דגמי 2070,2080,2080Ti, וזאת אחרי שנתיים "יובש" שבו החברה לא הציגה התפתחות משמעותית לקהל זה (למעט Titan V שיותר מיועד לאלו שמתחילים בתחום ה-AI/DL). לקהל אחר החברה הוציאה מס' כרטיסי Tesla ורק לפני כמה ימים הציגה החברה למשתמשים המקצועיים את סידרת ה-Quadro RTX, במחירים סופר יוקרתיים. (אחרי הכל, אתה קונה כרטיס שביצועיו נמוכים מאחיו המשפחתיים, רק שעם זכרון ECC ואחריות יותר ארוכה, אז מדוע שלא תשלם פי 4?)

במשך שעתיים הציג מנכ"ל החברה את ה-RTX, הוא דיבר על Deep Learning, על AI, על Ray Tracing וכמה הכרטיסים החדשים סופר-מהפכניים וסופר מהירים ב-Ray Tracing. אין ספק, המנכ"ל צודק, הכרטיס, ארכיטקטורת Turing באמת מהפכנית.

אבל בסופו של יום nVidia לא הציגה משהו אחד די פשוט: איך הכרטיסים החדשים והכה-נוצצים בביצועים עם תוכנות עכשויות. אם אני עורך וידאו ואני רוצה לרנדר (הן אובייקטים והן להוצאת קובץ לשידור) – בכמה טוב הכרטיס החדש? איך הביצועים שלו על DirectX, OpenGL, Vulkan? סביר להניח שהביצועים יותר טובים בשימוש CUDA (כי פשוט יש יותר ליבות, יש זכרון יותר מהיר וכו'), אבל בכמה הוא יותר טוב?

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

תחום ה-Deep Learning, כמוהו אחיו ה-Artificial Intelligence – הם תחומים מאוד חשובים. גם בתחום ה-Ray Tracing לא התרחשו הרבה התפתחויות לשוק הביתי/סמי מקצועי זה זמן רב, ואם היית רוצה להשתמש ב-Ray Tracing, הדבר הראשון שהיית צריך להצטייד בו זה המון סבלנות. רינדורים כאלו הם איטיים. אין ספק שכרטיסי ה-RTX בהחלט מאיצים דברים וההדגמות נראו מעולות.

אבל יש כמה בעיות בעניין:

  • אין שום סטנדרט ל-Ray Tracing. כל תוכנה עובדת בדרכה ואולי מאפשרת יבוא מתוכנה מתחרה, אבל בניגוד לפורמטים של קבצי וידאו ו-Codecs, אף קבוצה עדיין לא הקימה סטנדרטים שחברות יתחייבו לממש אותן.
  • אין תוכנות מקצועיות שיכולות לנצל את ה-RTX מבחינת Ray Tracing. אני מאמין שבעקבות ההכרזה, חברות תוכנה רבות יוסיפו תמיכה ל-RTX, אבל זה תהליך שלוקח זמן, לפעמים שנה ולפעמים (ברוב המקרים) יותר.
  • מיקרוסופט הוסיפה תמיכת Ray Tracing ל-DirectX, אבל ב-Vulkan ו-OpenGL, ספריות וארכיקטורות שרצות על מק, iOS, אנדרואיד, לינוקס וכו' – אין שום תמיכה.

במילים אחרות: זה נחמד ש-nVidia מוציאה את כרטיסי ה-RTX וגם SDK למפתחים, אבל עד שיופיעו תוכנות שינצלו את ה-RTX, יהיה כדאי להמתין לבדיקות ולראות אם קניית כרטיסי ה-RTX 2070,2080,2080Ti תהיה שווה. בל נשכח שיש מלאי ענק בחוץ של כרטיסי GTX 1070, 1080 ו-1080Ti בשוק שמחיריהם ירדו, ואולי שיפור של כמה אחוזים לא יצדיק את רכישת "המילה" האחרונה בתחום ה-GPU.