שיעור 5: אינדוקס: threadIdx, blockIdx, blockDim
כשמפעילים kernel על grid של בלוקים, כל thread צריך לדעת על איזה איבר במערך הוא אחראי. CUDA נותנת לכל thread שלושה משתנים מובנים: threadIdx.x — האינדקס של ה-thread בתוך הבלוק שלו; blockIdx.x — האינדקס של הבלוק בתוך ה-grid; ו-blockDim.x — מספר ה-threads בכל בלוק. כדי לקבל אינדקס גלובלי יחיד שמזהה את ה
דמיין/י מגרש חניה עם שורות של מקומות. blockIdx.x זה מספר השורה, blockDim.x זה כמה מקומות בכל שורה, ו-threadIdx.x זה המקום שלך בתוך השורה. כדי לדעת את מספר המקום הכולל שלך מתחילת המגרש: שורה כפול מקומות-לשורה, ועוד המקום שלך בשורה.
- threadIdx.x
- האינדקס של ה-thread בתוך הבלוק שלו. רץ מ-0 עד blockDim.x-1, ומתאפס בכל בלוק.
- blockIdx.x
- האינדקס של הבלוק בתוך ה-grid. רץ מ-0 עד gridDim.x-1.
- blockDim.x
- מספר ה-threads בכל בלוק (הממד שנקבע בהפעלה). זהה לכל הבלוקים ב-grid.
- אינדקס גלובלי
- מזהה יחיד של thread בכל ה-grid: i = blockIdx.x * blockDim.x + threadIdx.x.