در سال های گذشته وقتی کامپیوترها هنوز همانند حال قدرتمند نبودن انجام کارهای پیچیده محاسباتی یک دردسر بزرگ بود. دانشمندان برای شبیه سازی آب و هوا یا تحلیل داده های ژنتیکی، ساعت ها و حتی روزها منتظر می ماندند تا نتایج به دست آورند. بازی های ویدیویی هم داستان خود را داشتند، گرافیک های ساده و باگ های زیاد که تجربه بازی را حسابی خراب می کرد. اگر در حال بازی مورد علاقه خود باشید ولی همه چیز با سرعت پایین پیش روی کند یا قصد تماشای فیلم با کیفیت 4K را داشته باشیم باید ساعت ها صبر کنیم تا رندر شوند، یا حتی در حوزه پزشکی، پزشکان نمی توانند به سرعت تصاویر MRI و CT را تحلیل کنند و تشخیص بیماری ها با تاخیر زیادی مواجه می گردید. پاسخ حل این مشکلات در دنیای تکنولوژی به CUDA وابسته می باشد، هسته های CUDA در کارت های گرافیک انویدیا، واحدهای پردازشی موازی هستند که محاسبات ریاضی پیچیده را سریع تر از CPU انجام می دهند. وظیفه اصلی آن ها اجرای وظایف گرافیکی و محاسباتی موازی، نظیر رندر کردن صحنه های سه بعدی، پردازش داده های تصویری یا اجرای الگوریتم های یادگیری ماشینی است.
عبارت CUDA همیشه یکی از متفاوت ترین و مهم ترین قسمت های اطلاعات فنی کارت های گرافیک شرکت انویدیا Ndivia بوده و برخی کاربران به درستی نمی دانند که هسته کودا دقیقاً چیست و چه تاثیری در سرعت بازی ها دارد. CUDA مخفف Compute Unified Device Architecture که به عنوان یک فناوری پردازشی از شرکت NVIDIA شناخته می شود. هسته کودا یکی از بحث برانگیزترین و اجزای کلیدی تشکیل دهنده اطلاعات فنی کارت های گرافیک این شرکت به شمار می رود. عبارت CUDA به معنای معماری محاسبات یکپارچه دستگاه است. CUDA توسط شرکت Nvidia ایجاد شده است و هنگامی که برای اولین بار معرفی شد، نام مخفف Compute Unified Device Architecture بود، اما Nvidia بعداً استفاده رایج از این نام اختصاری را کنار گذاشت. CUDA SDK اولیه در ۱۵ فوریه ۲۰۰۷ برای Microsoft Windows و Linux عمومی شد، پشتیبانی از Mac OS X بعداً در نسخه دو اضافه شد.
در سال 1996 انویدیا تلاش خود برای رقابت در بازار شتاب دهنده های سخت افزار گرافیکی یا 3D را با محصولات ضعیف آغاز کرد. در سال 1999 این شرکت اولین GPU ساخته شده به نام GeForce 256 را معرفی کرد. در آن زمان دلیل اصلی ساخت GPU، بازی های رایانه ای بودند و بعد از آن بود که از آن برای ریاضیات، علوم و مهندسی، محاسبات حجیم و غیره استفاده می شد. در سال 2003 تیمی از محققان به سرپرستی Ian Buck زبانی به نام Brook را ارائه دادند که از گسترش زبان C به همراه ساختار های داده موازی توسعه یافته بود. بعد ها Buck به انویدیا پیوست و در سال 2006، اولین راه حل تجاری برای محاسبات همه منظوره بر روی GPU یا همان GPGPU را راه اندازی کردند. OpenCL رقیب CUDA در سال 2009 به منظور ارائه استانداردی برای محاسبات ناهمگن که محدود به پردازنده های AMD، Intel و Nvidia نباشد، توسط شرکت Apple و Khronos Group راه اندازی شد. در حالی که OpenCL به دلیل چند سکویی و عمومی بودن محبوب است، اما در پردازنده های Nvidia به خوبی CUDA عمل نکرده است و از بسیاری کتابخانه ها یادگیری عمیق پشتیبانی نمی کند یا فقط پس از انتشار آن توسط CUDA از آن پشتیبانی می کند.
اولین چیزی که باید درک کنید، این است که یک پردازنده گرافیکی می تواند هزاران و حتی میلیون ها دستور را به صورت همزمان پردازش کند. یک GPU جهت انجام چنین کاری، به تعداد زیادی هسته های کوچک نیاز دارد که به صورت موازی و هم زمان این پردازش ها را انجام دهند. البته باید در نظر داشت که هسته های کوچک GPU تفاوت های بسیاری با هسته های بزرگ پردازنده ها دارند. به عنوان مثال کارت گرافیک Nvidia RTX 3090 دارای 16384 هسته CUDA است و در مقابل پردازنده رده بالای AMD Threadripper 3970X فقط 64 هسته دارد. به وسیله تکنولوژی کودا، برنامه نویسان با استفاده از زبان های C و ++C یا امثال آن می توانند کدها را بدون نیاز به اسمبل شدن به صورت مستقیم برای پردازش به کارت گرافیک ارسال کنند تا سرعت اجرای بازی افزایش یابد. درباره کاربرد هسته کودا باید گفت که این هسته به تنهایی چیزی مشابه با یک هسته پردازنده گرافیکی GPU است، با این تفاوت که نسبت به آن دارای معماری ساده تری بوده اما در تعداد بسیار بالاتری درون کارت گرافیک قرار می گیرد.
هسته CUDA به شما امکان می دهد تا محاسبات موازی را بر روی کارت های گرافیک NVIDIA انجام دهید. این تکنولوژی از NVIDIA به توسعه دهندگان امکان می دهد تا از توانایی محاسباتی قدرتمند کارت های گرافیک NVIDIA برای انجام محاسبات علمی و عددی مختلف بهره برداری کنند. کودا در صنعت بازی های کامپیوتری، پردازنده های گرافیکی برای رندر گرافیکی و برای محاسبات فیزیک بازی اثرات فیزیکی مانند زباله، دود، آتش، مایعات استفاده می شود.به عنوان نمونه می توان PhysX و Bullet را نام برد. در حوزه فیلم و سرگرمی، شرکت Weta Digital یکی از نخستین شرکت هایی است که از قدرت GPU برای رندر تصاویر استفاده کرده است. کودا همچنین برای سرعت بخشیدن به برنامه های غیر گرافیکی در زیست شناسی محاسباتی، رمزنگاری و سایر زمینه ها استفاده شده است.
کودا دارای چندین مزیت نسبت به محاسبات همه منظوره سنتی بر روی GPU یاGPGPU با استفاده از APIهای گرافیکی است حال مزایای استفاده از هسته CUDA عبارتند از:
1. عملکرد بهتر، با استفاده از GPU به عنوان منبع اصلی برای محاسبات موازی، می توانید عملکرد بهتری در برنامه هایی که نیاز به محاسبات سنگین دارند، از جمله یادگیری عمیق و شبکه های عصبی عمیق Deep Learning، به دست آورید.
2. زمان کمتر، محاسبات موازی بر روی GPU معمولاً زمان کمتری نسبت به محاسبات معمولی بر روی CPU به طول می انجامد. این مزیت در برنامه هایی که برای اجرای سریع نیاز به استفاده از محاسبات موازی دارند، بسیار مهم است.
3. پشتیبانی از بیشترین زبان ها و محیط های برنامه نویسی: هسته CUDA از زبان ها و محیط های برنامه نویسی متعددی مانند C++و Python و MATLAB پشتیبانی می کند.
4. کد می تواند از آدرس های دلخواه در حافظه بخواند.
5. حافظه مجازی یکپارچه CUDA 4.0 و بالاتر
6. حافظه یکپارچه CUDA 6.0 و بالاتر
7. حافظه مشترک، CUDA یک منطقه حافظه مشترک سریع را نشان می دهد که می تواند بین رشته ها به اشتراک گذاشته شود. این کار می تواند به عنوان یک کش مدیریت شده توسط کاربر استفاده شود و پهنای باند بالاتری فراهم می کند.
8. دانلود و بازخوانی سریعتر به GPU و از آن
9. پشتیبانی کامل از عملیات اعداد صحیح و بیتی، از جمله جستجوی عدد صحیح
برای استفاده از هسته CUDA شما باید کتابخانه های CUDA را نصب کرده و کد خود را به گونه ای بنویسید که محاسبات موازی روی GPU انجام شود. این نیاز به مهارت های خاص برنامه نویسی و آشنایی با مباحث مرتبط با معماری GPU دارد. نکته ای که باید در نظر داشته باشید، این است که تنها با یک عدد بخصوصی نمی توان عملکرد کارت گرافیگ را بیان کرد. علاوه بر تعداد هسته های کودا، عوامل دیگری مثل ظرفیت حافظه رم نیز اهمیت دارد. همچنین بسیار مهم است که کارت گرافیک از لحاظ نرم افزاری برای سیستم عامل و بازی های مختلف بهینه شده باشد. همانطور که گفته شد کارت های گرافیک انویدیا سری RTX می توانند بالای سه یا حتی چهار هزار هسته ی کودا داشته باشند. شکی نیست که قدرت این محصولات بسیار زیاد است، اما بهتر است برای انتخاب کارت گرافیک فاکتور های دیگری را مد نظر داشته باشید. همانطور که گفتیم،GPU ها برای برنامه هایی که محاسبات زیاد و سنگینی دارند، مناسب هستند.
حال در لیست زیر برخی از کاربرد های CUDA به طور کلی GPU ها و رایانش موازی را مثال زده ایم:
• محاسبات مالی
• آب و هوا، مدل سازی اقیانوس ها
• علم داده ها Data Science
• یادگیری عمیق و یادگیری ماشین
• صنایع نظامی و دفاعی
• طراحی به کمک صنعت CAD مانند دینامیک سیالات محاسباتی
• رسانه و سرگرمی بازی های کامپیوتری، انیمیشن ها، جلوه های ویژه فیلم ها و در نتیجه نرم افزار های مربوط به آن ها
• تصویر برداری پزشکی
• صنایع نفت و گاز
• تحقیقات علمی و محاسبات و شبیه سازی های مربوط به رشته های شیمی، فیزیک، ریاضیات
CUDA با تمام پردازنده های گرافیکی Nvidia از سری G8x به بعد، از جمله GeForce، Quadro، سری Tesla و NVidia GRID کار می کند. CUDA همچنین با اکثر سیستم عامل های استاندارد سازگار است. کودا یک مدل زبان برنامه نویسی است که توسط انویدیا توسعه داده شده تا برنامه نویسان بتوانند دستورات خود را مستقیماً بر روی هسته های کودا اجرا کنند. کودا یک مدل زبان برنامه نویسی است که توسط انویدیا توسعه داده شده و هسته های کودا نیز قادر به اجرای دستورات این زبان برنامه نویسی هستند. در اوایل فرآیند ماینینگ از سی پی یو کامپیوتر برای انجام محاسبات ارز دیجیتال استفاده می شد.
اما متوجه شدند که کارت های گرافیک، دارای هسته های کودا با توانایی پردازش موازی بسیار بالایی هستند و از سی پی یو برای ماینینگ بهره برداری بهتری دارند. بعداً به دلیل افزایش رقابت و نیاز به عملکرد بالاتر، ماینرها به سمت استفاده از ایسیک ها سخت افزارهای ویژه ای برای ماینینگ رفتند. ایسیک ها دستورالعمل های خاصی را با سرعت بالایی اجرا می کنند که به صورت قابل مقایسه بهتر از کارت های گرافیک هستند. این تفاوت اساسی بین ایسیک و کارت های گرافیک است. در نسل جدید کارت های گرافیک از هسته های تنسور نیز برای انجام محاسبات پردازش موازی استفاده می کنند. این نمونه هایی از چگونگی کار تجهیزات مورد استفاده در دنیای ماینینگ هستند.
فن آوری NVIDIA® CUDA بزرگترین قدرت پردازش موازی NVIDIA GPUs است و معماری کودا با استفاده از قدرت پردازش بالایی که در کارت های گرافیکی وجود دارد، یک انقلاب در معماری محاسبات موازی است. کودا بسیاری از مسائل محاسباتی را که در حوزه های مختلف به بن بست رسیده بودند را حل کرد و حجم سخت افزارهای مورد نیاز که تعمیر و نگهداری آنها هزینه بر بود، را کاهش داد. اگرچه تفاوت بصری بین NVIDIA و AMD دو فناوری وجود ندارد، اما واقعاً متفاوت هستند. برای کسانی که تنها به بازی ها علاقه مند هستند، نسبت قیمت به عملکرد باید مرکز توجه باشد. در سال های اخیر،AMD به عنوان یک گزینه واقعاً جذاب برای پردازنده ها و کارت های گرافیک درآمده است. محصولات AMD ارزش بسیار خوبی را به نسبت هزینه ارائه می دهند و عملکرد آن ها بسیار برتر است. با قرار دادن هسته های CUDA در هر دستگاه محاسباتی از ابرکامپیوترها، رایانه های رومیزی، لپ تاپ ها، دستگاه های تلفن همراه تا اتومبیل ها، Nvidia برای توسعه دهندگان آسان تر از همیشه کرده است تا نرم افزارهای خود را در هر پلتفرمی که می خواهند مستقر کنند.