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 در یک بلوک را مدیریت می کند.
 
ادامه مطلب ...

جمع دو بردار با C++

در این مبحث قصد محاسبه زمان حاصل از جمع دو آرایه ی یک بعدی با طول یک میلیون با استفاده از زبان ++c را داریم.

 

  ادامه مطلب ...

تست نصب مناسب CUDA

cudaError_t cudaMalloc ( void** devPtr, size_t size )


تابع فوق جهت تخصیص یک محدوده خطی از حافظه در سمت GPU با سایز خاص در واحد بایت استفاده می شود که حافظه اختصاص شده توسط Pointer برگشت داده می شود. لازم به ذکر است که این تابع علاوه بر اختصاص فضای حافظه مقدار بازگشتی نتیجه آن را نیز دارند. اگر GPU با موفقیت کار تخصیص حافظه را انجام می دهد، پیغام cudasuccess ودر غیر اینصورت cudaErrorMemoryAllocation را برگشت می دهد.

 

ادامه مطلب ...

نصب کودا و ملزومات سخت افزاری و نرم افزاری

راهنمای نصب CUDA در WINDOWS


مقدمه:


CUDA® یک پلت فرم محاسباتی موازی و مدل برنامه نویسی است که توسط NVIDIA طراحی شده است.

 CUDA با استفاده از قدرت واحد پردازش گرافیکی (GPU) باعث افزایش چشمگیر در محاسبات شد.

 CUDA با چندین هدف طراحی شده است:

ارائه یک مجموعه کوچک از زبان های استاندارد برنامه نویسی،مانند C که امکان پیاده سازی ساده الگوریتم های موازی را فراهم می کنند. با استفاده از  CUDA C / C ++، برنامه نویسان می توانند به جای صرف وقت بر روی پیاده سازی کد ها تمرکز خود را بر روی موازی سازی الگوریتم ها بگذارد.

‣ CUDA محاسبات ناهمگن را پشتیبانی می کند یعنی محلی که در آن برنامه ها می توانند همزمان از CPU و GPU استفاده کنند. بخش های قابل اجرا به صورت سریالی بر روی CPU و بخش های موازی بر روی GPU اجرا می شوند. CPU و GPU به عنوان دستگاه های جداگانه ای که فضای حافظه ای خودشان را دارند، مورد استفاده قرار می گیرند. این ویژگی همچنین اجازه محاسبات همزمان بر روی CPU و GPU بدون درگیری بر روی استفاده از حافظه می دهد.


GPU ها با قابلیت CUDA دارای صدها هسته هستند که می تواند هزاران تابع محاسباتی را به طور دسته جمعی اجرا کنند. این هسته ها منابع مشترک که شامل یک فایل ثباتی(register file) و یک حافظه مشترک(shared memory) است را دارا می باشند. حافظه به اشتراک گذاشته شده بر روی تراشه اجازه می دهد تا وظایف موازی بر روی این هسته ها اجرا شود، تا داده ها را بدون ارسال آن بر روی گذرگاه حافظه سیستم به اشتراک بگذارد.


این راهنما به شما نحوه نصب و بررسی عملکرد صحیح ابزارهای توسعه CUDA را نشان خواهد داد.

 

ادامه مطلب ...