استفاده از توان محاسباتی رایانهها در تحقیقات علمی و
فعالیتهای دانشگاهی، مراکز تحقیقاتی و شرکتهای تجاری، کاربرد روزافزونی
پیدا نموده است؛ ازاینرو نیاز به پردازش سریعتر افزایش یافته و به یک
نیاز اساسی تبدیل شده است. سرعت کامپیوترهای شخصی کنونی نسبت به اجداد خود
بهطور سرسامآوری افزایش یافته است اما علیرغم وجود این موضوع باز جوابگوی
نیازهای مطرحشده نیست. ازجمله عرصههایی که احتیاج به کامپیوترهایی با
سرعت پردازش بسیار بالا دارند میتوان به برنامههای شبیهسازی در تحقیقات
هستهای، نانو فناوری محاسباتی، برنامههای پیشبینی وضعیت هوا، برنامههای
فیلمسازی کامپیوتری، برنامههای ساخت انیمیشن حرفهای و بسیاری از
زمینههای مختلف دیگر که همگی بهسرعت پردازش بسیار زیاد نیاز دارند تا در
یک زمان مناسب به نتیجه برسند اشاره کرد. یک راهحل برای این معضل، استفاده
از سوپرکامپیوترها است. درست است که سرعت پردازش سوپرکامپیوترها بسیار
بالاتر از کامپیوترهای شخصی است اما استفاده از آنها در همه موارد
مقرونبهصرفه نیست؛ ضمن آنکه این فناوری در انحصار بعضی از کشورهای
توسعهیافته است و سایر کشورها از دسترسی به این تجهیزات استراتژیک محروم
هستند. راهحل دیگر در دستیابی به سرعت پردازش بسیار بالا، استفاده از روش
پردازش موازی است. به بیان ساده در این روش چند پردازنده (در اینجا منظور
پردازندههای گرافیکی) معمولی با همکاری یکدیگر به اجرای یک برنامه
میپردازند که طی این همکاری، برنامه با سرعت بالاتری اجرا میشود. به
عبارت دیگر، پردازش یا محاسبهی موازی، شکلی از پردازش است که در آن
دستورالعملهای بسیاری در یک زمان و به صورت همزمان انجام میشوند و بر
اساس این اصل اجرا میشوند که مسائل بزرگ را اغلب میتوان به مسائل کوچکتر
تقسیم نمود که سپس باهم و بهصورت موازی اجرا شوند.
کودا در نوامبر 2006 توسط انویدیا معرفی گردید، کودا یک پلتفرم محاسبات
موازی همهمنظوره و مدل برنامهنویسی است که رابطهای برنامهنویسی را در
اختیار برنامهنویسان قرار میدهد و به طراحان نرمافزار اجازه میدهد تا
از تواناییهای جیپییو (GPU سرواژه Graphics Processing Unit بوده و به
معنای واحد پردازش گرافیکی است) در جهت محاسبات همهمنظوره روی واحد پردازش
گرافیکی استفاده کنند. پلتفرم کودا یک لایه نرمافزاری است که دسترسی
مستقیم به مجموعه دستورالعملهای مجازی جیپییو و عناصر محاسبات موازی را
میدهد. این پلتفرم به گونهای طراحی شده است که با زبانهای برنامهنویسی
سی، سیپلاسپلاس، فرترن و متلب کار میکند. این قابلیت دسترسی، کار را
برای متخصصان برنامهنویسی موازی به منظور استفاده از منابع جیپییو به
همان شکلی که از دایرکتایکس (DirectX) یا اپنجیال (OpenGL) استفاده
میکنند، هموار کرده است. با استفاده از این معماری ما میتوانیم برنامه
خود را به زبان سی یا سیپلاسپلاس نوشته و سپس بر روی پردازنده گرافیکی
اجرا کرده و از سرعت آن لذت ببریم. همچنین مورد مهم دیگر وجود پلتفرمی است
که بتواند بر روی دستگاههای مختلف اجرا شود، کودا با این شعار که میتواند
برای شما سطح قابل قبولی از کارایی و مقیاسپذیری را در یک زمان به ارمغان
آورد، وارد بازار برنامهنویسی شده است. درباره معماری کودا گفته میشود
که کودا معماریای است که به جای محدود کردن شما، توسط کارایی یکسری
کتابخانه، اجازه میدهد که کار موردنظرتان را انجام دهید. در گذشته نوشتن
نرمافزار برای جیپییو به این معنی بود که برای جیپییو باید برنامه
نوشته میشد، در مقابل همانطور که عنوان شد، کودا به شما اجازه میدهد با
زبانهای معمول برنامهای بنویسید که بر روی جیپییو نیز اجرا شود، همچنین
به دلیل آنکه کودا میتواند نرمافزار شما را به صورت مستقیم روی
سختافزار گرافیکی کامپایل کند، کارایی به دست آمده نیز افزایش مییابد.
کتاب حاضر مرجع مناسبی برای برنامهنویسی موازی با کودا بوده و همچنین
آموزش و درک عمیقی از مطالب برنامهنویسی موازی با کودا را با انجام
مثالها و برنامههای این کتاب محقق میسازد. لذا خوانندگان، اساتید و
دانشجویان میتوانند با استفاده از مثالها و برنامههای این کتاب یکی از
مشکلات عمده سیستم آموزشی موجود، یعنی بیان مطالب به صورت صرفاً تئوری و نه
با آموزش در قالب مثالهای عملی را فائق آیند.این کتاب مشتمل بر دوازده
فصل و دو پیوست است؛ که تا حد ممکن سعی شده که مطالب و مباحث مربوط به کودا
به تفصیل و به صورت جامع آموزش داده شود و از آن مهمتر اینکه در این کتاب
تأکید بسیار بر مطالب عملی کدنویسی با کودا و مثالهای عملیمحور در کنار
مطالب تئوری بوده است به گونهای که در این کتاب بالغ بر یکصد و سی مثال و
پروژه عملی در بخشهای گوناگون کودا آورده شده است و سعی گردیده که کتاب
به صورت خودآموز برای خوانندگان نوشته شود و آموزش آن گام به گام از سطح
مبتدی تا پیشرفته بوده و تقریباً اکثر مباحث کودا را پوشش دهد و هر
خوانندهای نیز که پیشزمینهای در زمینه کامپیوتر و کدنویسی داشته باشد
بتواند از آن بهره گیرد.