CUDA Programming Applications

وبلاگ آموزشی کودا

CUDA Programming Applications

وبلاگ آموزشی کودا

مفهوم Thread و Block و Grid در برنامه نویسی CUDA

Thread :Thread اجرای یک هسته با یک شاخص(index) داده شده است. هر Thread از شاخص خودش برای دسترسی به عناصر در آرایه استفاده می کند به طوری که همکاری بین Thread ها کل مجموعه داده را پردازش می کند.

Block :Block یک گروه از Thread ها است. در مورد اجرای Thread ها درون یک Block نمیتوان زیاد صحبت کرد - آنها می توانند همزمان و یا به صورت سریال و بدون نظم خاص اجرا شوند. شما می توانید Thread ها را هماهنگ کنید، تا حدی، با استفاده از تابع _syncthreads () که یک Thread را در یک نقطه خاص در هسته متوقف می کند تا زمانی که تمام Thread های دیگر در آن بلوک به همان نقطه برسند.

Grid  :Grid  یک گروه از Block ها است. هیچ هماهنگی بین Block ها وجود ندارد.
اما کجا Thread ها ، Block ها و Grid  ها در واقع اجرا می شود؟ با توجه به تراشه گرافیکی G80 Nvidia ، به نظر می رسد محاسبات به صورت زیر توزیع می شود:


Grid   :GPU    کل Grid  توسط یک تراشه GPU  مدیریت می شود.

 Block    :MP   تراشه GPU به عنوان مجموعه ای از چند پردازنده سازماندهی شده است(MPs) ، هر پردازنده مسئول مدیریت یک یا چند Block در یک Grid است. یک Block هرگز در میان چندین پردازنده (MPs) تقسیم نمی شود.

Thread   :SP    هر MPبیشتر به چند پردازنده جاری تقسیم می شود(SPs)، هر SP یک یا چند Thread در یک بلوک را مدیریت می کند.
  
علاوه بر سلسله مراتب واحد پردازش، G80 همچنین یک سلسله مراتب حافظه را فراهم می کند:

حافظه کلی (Global memory): این حافظه از یک بانک تراشه های SDRAM متصل به تراشه     GPU  ساخته شده است. هر Thread در هر MPمی تواند در هر مکانی از Global memory بخواند یا بنویسد.گاهی اوقات نیز حافظه دستگاه(Device memory) نامیده می شود.
 
انبار بافت(Texture cache) : این یک حافظه در هر MPاست که می تواند با داده های Global memory پر شود تا آن ها مانند یک مخزن عمل کنند. Thread هایی که در MPاجرا می شوند به دسترسی فقط خواندن از این حافظه محدود می شوند.

انبار حافظه ثابت :(Constant cache) این یک حافظه فقط برای خواندن در هر MPاست.

حافظه مشترک(Shared memory)  : این یک حافظه کوچک در هر MPاست که می تواند خوانده / نوشته شود توسط هر Thread در یک Block اختصاص داده شده در آن MP.

ثبات:(Registers) هر MPدارای تعدادی Register است که بین SP های آنها به اشتراک گذاشته شده است.


به طور معمول، سطوح بالای سلسله مراتب حافظه ذخیره سازی های بیشتر و کند تر را فراهم می کنند (زمان دسترسی 400 تا 600 سیکل (cycles))  در حالی که سطوح پایین تر کوچکتر و سریعتر هستند
نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.