שיעור 3: ה-Kernel הראשון — __global__ ו-<<<>>>
עד עכשיו ה-GPU היה רעיון — אלפי עובדים זעירים שמחכים למשימה; עכשיו ניתן להם את העבודה הראשונה. הקוד שכל עובד על ה-GPU מריץ נקרא kernel: פונקציה אחת קטנה שכל ה-threads מריצים יחד, כל אחד על הנתון שלו. מסמנים אותה במילת המפתח __global__, היא תמיד מחזירה void, ומפעילים אותה מה-CPU בעזרת תחביר ההפעלה המ
kernel הוא כמו מתכון שאתה מצמיד על לוח המודעות במטבח ענק. אתה (ה-CPU) לא מבשל — אתה רק תולה את המתכון וצועק <<<2 שולחנות, 4 טבחים>>>. שמונה הטבחים מתחילים לעבוד, ואתה כבר הולך לעשות משהו אחר בלי לחכות שיסיימו.
- __global__
- מסמן kernel: פונקציה שרצה על ה-GPU ומופעלת מה-CPU. תמיד מחזירה void.
- תחביר הפעלה <<<>>>
- התחביר kernel<<<numBlocks, threadsPerBlock>>>(args) הקובע כמה בלוקים וכמה threads בכל בלוק.
- grid ו-block
- block הוא קבוצת threads; grid הוא קבוצת הבלוקים של הפעלה אחת. סך ה-threads = numBlocks כפול threadsPerBlock.
- הפעלה אסינכרונית
- ה-CPU לא מחכה לסיום ה-kernel; הוא ממשיך מיד. צריך סנכרון מפורש לפני קריאת תוצאות.