جریان پردازشی در کودا و مفهوم HOST و DEVICE

ترتیب اجرای برنامه‌ها در کودا

هر برنامه‌ی کودا از دو قسمت Host و Device تشکیل شده است. قسمت Host برنامه‌ای است که به صورت ترتیبی روی CPU اجرا می‌شود و قسمت Device برنامه‌ای است که به صورت موازی روی هسته‌های GPU اجرا می‌شود. ترتیب اجرای این برنامه‌ها در شکل زیر دیده می‌شود.

توابعی که روی Device اجرا می‌شوند توابع Kernel نام دارند و توابعی هستند که به صورت همزمان روی تمام هسته‌های GPU اجرا می‌گردند. این توابع از درون کد قسمت Host  فراخوانی می‌شوند و هنگام فراخوانی می‌بایست تعداد این توابع را که قرار است به صورت همزمان انجام شوند مشخص کرد.

کد مربوط به قسمت Device با کلمه‌ی کلیدی __global__ آغاز می‌شود و تعداد دفعات اجرای این کد در <<< , >>> تعیین می‌شود.



همانگونه که پیشتر هم گفتیم، کدهای نوشته شده ابتدا و به طور پیش‌فرض در کامپایلر استاندارد C خود سیستم، کامپایل می‌شوند. ابزار Nvidia وقتی دستوراتی می‌بیند که صرفا با host سروکار دارند، به راحتی آن‌ها را به همان کامپایلر سیستم (یا به عبارتی کامپایلر host) واگذار می‌کند؛ چراکه کدها در این حالت در جهانی بدون Cuda سیر می‌کنند. اما زمانی که کلمه کلیدی __global__ می‌آید، به کامپایلر هشدار می‌دهد که این تابع باید برای اجرا روی device کامپایل شود (و نه روی host). بعارتی دیگر، nvcc (کامپایلر Nvidia)، تابع (kernel) را به کامپایلری می‌دهد که مسئول مدیریت کدهای نوع device است و تابع main را به کامپایلری می‌دهد که مسئول مدیریت کدهای نوع host  است.

نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.