שיעור 12: טיפול בשגיאות וסנכרון: cudaGetLastError, cudaDeviceSynchronize
כמעט כל קריאה ל-CUDA Runtime מחזירה ערך מסוג cudaError_t. כשהכול תקין הערך הוא cudaSuccess, שערכו המספרי 0; כל ערך אחר מציין שגיאה. נקודה קריטית: הפעלת kernel באמצעות <<<>>> היא אסינכרונית — היא חוזרת ל-host מיד, לפני שה-kernel סיים (ולעיתים אף לפני שהתחיל). לכן שורת ההפעלה עצמה לא מחזירה את שגיאת ז
שליחת kernel ל-GPU היא כמו לשים מכתב בתיבת הדואר: ברגע ששמת אותו, אתה חופשי להמשיך — אבל עדיין לא יודע אם הוא יגיע ליעד. cudaGetLastError בודק אם הכתובת על המעטפה תקינה (שגיאת שליחה), ו-cudaDeviceSynchronize זה כמו לחכות לאישור מסירה שמספר אם משהו השתבש בדרך.
- cudaError_t
- סוג הערך שכמעט כל קריאת CUDA מחזירה. cudaSuccess (ערכו 0) פירושו הצלחה; כל ערך אחר הוא שגיאה.
- cudaGetLastError
- מחזיר ומאפס את קוד השגיאה האחרון. קוראים לו מיד אחרי הפעלת kernel כדי לתפוס שגיאות הפעלה.
- cudaDeviceSynchronize
- חוסם את ה-host עד שה-GPU מסיים את כל העבודה, ומחזיר שגיאות שקרו בזמן ריצת ה-kernel.
- הפעלה אסינכרונית
- הפעלת kernel חוזרת ל-host מיד, לפני שה-kernel סיים. לכן שורת ההפעלה לא יכולה להחזיר שגיאות זמן-ריצה.