پردازش موازی چیست؟ + پیاده سازی در پایتون و متلب
پردازش موازی، روشی است که در آن دو یا چند پردازنده یا CPU به صورت همزمان برای مدیریت بخشهای مختلفی از وظیفه یکسان کار میکنند. برای این کار در ابتدا باید مسئله اصلی به بخشهای کوچکتر و قابل مدیریت تقسیم شود. سپس هر CPU وظیفه اجرای یکی از این بخشها را بر عهده میگیرد. تقسیم کار بین چند پردازنده مجزا، به کاهش زمان مورد نیاز برای اجرای برنامه کمک میکند. هر سیستمی که بیش از یک CPU داشته باشد، امکان اجرای عملیات پردازش موازی را نیز دارد. به همین صورت، مهمترین مزیت استفاده از پردازندههای چندهستهای که در حال حاضر به صورت گسترده در کامپیوترها پیدا میشوند نیز امکان اجرای پردازش موازی است. در این مطلب از مجله فرادرس میآموزیم که پردازش موازی چیست و مهمترین زوایای این مطلب را توضیح میدهیم.
پردازندههای چندهستهای، چیپستهایی با دو یا چند پردازنده مختلف هستند. این سختافزارها باعث ارتقا کارآمدی، کاهش مصرف برق و مدیریت وظایف به صورت بهینهتر میشوند. استفاده از این سختافزارها مانند داشتن همزمان چند CPU در کامپیوتر است. بیشتر کامپیوترها بین دو تا ۱۲ هسته دارند. پردازش موازی بیشتر برای مدیریت وظایف پیچیده به کار برده میشود. دانشمندان داده از این امکان برای مدیریت حجم انبوه دادهها و اجرای وظایفی با مصرف بالای منابع استفاده میکنند.
پردازش موازی چیست؟
«پردازش موازی» (Parallel Computing) با عنوان «برنامهنویسی موازی» (Parallel Programming) نیز شناخته میشود. این تکنیک پردازشی به فرایندی گفته میشود که در آن مسائل محاسباتی بزرگ به مسائل کوچکتر تجزیه شده و به صورت همزمان توسط چندین پردازنده مختلف حل میشوند. تمام سیستم عاملهای مدرن توانایی اجرای پردازش موازی بر روی CPU-های چندهستهای را دارند.
پردازندهها با کمک حافظه به اشتراک گذاشته شده بین آنها با هم ارتباط برقرار میکنند. سپس جوابهای بدست آمده توسط هر کدام با کمک الگوریتمهای خاصی در همدیگر ادغام میشوند. پردازش موازی به طرز چشمگیری سریعتر از پردازش سریالی - خطی - انجام میشود. پردازش سریالی به نسخه قدیمی پردازش گفته میشود. در این نوع پردازش، سیستم عامل برای اجرای کارهای خود با کمک یک پردازنده، در ابتدا همه مسائل را به صف میکرد. سپس یک به یک فرایندها را برای اجرا به پردازنده میفرستاد. استفاده از پردازش موازی در کنار تکنیکهایی مانند صفحه بندی در سیستم عامل به افزایش سرعت کار کامپیوتر کمک قابل توجهی میکند.
در زمان اختراع اولین کامپیوترها اواخر دهه ۱۹۴۰ و اوایل ۱۹۵۰ میلادی، نرمافزارها به شکلی برنامه نویسی میشدند که مسائل را بر اساس توالی رویدادشان حل کنند. این کار باعث کند شدن سرعت پردازش میشد. برای اینکه سرعت پردازش فرایندها ارتقا پیدا کند، الگوریتمها باید ایجاد میشدند. از الگوریتمهای زمان بندی به عنوان دستورالعملی برای مدیریت کار سریعتر CPU استفاده میشود. در این حالت فقط وقتی که یکی از فرایندها کار خود را کامل کند، فرایند بعدی اجرا میشود.
در اوایل دهه ۱۹۵۰ میلادی بود که پردازش موازی معرفی شد و به کامپیوترها برای اجرای سریعتر و کارآمدتر کمک کرد. از همان زمان، پردازش موازی کار خود را با شکستن فرایندهای بزرگ به تکههای کوچک و شبیه بهم شروع کرد. این روند کاری با عنوان الگوریتمهای موازی شناخته شده و تکههای فرایند کوچکتر را بر روی چندین پردازنده در دسترس برای اجرا توزیع میکند.
امروزه، سامانههای موازی به حدی ارتقا پیدا کردهاند که هم بر روی همه کامپیوترها قابل استفادهاند و هم قادر به انجام کارهای روزانهای مانند بررسی ایمیلها یا حتی ارسال پیام کوتاه با سرعت صدها برابر بیشتر نسبت به پردازشهای سریالی هستند. علاوهبر افزایش قدرت دستگاههای شخصی مانند لپتاپها و تلفنهای هوشمند، سامانههای پردازش موازی باعث افزایش قدرت پیشرفتهترین سوپرکامپیوترها و مدرنترین تکنولوژیها مانند هوش مصنوعی و «اینترنت اشیاء» (Internet of Things | IoT) نیز شدهاند.
مقایسه پردازش موازی با پردازش سریالی
به «پردازش سریالی» (Serial Computing)، «پردازش متوالی» ( Sequential Computing) نیز گفته میشود. این نوع از پردازش برای اجرای هر مسئله محاسباتی، دستورالعملها را به صورت متوالی و یک به یک در واحد زمان، دنبال میکند. در این تکنیک محاسباتی کامپیوتر برای انجام وظایف خود بهجای توزیع آنها بر روی چندین پردازنده مختلف فقط از یک پردازنده استفاده میکند.
همینطور که علم کامپیوتر در حال پیشرفته شدن بود، پردازش موازی برای افزایش سرعت پردازش سریالی معرفی شد. در برنامهنویسی موازی، سیستم عاملها به کامپیوترها برای اجرای وظایف و انجام محاسبات مختلف در زمان یکسان کمک میکنند. نام این روش، پردازش موازی است. پردازش دادهها با کمک این روش با سرعت بسیار بیشتری انجام میشود.
مقایسه پردازش موازی با محاسبات موازی
«پردازش موازی» (Parallel Processing) و «محاسبات موازی» (Parallel Computing) واژههایی بسیار نزدیک به یکدیگر هستند، اما چند تفاوت قابل توجه هم بین آنها وجود دارد. پردازش موازی یا Parallelism، وظیفهای را در زمان اجرای به تکههای کوچکی تقسیم میکند. این تکههای کوچک به صورت مستقل از یکدیگر و همزمان با هم با استفاده از چند پردازنده مختلف اجرا میشوند. بعد از اینکه این معادلات کوچک بر روی چندین پردازنده مختلف اجرا شدند، برای بازسازی معادله بزرگ اول و تولید جواب اصلی مسئله، باز هم به شبکهای از کامپیوترها یا کامپیوتری با بیش از یک پردازنده نیاز داریم.
در حالی که بعضی وقتها ممکن است از عبارتهای پردازش موازی و محاسبات موازی بهجای یکدیگر استفاده شود، اما باید به تفاوتهای کوچک بین این موارد دقت کرد. پردازش موازی به چندین هسته یا CPU مختلف اشاره دارد که دوشادوش یکدیگر برای حل مسائل به صورت اشتراکی کار میکنند در حالی که محاسبات موازی اشاره به کاری دارد که نرمافزار برای سادهتر کردن پردازشها انجام میدهد.
فیلم های آموزش برنامه نویسی در فرادرس
در دنیای رو به پیشرفت آینده، برنامه نویسی یکی از مهارتهایی است که نه تنها برای دانشجویان رشته مهندسی کامپیوتر، بلکه برای سایر رشتهها و حوزههای کاری نیز به شکل ضروری، مورد نیاز است. در حال حاضر، هر سال بر تعداد موقعیتهای شغلی مرتبط با برنامهنویسی افزوده میشود. بخش جدانشدنی از فرایند تحقیق و پژوهش در اکثر صنایع و فعالیتهای تجاری امروزی، کار با کامپیوتر و توانایی پیادهسازی ایدهها و الگوریتمها در قالب برنامههای کامپیوتری است. برای اینکه شاغلین و محققین این حوزهها وظیفه خود را به شکل مناسب انجام دهند، نیازمند داشتن دانش برنامهنویسی مناسب هستند.
وبسایت آموزشی فرادرس، تلاش اصلی خود را بر این گذاشته که دانشجویان و دانشآموزان در هر حوزهای بتوانند از فیلمهای این وبسایت استفاده کرده و نیازهای علمی خود را برآورده کنند. اکنون بهجز مخاطبان در حال تحصیل، اشخاص کارجو و حتی شاغلین نیز میتوانند با مراجعه به فیلمهای فرادرس با هدف رسیدن به جایگاه شغلی یا افزایش توان عملیاتی خود به کسب مهارتهای متنوع بپردازند. در پایین چند مورد از فیلمهای آموزشی مربوط به زبانهای برنامهنویسی گوناگون را معرفی کردهایم. در صورت تمایل برای مشاهده گزینههای بیشتر با کلیک بر روی تصویر بالا میتوانید به صفحه اصلی این مجموعه آموزش هدایت شده و فیلمهای دیگری را هم ببینید.
- فیلم آموزش برنامه نویسی ++C با فرادرس
- فیلم آموزش برنامه نویسی PHP در فرادرس
- فیلم آموزش برنامه نویسی پایتون همراه با مثال های عملی در Python از فرادرس
- فیلم آموزش رایگان گیت Git، گیت هاب و گیت لب در فرادرس
- فیلم آموزش برنامه نویسی جاوا با فرادرس
روش کار پردازش موازی چیست؟
قبل از اینکه بدانیم روش کار پردازش موازی چیست باید به چند نکته مهم اشاره کنیم. پردازش موازی دربرگیرنده طیف گستردهای از دستگاهها با معماریهای کامپیوتری مختلف است. از سوپرکامپیوترها گرفته تا تلفنهای هوشمند درون جیب همه مردم از تکنیک پردازش موازی استفاده میکنند. در پیشرفتهترین حالت پردازش موازی از صدها هزار هسته پردازشی برای کار بر روی مسائلی مانند کشف داروی جدید برای سرطان یا مشارکت در تحقیقات مبتنی بر جستوجو به دنبال هوش فرازمینی استفاده میکند. در حالتهای سادهتر هم برای مثال، از پردازش موازی به منظور سرعت بخشیدن به ارسال ایمیل از تلفن هوشمند نسبت به پردازش سنتی و سریالی استفاده میشود.
در پردازش موازی، سه معماری اصلی وجود دارد. هر کدام از این معماریها از «رابط ارسال پیام» (Message Passing Interface | MPI) مخصوص به خود استفاده میکنند.
- «حافظه اشتراکی» (Shared Memory)
- «حافظه توزیع شده» (Distributed Memory)
- «حافظه هیبریدی» (Hybrid Memory)
رابط ارسال پیام مربوط به معماریهای مختلف، مانند استانداردی برای همه سامانههای پردازش موازی کار میکند. MPI در زبانهای برنامهنویسی مانند ++C و Fortran پروتکلهای خاصی را برای ارسال پیام بین دستگاهها ارائه میدهد. نسخه متن باز MPI در توسعه اپلیکیشنها و نرمافزارهای جدید بسیار تاثرگذار بوده و در نتیجه باعث افزایش تواناییهای تکنیک پردازش موازی شده است.
معماری های پردازش موازی مختلف
همینطور که در بالا اشاره شد، در پردازش موازی، سه معماری اصلی وجود دارد. در این بخش از مطلب به بررسی این معماریها پرداخته و در نهایت درباره معماریهای اختصاصیسازی شده نیز صحبت میکنیم.
حافظه اشتراکی
در اپلیکیشنهایی که به صورت روزانه استفاد میشوند، مانند کاربردهای رایج لپتاپها و گوشیهای هوشمند که شامل پردازش موازی نیز هستند، حافظه اشتراکی به کار برده شده است. در معماری «حافظه اشتراکی» (Shared Memory)، کامپیوترهای موازی با هدف برقراری ارتباط با منبع حافظه اشتراکی یکسان، به استفاده از چندین پردازنده مجزا اتکا میکنند.
حافظه توزیع شده
از معماری «حافظه توزیع شده» (Distributed Memory) در رایانش ابری استفاده میشود. در نتیجه به معماری رایج در بسیاری از اپلیکیشنهای بزرگ و گسترده تبدیل شده است. در سامانه توزیع شده برای محاسبات موازی، چندین پردازنده همراه با منابع حافظه اختصاصی خودشان بر روی شبکهای با یکدیگر متصل شدهاند.
حافظه هیبریدی
سوپرکامپیوترهای مدرن با استفاده از معماری «حافظه هیبریدی» (Hybrid Memory) طراحی میشوند. حافظه هیبریدی، سامانه محاسباتی موازی است که کامپیوترهایی را با حافظه اشتراکی بر روی شبکههای حافظه توزیع شده با یکدیگر ترکیب میکند. CPU-های متصل بهم در محیط حافظه هیبریدی میتوانند به حافظه اشتراکی و وظایفی دسترسی داشته باشند که به واحدهای دیگری در همان شبکه اختصاص داده شدهاند.
معماری های اختصاصی سازی شده
علاوه بر معماریهای اصلی که معرفی کردیم، معماریهای پردازش موازی کم استفادهتری هم در کامپیوترها وجود دارند که برای کار بر روی مسائل بزرگتر و وظایفی به شدت اختصاصیسازی شده، طراحی شدهاند. از این قبیل معماریها میتوان به «پردازندههای برداری» (Vector Processors) برای کار بر روی آرایههای دادهای به نام بردار و پردازندههای با اهداف محاسباتی عمومیتر - که بر روی «واحدهای پردازش گرافیکی» (Graphics Processing Units) یا «GPGCU» قرار دارند - اشاره کرد.
به عنوان مثالی از این موارد میتوان از CUDA نام برد. CUDA، اپلکیشن GPGCU اختصاصی برای «رابط برنامهنویسی اپلیکیشن» (Application Programming Interface | API) است که توسط شرکت Nvidia توسعه داده شده. وجود این ابزار برای اجرای وظایف مربوط به «یادگیری عمیق» (Deep Learning | DL) بسیار ضروری است. در واقع میتوان از آن به عنوان تکنولوژی زیربنایی برای بسیاری از اپلیکیشنهای مربوط به هوش مصنوعی اشاره کرد.
در صورتی که نسبت به هوش مصنوعی علاقهمند هستید و میخواهید به صورت عمیقتری با این حوزه جدید آشنا شوید، پیشنهاد میکنیم که مطلب ۱۹ الگوریتم هوش مصنوعی که باید بدانید، به زبان ساده را از مجله فرادرس مطالعه کنید.
انواع پردازش موازی چیست؟
قبل از صحبت درباره اینکه انواع پردازش موازی چیست بهتر است با ابزار پیادهسازی برنامههای دارای این قابلیت آشنا شویم. یکی از ابزارهای بسیار مناسب برای پیادهسازی پردازش موازی در اپلیکیشنها استفاده از زبان برنامهنویسی پایتون است. پایتون یکی از زبانهای برنامهنویسی قدرتمند، انعطافپذیر و چندکاره است که به طور خاص در طراحی وب اپلیکیشنها و حل مسائل هوش مصنوعی میدرخشد. برای آموزش اجرای پردازش موازی با کمک پایتون فیلم آموزش پردازش موازی در پایتون همراه کار با کتابخانه Thread و Async IO را از فرادرس مشاهده کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
پردازشهای موازی را میتوان به چهار دسته اصلی تقسیم کرد. هر کدام از این دستهها دارای مزیتهای خاصی هستند که آنها را به بهترین گزینه برای انجام هدف مشخصی تبدیل میکند. در این قسمت با بیان توضیح کلی و واضح به بررسی همه این دستهها پرداختهایم.
دسته اول: موازی گری در سطح بیت ها
«موازیگری در سطح بیتها» (Bit-Level Parallelism) به تکنیکی اشاره میکند که در آن برای تقویت عملکرد کلی سیستم، اندازه کلمات پردازنده افزایش پیدا کرده است . در نتیجه تعداد دستورالعملهای لازم برای حل مسئله توسط پردازنده، کاهش پیدا میکند. این رویکرد منتهی به پیشرفتهای چشمگیری در معماری کامپیوتر شده است. یعنی پردازندهها را از سال ۱۹۸۶ به بعد به ترتیب از ۴ بیتی به ۸ بیت، ۱۶ بیت، ۳۲ بیت و در نهایت به ۶۴ بیتی ارتقا داد. در این پردازندهها هر نسل از لحاظ قدرت عملکرد نسبت به نسل قبلی افزایش توان زیادی را بدست آوردهاند. یکی از مثالهای قابل توجه این پیشرفتها Nintendo 64 است. Nintendo 64 اولین کنسول بازی بود که از سیستم ۶۴ بیتی استفاده میکرد و در زمان معرفی بسیار درخشید.