# رایانش چند‌هسته‌ای

## Multicore Computing

***

| کارشناسی      | مقطع:       | رایانش چند‌هسته‌ای                                                                                                                    | نام درس:    |
| ------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| تخصصی اختیاری | گروه درس:   | [برنامه‌سازی پیشرفته](../drws-alzamy/advanced-programming) ،[اصول سیستم‌های کامپیوتری](../drws-alzamy/principles-of-computer-systems) | پیش‌نیاز:   |
| نظری          | نوع درس:    | ندارد                                                                                                                                 | هم‌نیاز:    |
| 48            | تعداد ساعت: | 3                                                                                                                                     | تعداد واحد: |
|               |             | دارد                                                                                                                                  | حل تمرین:   |

**سرفصل درس:**

معرفی معماری سیستم‌های چندهسته‌ای و مدل‌های برنامه‌نوسی موازی

تاریخچه ظهور سیستم‌های چند‌هسته‌ای، چالش‌های برنامه‌نویسی کارا روی سیستم‌های چند‌هسته‌ای، معرفی سطوح موازات در برنامه‌ها، تحلیل تسریع در سیستم‌های چند‌هسته‌ای همگون و ناهمگون، ارائه‌ی‌ چند نمونه واقعی از سیستم‌های چند‌هسته‌ای

چند‌پردازنده‌ها با حافظه مشترک،

معرفی کلی معماری، ارائه‌ی مسئله‌ی Cache Coherence و راه‌حل‌ها، معرفی اجمالی مدل برنامه‌نویسی و نحوه همگام‌سازی نخ‌ها،‌ نحوه برخورد با ناحیه‌های بحرانی، ایده‌های کلی در بهبود برنامه‌های موازی

الگو‌های رایج موازی‌سازی محاسبات و مدیریت داده

الگوهای محاسباتی موازی: Map, Reduction, Scan, Stencil, Recurrence, Fork-Join

الگوهای موازی مدیریت داده: Gather, Scatter, Pack, Geometric Decomposition & Partitions

برنامه‌نویسی موازی عمومی در سیستم‌های چند‌هسته ای

برنامه‌نویسی با Pthreads،‌ برنامه‌نویسی با OpenMP

برنامه‌نوسی موازی در سیستم‌های برداری

معرفی کلی سیستم‌های برداری و آرایه‌ای،‌ معرفی ISA مخصوص پردازنده Intel برای محاسبات SIMD،‌ معرفی معماری و نحوه برنامه‌نویسی پردازنده CELL BE

برنامه‌نویسی موازی در پردازنده‌های گرافیکی عام‌منظوره

معرفی جامع معماری پردازنده‌های گرافیکی، معرفی معماری چند نمونه واقعی از پردازنده‌های گرافیکی شرکت NVIDIA

برنامه‌نویسی با زبان CUDA، معرفی Profiler شرکت NVIDIA

معرفی اجمالی برنامه‌نویسی موازی در سیستم‌های توزیع‌شده

معرفی کتابخانه Message Passing Interface (MPI) و نحوه‌ی برنامه‌نویسی موازی براساس مدل تبادل پیام

**منابع:**

* Patterson, D. A., & Hennessy, J. L. (2019). Computer Architecture: A Quantitative Approach. Morgan Kaufmann.
* Sanders, J., & Kandrot, E. (2011). CUDA by Examples: An Introduction to GPU Programming. Addison-Wesley.
* Kirk, D. B., & Hwu, W. W. (2010). Programming Massively Parallel Processors: A Hands-On Approach. NVIDIA.
* McCool, M., Robison, A. D., & Reinders, J. (2012). Structured Parallel Programming. Elsevier.
