ترتیب اجرای برنامهها در کودا
هر برنامهی کودا از دو قسمت 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 است.