چکیده فارسی: در سال های اخیر، افزایش روز افزون عملکرد کارت های گرافیکی، محققین را به فکر بهره گیری از توان پردازشی آنها در کاربردهای غیر گرافیکی انداخته است. درهمین راستا شاخه جدیدی در علوم کامپیوتر به نام محاسبات با اهداف همه منظوره روی واحد GPU ایجاد شده است ، هدف فعالان این عرصه بهره گیری از کارت گرافیک به عنوان یک کمک پردازنده محاسباتی در برنامه های غیرگرافیکی و برنامه های عمومی است.ازاین رو از صنعت محاسباتی گرفته تا محاسبات موازی دچار تغییرات گسترده ای شده وعملیات انتقال تقریبا تمام كامپیوترهای مصرف کننده سال 2010 همراه با پردازنده های چند هسته ای صورت گرفته است صنعت رایانه ای در سراشیبى تند انقلاب محاسباتی موازی قرار دارد ،نتیجه اینکه در پی آن، تقریبا هر برنامه نویس مشتاق در آن نیاز به آموزش برنامه نویسی موازی دارد تا بتواند در علوم کامپیوتری به طور کامل موثر واقع شود. و در نتیجه CUDA C NVIDIA تا کنون به عنوان یکی از موفق ترین زبانهای عمل كرده است كه تا به حال برای محاسبات موازی طراحی شده است. در این پایان نامه، ضمن بیان مقدمه ای از CUDA، تعدادی از دستورات زبان NVIDIA CUDA C معرفی خواهد شدمقدمهواحد پردازش گرافیکی ابزاری اختصاصی برای رندر کردن گرافیکی در کامپیوترهای شخصی، ایستگاههای کاری و یا در کنسولهای بازی است. با توجه به معماری ان، این واحد امکان موازی سازی بیشتری را برای ما فراهم می کند و سرعت ان بسیار بیشتر از CPUاست. با توجه به توان پردازشی بالای انها در کاربردهای غیر گرافیکی شاخه جدیدی در علوم کامپیوتر به نام محاسبات با اهداف همه منظوره روی واحدGPU ایجاد شده است. هدف فعالان این عرصه بهره گیری از کارت گرافیک به عنوان یک کمک پردازنده محاسباتی در برنامه های غیرگرافیکی و برنامه های عمومی است. پردازنده های گرافیکی امروزی از چندین پردازنده با کارایی بالا تشکیل شده اند که قادر به محاسبات بسیار سنگین هستند.همانطور که وارد حوزه محاسبات GPUمی شویم، برنامه های کاربردی ذاتا موازی به طور فزاینده ای از توانایی فراوان محاسبات موازی GPUبرای رسیدن به کارایی و بازدهی بالاتر استفاده می کنند. برنامه های کاربردی که قبلا به علت زمان بالای اجرای انها نامناسب بودند امروزه توسط محاسبات GPUقابل انجام هستند.تکامل سریع GPUها از پراسسورهای گرافیکی پیکربندی شده تا پراسسورهای برنامه نویسی شده موازی باعث حضور انها در همه جا از جمله کامپیوترهای شخصی، لب تاپها و ایستگاههای کاری شد. انها فراگیرترین معماری پردازش موازی هستند و قیمت انها نیز مقرون به صرفه است. در واقع انها چند پردازندههای چند نخی چند هسته ای هستند که در برنامه های کاربردی محاسباتی و گرافیکی استفاده می شوند تعداد صفحات 153 word فهرست مطالب فصل اول مقدمه. 11ـ مقدمه. 21-1- واحد پردازش گرافیکی.. 21-2- مقایسه توانایی های GPU با CPU.. 31-3- مقایسه سخت افزار GPU با CPU.. 71-4- فناوری های ATI و NVIDIA.. 8فصل دوم محاسباتGPU.. 162-1 تکامل محاسبات GPU.. 172-2- توسعه فن اوری GPU.. 172-3-GPU های اولیه. 192-4- محاسبات یکپارچه و GPU ها 202-5- سیتم های محاسبات GPU.. 202-6- اکوسیستم محاسبات GPU.. 21فصل سوم محاسبات multi-GPU.. 233-1- معماری محاسباتی تسلا.. 243-2- چند پردازندههای جریانی.. 243-3- حافظه های GPU.. 243-4- نمونه SIMT. 263-5- معماری مقیاس پذیر کودا 273-5-1- معماری دستگاه کودا 273-5-2- تردها، بلاک ها و گریدها: تطبیق الگوریتم ها با مدل کودا 283-5-3- کاربردهای کودا 333-5-4- معماری مجموعه دستور و اجرا نخ های موازی.. 413-5-5- معماری حافظه کودا 443-5-6- قابلیت محاسباتی.. 463-5-7- مدل برنامه نویسی کودا 473-5-8- یک مدل برنامه نویسی ناهمگن.. 493-5-9- پشته نرم افزاری کودا 523-5-10- سازمان نخ ها 533-5-11- CUDA C.. 553-5-12- کامپایل یک برنامه کودا 593-5-13- اشکال زدایی یک برنامه کودا 603-5-14- افزایش کارایی.. 613-6- نگاشت به معماری تسلا.. 623-7- پشتیبانی ممیز شناور. 633-8- سیستم های محاسباتی NVIDIA Tesla S1070. 633-9- معماری محاسبه فرمی.. 653-9-1- سلسله مراتب حافظه کش.... 673-9-2- حافظه ECC.. 673-9-3- چند پردازندههای جریانی.. 683-10- برنامه نویسی multi-GPU.. 69فصل چهارم: شروع کار. 724ـ1ـ اهداف فصل.. 734ـ2ـمحیط توسعه. 734ـ2ـ1ـ پردازنده های گرافیکی فعال شده CUDA.. 744ـ2ـ2ـ دستگاه درایور NVIDIA.. 764ـ2ـ3ـ کیت ابزار توسعه CUDA.. 76فصل پنجم معرفی CUDA C.. 815ـ معرفی CUDA C.. 825ـ1ـ اهداف فصل.. 825ـ2ـ اولین برنامه. 835ـ2ـ2ـ فرمان هسته ای.. 845ـ3 دستگاه های جستجوگر. 905_4 خواص کاربردی دستگاه. 95فصل ششم برنامه نویسی موازی درCUDA C.. 986ـ1ـ اهداف این فصل.. 996ـ2 ـ برنامه نویسی CUDA موازی.. 99فصل هفتم تعاون رشته ای.. 1057ـ تعاون رشته ای.. 1067ـ1ـ اهداف فصل.. 1067ـ2ـ تقسیم بلوکهای موازی.. 1067ـ2ـ1 مجموع برداری: ردوکس (REDUX) 1077ـ3 حافظه اشتراکی و همزمانسازی.. 1237ـ3ـ1 ضرب نقطه ای.. 1257ـ3ـ2 بیت مپ حافظه مشترک... 138نتیجه گیری.. 143فهرست منابع.. 145 فهرست اشکالشکل 1- 1 - مقایسه توان پردازشی خام پردازندهگرافیکی با پردازندهمرکزی.. 3شکل1-2- مقایسه پهنای باند GPUو CPU.. 4شکل 1- 3- نمودار مقایسه سرعت GPUها و CPUها در بدست اوردن پسورد فایل های RAR.. 7شکل 1- 4- مقایسه سخت افزار GPUو CPU.. 8شکل 1- 5- مدل تخصیص ترانزیستور برای GPUو CPU.. 8شکل3- 1- معماری دستگاه کودا 28شکل3-2- گریدها، بلاک ها و تردها 32شکل3-3 - کامپایل JITو هدف گیری دستگاه یک برنامه کاربردی کودا 42شکل3- 4- مثالی از توزیع بلاک ها روی GPUهای با اندازه متفاوت.. 43شکل3- 6- فضاهای حافظه دستگاه کودا و مکان فیزکی انها روی دستگاه. 44شکل3- 7- سلسله مراتب حافظه کودا در ارتباط با تردهای کرنل.. 45شکل3- 8- پایپلاین گرافیکی.. 48شکل3- 8- مثال اجرا ناهمگن.. 50شکل3- 9- جریان کنترل پایه ای کودا 51شکل3- 10- پشته نرم افزاری کودا 52شکل3- 11- مدل اجرایی یک برنامه کودا با سازمان نخ.. 55شکل3- 12- معماری سیستم محاسباتی NVIDIA Tesla S1070. 64شکل3- 13- پیکربندی کامل محاسباتی S1070. 65شکل3- 14- معماری محاسبات GPUبا 512 هسته پردازنده کودا 66شکل3- 15- چند پردازندهای جریانی فرمی.. 69شکل 3- 16- دو شیوه ممکن برای برنامه ای کردن.. 70شکل4ـ1 پردازنده های گرافیکی فعال شده با CUDA.. 75شکل 4ـ2صفحه دانلود CUDA.. 77شکل6ـ1: جمع دوبردار. 100شکل 7ـ1 ترتیب دو بعدی مجموعه ای از بلوک ها و رشته ها و رشته های صفر. 112شکل 7ـ2 یک سلسله مراتب دو بعدی ازبلوک ها و رشته های مورد استفاده در پردازش یک تصویر48 * 32 پیکسلی با استفاده از یک رشته در هر پیکسل. 119شکل 7ـ3 ثصویری از یک مثال موجGPU.. 123شکل 7ـ4 یک مرحله از کاهش جمع.. 130شکل 7ـ6 تصویر بعد از اضافه کردن همزمانسازی مناسب. 142 فهرست جداولجدول2-1- نقطه عطف توسعه تکنولوژی GPUها NVIDIA.. 18جدول5_3 خواص دستگاه با CUDA.. 92
پیاده سازی چندنمونه از الگوریتم موازی با استفاده از کارت های گرافیکی چند هسته ای
چکیده فارسی: در سال های اخیر، افزایش روز افزون عملکرد کارت های گرافیکی، محققین را به فکر بهره گیری از توان پردازشی آنها در کاربردهای غیر گرافیکی انداخته است. درهمین راستا شاخه جدیدی در علوم کامپیوتر به نام محاسبات با اهداف همه منظوره روی واحد GPU ایجاد شده است ، هدف فعالان این عرصه بهره گیری از کارت گرافیک به عنوان یک کمک پردازنده محاسباتی در برنامه های غیرگرافیکی و برنامه های عمومی است.ازاین رو از صنعت محاسباتی گرفته تا محاسبات موازی دچار تغییرات گسترده ای شده وعملیات انتقال تقریبا تمام كامپیوترهای مصرف کننده سال 2010 همراه با پردازنده های چند هسته ای صورت گرفته است صنعت رایانه ای در سراشیبى تند انقلاب محاسباتی موازی قرار دارد ،نتیجه اینکه در پی آن، تقریبا هر برنامه نویس مشتاق در آن نیاز به آموزش برنامه نویسی موازی دارد تا بتواند در علوم کامپیوتری به طور کامل موثر واقع شود. و در نتیجه CUDA C NVIDIA تا کنون به عنوان یکی از موفق ترین زبانهای عمل كرده است كه تا به حال برای محاسبات موازی طراحی شده است. در این پایان نامه، ضمن بیان مقدمه ای از CUDA، تعدادی از دستورات زبان NVIDIA CUDA C معرفی خواهد شدمقدمهواحد پردازش گرافیکی ابزاری اختصاصی برای رندر کردن گرافیکی در کامپیوترهای شخصی، ایستگاههای کاری و یا در کنسولهای بازی است. با توجه به معماری ان، این واحد امکان موازی سازی بیشتری را برای ما فراهم می کند و سرعت ان بسیار بیشتر از CPUاست. با توجه به توان پردازشی بالای انها در کاربردهای غیر گرافیکی شاخه جدیدی در علوم کامپیوتر به نام محاسبات با اهداف همه منظوره روی واحدGPU ایجاد شده است. هدف فعالان این عرصه بهره گیری از کارت گرافیک به عنوان یک کمک پردازنده محاسباتی در برنامه های غیرگرافیکی و برنامه های عمومی است. پردازنده های گرافیکی امروزی از چندین پردازنده با کارایی بالا تشکیل شده اند که قادر به محاسبات بسیار سنگین هستند.همانطور که وارد حوزه محاسبات GPUمی شویم، برنامه های کاربردی ذاتا موازی به طور فزاینده ای از توانایی فراوان محاسبات موازی GPUبرای رسیدن به کارایی و بازدهی بالاتر استفاده می کنند. برنامه های کاربردی که قبلا به علت زمان بالای اجرای انها نامناسب بودند امروزه توسط محاسبات GPUقابل انجام هستند.تکامل سریع GPUها از پراسسورهای گرافیکی پیکربندی شده تا پراسسورهای برنامه نویسی شده موازی باعث حضور انها در همه جا از جمله کامپیوترهای شخصی، لب تاپها و ایستگاههای کاری شد. انها فراگیرترین معماری پردازش موازی هستند و قیمت انها نیز مقرون به صرفه است. در واقع انها چند پردازندههای چند نخی چند هسته ای هستند که در برنامه های کاربردی محاسباتی و گرافیکی استفاده می شوند تعداد صفحات 153 word فهرست مطالب فصل اول مقدمه. 11ـ مقدمه. 21-1- واحد پردازش گرافیکی.. 21-2- مقایسه توانایی های GPU با CPU.. 31-3- مقایسه سخت افزار GPU با CPU.. 71-4- فناوری های ATI و NVIDIA.. 8فصل دوم محاسباتGPU.. 162-1 تکامل محاسبات GPU.. 172-2- توسعه فن اوری GPU.. 172-3-GPU های اولیه. 192-4- محاسبات یکپارچه و GPU ها 202-5- سیتم های محاسبات GPU.. 202-6- اکوسیستم محاسبات GPU.. 21فصل سوم محاسبات multi-GPU.. 233-1- معماری محاسباتی تسلا.. 243-2- چند پردازندههای جریانی.. 243-3- حافظه های GPU.. 243-4- نمونه SIMT. 263-5- معماری مقیاس پذیر کودا 273-5-1- معماری دستگاه کودا 273-5-2- تردها، بلاک ها و گریدها: تطبیق الگوریتم ها با مدل کودا 283-5-3- کاربردهای کودا 333-5-4- معماری مجموعه دستور و اجرا نخ های موازی.. 413-5-5- معماری حافظه کودا 443-5-6- قابلیت محاسباتی.. 463-5-7- مدل برنامه نویسی کودا 473-5-8- یک مدل برنامه نویسی ناهمگن.. 493-5-9- پشته نرم افزاری کودا 523-5-10- سازمان نخ ها 533-5-11- CUDA C.. 553-5-12- کامپایل یک برنامه کودا 593-5-13- اشکال زدایی یک برنامه کودا 603-5-14- افزایش کارایی.. 613-6- نگاشت به معماری تسلا.. 623-7- پشتیبانی ممیز شناور. 633-8- سیستم های محاسباتی NVIDIA Tesla S1070. 633-9- معماری محاسبه فرمی.. 653-9-1- سلسله مراتب حافظه کش.... 673-9-2- حافظه ECC.. 673-9-3- چند پردازندههای جریانی.. 683-10- برنامه نویسی multi-GPU.. 69فصل چهارم: شروع کار. 724ـ1ـ اهداف فصل.. 734ـ2ـمحیط توسعه. 734ـ2ـ1ـ پردازنده های گرافیکی فعال شده CUDA.. 744ـ2ـ2ـ دستگاه درایور NVIDIA.. 764ـ2ـ3ـ کیت ابزار توسعه CUDA.. 76فصل پنجم معرفی CUDA C.. 815ـ معرفی CUDA C.. 825ـ1ـ اهداف فصل.. 825ـ2ـ اولین برنامه. 835ـ2ـ2ـ فرمان هسته ای.. 845ـ3 دستگاه های جستجوگر. 905_4 خواص کاربردی دستگاه. 95فصل ششم برنامه نویسی موازی درCUDA C.. 986ـ1ـ اهداف این فصل.. 996ـ2 ـ برنامه نویسی CUDA موازی.. 99فصل هفتم تعاون رشته ای.. 1057ـ تعاون رشته ای.. 1067ـ1ـ اهداف فصل.. 1067ـ2ـ تقسیم بلوکهای موازی.. 1067ـ2ـ1 مجموع برداری: ردوکس (REDUX) 1077ـ3 حافظه اشتراکی و همزمانسازی.. 1237ـ3ـ1 ضرب نقطه ای.. 1257ـ3ـ2 بیت مپ حافظه مشترک... 138نتیجه گیری.. 143فهرست منابع.. 145 فهرست اشکالشکل 1- 1 - مقایسه توان پردازشی خام پردازندهگرافیکی با پردازندهمرکزی.. 3شکل1-2- مقایسه پهنای باند GPUو CPU.. 4شکل 1- 3- نمودار مقایسه سرعت GPUها و CPUها در بدست اوردن پسورد فایل های RAR.. 7شکل 1- 4- مقایسه سخت افزار GPUو CPU.. 8شکل 1- 5- مدل تخصیص ترانزیستور برای GPUو CPU.. 8شکل3- 1- معماری دستگاه کودا 28شکل3-2- گریدها، بلاک ها و تردها 32شکل3-3 - کامپایل JITو هدف گیری دستگاه یک برنامه کاربردی کودا 42شکل3- 4- مثالی از توزیع بلاک ها روی GPUهای با اندازه متفاوت.. 43شکل3- 6- فضاهای حافظه دستگاه کودا و مکان فیزکی انها روی دستگاه. 44شکل3- 7- سلسله مراتب حافظه کودا در ارتباط با تردهای کرنل.. 45شکل3- 8- پایپلاین گرافیکی.. 48شکل3- 8- مثال اجرا ناهمگن.. 50شکل3- 9- جریان کنترل پایه ای کودا 51شکل3- 10- پشته نرم افزاری کودا 52شکل3- 11- مدل اجرایی یک برنامه کودا با سازمان نخ.. 55شکل3- 12- معماری سیستم محاسباتی NVIDIA Tesla S1070. 64شکل3- 13- پیکربندی کامل محاسباتی S1070. 65شکل3- 14- معماری محاسبات GPUبا 512 هسته پردازنده کودا 66شکل3- 15- چند پردازندهای جریانی فرمی.. 69شکل 3- 16- دو شیوه ممکن برای برنامه ای کردن.. 70شکل4ـ1 پردازنده های گرافیکی فعال شده با CUDA.. 75شکل 4ـ2صفحه دانلود CUDA.. 77شکل6ـ1: جمع دوبردار. 100شکل 7ـ1 ترتیب دو بعدی مجموعه ای از بلوک ها و رشته ها و رشته های صفر. 112شکل 7ـ2 یک سلسله مراتب دو بعدی ازبلوک ها و رشته های مورد استفاده در پردازش یک تصویر48 * 32 پیکسلی با استفاده از یک رشته در هر پیکسل. 119شکل 7ـ3 ثصویری از یک مثال موجGPU.. 123شکل 7ـ4 یک مرحله از کاهش جمع.. 130شکل 7ـ6 تصویر بعد از اضافه کردن همزمانسازی مناسب. 142 فهرست جداولجدول2-1- نقطه عطف توسعه تکنولوژی GPUها NVIDIA.. 18جدول5_3 خواص دستگاه با CUDA.. 92