امروزه ایدهی پردازش موازی در انجام محاسبات رایانهای تقریبا به یک روش غالب و فراگیر مبدل شده است. زمینه هایی همچون مدلسازی رفتار ذرات فیزیکی، محاسبات مربوط به کاربردهای تجاری، هواشناسی، شبیهسازی و ... در مقیاس قابل توجهای از این ایده بهره گرفته و محاسبات سنگین خود را به کمک آن انجام میدهند.
واژه ی پردازش موازی یک لفظ عام است که به طیف وسیعی از مفاهیم اطلاق می شود. این لفظ محدوده ای شامل یک پردازشگر چند هسته ای ساده تا یک شبکه ی رایانه ای بزرگ که محاسباتش را به صورت توزیع شده انجام می دهد در بر می گیرد؛ فصل مشترک تمامی این حوزه ها انجام موازی و پایاپای محاسبات توسط چند عنصر پردازشی است. این عناصر پردازشی می توانند یک ابر رایانه ی بزرگ، یک رایانه ی خانگی، GPU های یک کارت گرافیکی و یا حتی یک تراشه ی کوچک الکترونیکی و یا هر عنصر پردازشی دیگری باشند. تنها نکته ی مهم این است که عناصر فوق باید بتوانند در یک معماری یکپارچه و مناسب با یکدیگر تعامل داشته باشند.
یکی از معماری های جدیدی که در سال 2006 توسط شرکت NVIDIA معرفی شد معماری CUDA است. این معماری به پردازنده های کارت گرافیکی این امکان را می دهد که علاوه بر پردازش موازی داده های گرافیکی سایر پردازشها را نیز انجام دهند. از این رو می توان گفت که CUDA یک معماری پردازش موازی است که به کارتهای گرافیکی ساخت شرکت NVIDIA این امکان را می دهد که به عناصر پردازشی همه منظوره مبدل شوند. البته باید به این نکته توجه داشت که پیش از ظهور CUDA نیز کارتهای گرافیکی وظایف خود را به صورت موازی انجام می دادند ولیکن معماری آنها به گونه ای طراحی شده بود که محاسبات مربوطه تنها برای پردازش های مربوط به کاربردهای گرافیکی مناسب بود و انجام سایر محاسبات توسط آنها با دشواری بسیار زیادی همراه بود. سرانجام با ظهور CUDA کارتهای گرافیکی این امکان را پیدا کردند که به سادگی محاسبات همه منظوره را انجام دهند.
برای استفاده از قدرت محاسباتی بالای کارتهای گرافیکی NVIDIA کافی است الگوریتم مورد نظر خود را به کمک API های موجودی که برای معماری CUDA طراحی شده اند، پیاده سازی و اجرا کنیم. این API ها در حقیقت واسط های برنامه نویسی سطح پایینی هستند که ارتباط بین لایه های پایین سیستم یعنی سخت افزار و نرم افزارهای سیستمی را با برنامه های کاربردی ممکن می سازند. دو مورد از مهمترین API هایی که برای استفاده از معماری CUDA طراحی شده اند API های OpenCL و DirectCompute هستند.
ماهیت و محل عملکرد API ها این مطلب را به وضوح مشخص می کند که استفاده کردن از آنها بسیار مشکل و طاقت فرسا است. بنابراین برای تسهیل برنامه نویسی باید روشی را پیش گرفت که برنامه نویس را از مراجعه و درگیری مستقیم با API ها در امان نگه دارد. خوشبختانه این روش وجود دارد و برنامه نویس به راحتی می تواند برنامه ی خود را با یک زبان سطح بالا مثل C توسعه دهد و آسوده خاطر باشد که کامپایلرِ آن زبان، API های مورد نیاز او را به صورت خودکار فرا خواهد خواند.
در مورد API های معماری CUDA نیز این امکان فراهم شده است و زبانهای سطح بالای موجود، آنچنان توسعه داده شده اند که برنامه نویس می تواند با خیال راحت به توسعه ی کد موازی خود بپردازد. یکی از این موارد زبان CUDA C است که در حقیقت تعمیمی است بر زبان C استاندارد و با به کارگیری برخی دستورات و توابع جدید امکان استفاده از معماری CUDA را مهیا می سازد.