مقدمه
سرعت کامپیوترهای شخصی کنونی نسبت به اجداد خود به طور سرسامآوری افزایش یافته است اما حتی این سرعت نجومی نیز در اجرای برخی از برنامههای پیشرفته، کند است. از جمله عرصههایی که احتیاج به کامپیوترهایی با سرعت پردازش بسیار بالا دارند میتوان به برنامههای شبیهسازی در تحقیقات هستهای، نانو فناوری محاسباتی، برنامههای پیشبینی وضعیت هوا، برنامههای فیلمسازی کامپیوتری، برنامههای ساخت انیمیشن حرفهای و بسیاری از زمینههای مختلف دیگر را نام برد که همگی به سرعت پردازش بسیار زیاد نیاز دارند تا در یک زمان مناسب به نتیجه برسند.
یک راه حل برای این معضل، استفاده از سوپرکامپیوترها است. درست است که سرعت پردازش سوپرکامپیوترها بسیار بالاتر از کامپیوترهای شخصی است اما استفاده از آنها در در همه موارد مقرون به صرفه نیست؛ ضمن آنکه این فناوری در انحصار بعضی از کشورهای توسعهیافته است و سایر کشورها از دسترسی به این تجهیزات استراتژیک محروم هستند.
راه حل دیگر در دستیابی به سرعت پردازش بسیار بالا استفاده از روش پردازش موازی است. به بیان ساده در این روش چند پردازنده معمولی با همکاری یکدیگر به اجرای یک برنامه میپردازند که طی این همکاری, برنامه با سرعت بالاتری اجرا میشود.
کاربردهای پردازش موازی
همانطور که اشاره شد از پردازش موازی در جهت افزایش قدرت کامپیوترها استفاده میشود. اما اصلیترین استفاده از آن در حل مسایل و مدلهای علمی و مهندسی است (شکل 1). از جمله این حوزهها میتوان به موارد زیر اشاره کرد:
• فیزیک کاربردی, هستهای, ذرات بنیادی, ماده چگال, فشارهای بالا, گداخت هستهای, فوتونیک و نانو
• اتمسفر, زمین و محیط زیست
• فناوری زیستی و ژنتیک
• زمینشناسی و زلزلهشناسی
• مهندسی مکانیک؛ از اندام مصنوعی تا مصنوعات فضایی
• مهندسی الکترونیک؛ طراحی مدار, میکروالکترونیک
• علوم کامپیوتر و ریاضی
شکل1: این شکل تصاویری از دادههای محاسباتی در رشتههای مختلف را نمایش میدهد.
اما امروزه نه تنها حل مسایل علمی احتیاج به پردازش موازی دارد بلکه برخی از نرمافزارهای تجاری نیز به کامپیوترهای سریع نیاز دارند. بسیاری از این برنامهها احتیاج به پردازش حجم زیادی از داده به شکل بسیار پیچیده دارند. از جمله این برنامهها میتوان به موارد زیر اشاره کرد:
• پایگاههای عظیم داده و عملیات داده کاوی (Data Mining)
• اکتشاف نفت
• موتورهای جستجوی وب, سرویسهای تجاری تحت وب
• تصویربرداری و تشخیص پزشکی (شکل 2)
• طراحی و شبیهسازی دارو
• مدیریت شرکتهای ملی و چند ملیتی
• مدلسازی مالی و اقتصادی
• واقعیت مجازی و گرافیک پیشرفته به خصوص در صنعت سرگرمی
• فناوری چند رسانهای و شبکه ویدیویی
شکل 2: تصاویر ایجاد شده توسط نرمافزارهای تجاری
محاسبه موازی
محاسبه موازی به معنای اجرای همزمان قسمتهای مختلف یک برنامه در چند پردازنده به منظور حصول سریعتر نتایج است. در شکلهای 3 و 4 تفاوت کلی پردازش ترتیبی با پردازش موازی مشخص شده است.
شکل 3: در پردازش ترتیبی دستورات به ترتیب در پردازنده اجرا میشوند و سرعت اجرا برابر با سرعت پردازنده است.
شکل 4: در پردازش موازی دستورات در چند پردازنده اجرا میشوند ولی سرعت اجرا الزاماً برابر با تعداد پردازندهها ضربدر سرعت یک پردازنده نیست.
محاسبه موازی در بخشهای مختلف کامپیوتر اعم از سختافزار و نرمافزار شکل میگیرد، بنابراین برای بررسی کلیات محاسبه موازی باید به جنبههای مختلف سختافزاری و نرمافزاری آن پرداخت. در این جا سعی میکنیم به معرفی بعضی از این جنبههای درگیر در مبحث موازیسازی بپردازیم.
1ـ سیستمهای محاسبه موازی
قبل از معرفی معماری کامپیوتر موازی به معرفی معماری کامپیوترهای معمولی با نام معماری "فون نیومن" میپردازیم. نام این معماری برگرفته از اسم ریاضیدان مجارستانی است که در سال 1945 الزامات یک کامپیوتر را معرفی کرد. از آن زمان تاکنون همه کامپیوترها از این طرح اولیه استفاده میکنند. این طرح حاوی چهار واحد اصلی است که عبارتند از: حافظه, کنترل, محاسبه و منطق، و ورودی/خروجی. این عوامل در شکل 5 مشخص شدهاند.
شکل 5: طرح ابتدایی کامپیوترهای ترتیبی
در این معماری، واحد حافظه که از نوع دسترسی تصادفی با قابلیت خواندن و نوشتن است برای ذخیره دستورات و دادهها استفاده میشود. واحد کنترل دستورات را از حافظه واکشی کرده و به طور ترتیبی عملیات را اجرا میکند. واحد محاسبه و منطق، عملیات محاسباتی را اجرا میکند.
علیرغم وجود یک طرح ساده برای معماری اولیه کامپیوترهای ترتیبی, در مبحث کامپیوترهای موازی طرحهای مختلفی وجود دارد. یکی از معروفترین تقسیمبندیها در این زمینه, طبقهبندی Flynn است.
کامپیوترهای معمولی حاوی یک پردازنده هستند. در حالی که یکی از روشهای محاسباتی، استفاده از چند پردازنده در یک کامپیوتر است. طبقهبندی Flynn مربوط به بکارگیری یک یا چند پردازنده در یک کامپیوتر و نحوه بکارگیری آنها در پردازش دادههاست.
طبقهبندی Flynn ناظر بر معماری کامپیوترهای حاوی یک و چند پردازنده است و آنها را بر اساس نحوه تعاملشان با دو بعد دستور (Instruction) و داده (Data) از هم متمایز میکند. هر یک از این دو بعد میتواند فقط یکی از دو حالت ممکن تک (Single) و چند (Multiple) را داشته باشد. ترکیبات این چهار حالت در جدول 1 مشخص است.
جدول1: چهار حالت طرح طبقهبندی Flynn
تک دستور, تک داده (SSID)
این معماری برای یک کامپیوتر ترتیبی (غیر موازی) است. در این روش تنها یک جریان دستوری توسط یک پردازنده در طول هر پالس ساعت مورد عمل واقع میشود و همینطور یک جریان داده در طول پالس ساعت مورد استفاده قرار میگیرد. در این روش دستورها به طور قطعی انجام میشوند و وابسته به عمل پردازنده دیگر نیستند. این روش قدیمی و امروزی بیشتر کامپیوترها، از سیستمهای Mainframe قدیمی گرفته تا PC امروزی است.
در شکل 6 به ترتیب اجرای یک دستور بر روی یک داده در هر مقطع زمانی نمایش داده شده است.
شکل 6: ترتیب اجرای دستورات در گذر زمان
تک دستور, چند داده (SIMD)
این طرح, یکی از انواع کامپیوترهای موازی است. در این روش همه واحدهای پردازش یک دستور مشترک را در طول هر پالس ساعت اجرا میکنند. اما هر واحد پردازش میتواند روی چند عنصر داده مختلف عمل کند (شکل 7). این روش برای حل مسایل خاص که از دادههایی با الگوی ثابت پیروی میکنند, مناسب است. از جمله این مسایل میتوان به پردازش تصویر اشاره کرد. در این روش اجرای دستورات همگام و قطعی است.
شکل 7: اجرای یک دستور بر روی چند داده در هر مقطع زمانی
طرح SIMD دارای دو گونه معماری است که عبارتند از آرایهای از پردازنده
(Processor Arrays) و خطلولههای برداری (Vector Pipelines).
از نوع اول میتوان کامپیوترهای CM-2, MasPar MP-1, MasPar MP-2 و ILLIAC IV (شکل 8) را نام برد در حالی که از نوع دوم میتوان به کامپیوترهای
IBM 9000, Cray X-MP, Cray Y-MP, Fujitsu VP, NEC SX-2 و Hitachi S820 اشاره کرد.
شکل 8: نمایی از کامپیوتر ILLIAC IV
واحدهای پردازش گرافیک امروزی یا همان GPUها نیز از واحد اجرای دستورات SIMD بهره میبرند.
چند دستور, تک داده (MISD)
در این طرح موازی، یک جریان داده به چند واحد پردازش داده، ارسال میشود. هر واحد پردازش به طور مستقل با جریانهای دستور مستقل روی دادهها عمل میکند (شکل9). تا کنون تعداد معدودی کامپیوتر موازی با این روش ساخته شده است که از جمله میتوان به کامپیوتر C.mmp کارنگی ملون اشاره کرد. از جمله کاربردهایی که برای این روش میتوان مثال زد یکی، اعمال چند فیلتر فرکانسی روی یک جریان سیگنال و دیگری، اعمال چند الگوریتم رمزگذاری در باز کردن یک پیغام کد شده است. در هر دو مثال چند جریان دستوری روی یک جریان داده عمل میکنند.
شکل 9: اجرای چند دستور بر روی یک داده در مقاطع زمانی مختلف
چند دستور, چند داده (MIMD)
این روش معمولترین طرح کامپیوتر موازی است و کامپیوترهای مدرن به سمت این معماری حرکت میکنند.
در این طرح هر پردازنده امکان اجرای چند جریان دستوری جداگانه را دارد و این دستورات روی چند جریان داده مختلف اعمال میشود (شکل 10). در این طرح, عملیات اجرا میتواند همگام یا نا همگام و قطعی یا غیر قطعی باشد. سوپرکامپیوترهای امروزی, کامپیوترهای موازی خوشهای (Cluster), کامپیوترهای چند پردازنده SMP و PCهای چند هستهای امروزی از این معماری استفاده میکنند. البته بیشتر کامپیوترهای با معماری MIMD از زیر مؤلفههای اجرایی SIMD بهره میبرند.
شکل 10: اجرای چند دستور بر روی چند داده در مقاطع زمانی مختلف
سیستمهای چند پردازنده به دو دسته دیگر نیز تقسیم میشوند، به طوریکه اگر همه پردازندهها به طور یکسان بتوانند تمام دستورات سیستم عامل (مثلاً دستورات ورودی/خروجی) را اجرا کنند به آن "سیستم چند پردازنده متقارن" و اگر بعضی از پردازندهها دارای امتیاز بیشتر یا کمتر نسبت به سایرین باشند به آن "سیستم چند پردازنده نامتقارن" گفته میشود.
2ـ کارآیی نسبت به هزینه
یک سیستم موازی با n پردازنده معمولی کارایی کمتری نسبت به یک پردازنده با سرعت n برابر دارد اما ساخت سیستم موازی دارای قیمت نازلی است به طوری که در سالهای اخیر، بسیاری از سوپرکامپیوترها بر پایه معماری موازی ساخته شدهاند.
برای برنامههایی که هم محاسبات فراوانی دارند و هم دارای محدودیت زمانی جهت اجرا هستند و خصوصاً میتوان آنها را به n رشته (Thread) اجرایی تقسیم کرد، محاسبه موازی بهترین راه حل است.
برای درک بهتر مفهوم رشته (Thread)، فرض کنید شما در حال شنیدن موسیقی از کامپیوتر، متنی را تایپ میکنید و در حال دانلود کردن یک فایل نیز هستید. برای انجام همزمان این سه وظیفه، سیستم عامل آنها را به تکههای کوچک چند میلی ثانیهای تقسیم میکند که در هر لحظه پردازنده یکی از این تکهها را اجرا میکند در این حالت به هر وظیفه یک رشته گفته میشود.
موضوع کارآیی نسبت به هزینه، ناظر بر اندازهگیری اثربخشی پردازش موازی با چند پردازنده نسبت به استفاده از یک پردازنده ترتیبی است.
3ـ الگوریتمها
نباید تصور شود که محاسبه موازی تنها محتاج به فراهم کردن سختافزار مورد نیاز و اتصال درست آنهاست. دشواری کار مشترک در جملهی زیر نهفته است:
اگر حفر یک چاه توسط یک نفر در یک ساعت انجام شود آیا واقعاً شصت نفر میتوانند چاه را در یک دقیقه حفر کنند؟
در عمل، دستیابی به افزایش خطی سرعت (افزایش سرعت متناسب با تعداد پردازندهها) بسیار مشکل است. این مشکل ناشی از طبیعت ترتیبی بسیاری از الگوریتمها است به طوریکه قسمتهایی از یک الگوریتم قابل موازیسازی و قسمتهایی غیر قابل موازیسازی است.
به قانون Amdahl که به بیان این مطلب میپردازد توجه کنید:
فرض کنید که F=10% از یک الگوریتم قابلیت موازیسازی ندارد اما بقیه الگوریتم به طور موازی توسط N=20 پردازنده اجرا میشود. در این حالت سرعت اجرای برنامه (نسبت به زمانی که تنها روی یک پردازنده اجرا شود) 20 برابر نمیشود بلکه مطابق شکل 11 با ضریب افزایش مییابد:
شکل 11
بسیاری از الگوریتمها به منظور استفاده از سختافزار موازی باید دوباره طراحی شوند. برنامههایی که در یک سیستم با پردازنده تکی درست کار میکنند ممکن است در یک محیط موازی هرگز کار نکنند. این بدان علت است که چند کپی از یک برنامه ممکن است با یکدیگر تداخل کنند ( به طور نمونه تداخل در دسترسی همزمان به یک محل از حافظه). بنابراین نیاز اصلی یک سیستم موازی، برنامهنویسی دقیق مختص به خود است.
یکی از مسایل بحث برانگیز در زمینه پردازش موازی، افزایش سرعت فوق خطی
(Super Linear Speedup) است. افزایش "سرعت فوق خطی" برای مبتدیان یک مسئله گیج کننده است. چگونه ممکن است که یک سیستم n پردازندهای بتواند با سرعتی بیش از n برابر یک سیستم تک پردازندهای به اجرای وظایف بپردازد. به عبارت سادهتر آیا ممکن است که یک سیستم دو پردازندهای بتواند مثلاً با سرعت 2.5 برابر سیستم تک پردازندهای عمل کند؟
سرعت فوق خطی در عمل محال نیست و امکان رخ دادن آن وجود دارد هر چند که احتمال رسیدن به سرعت فوق خطی پایین است. دلیل اصلی رسیدن به چنین سرعتی وجود حافظه کش در هر پردازنده است. حافظههای کش باعث افزایش سرعت پردازنده در دسترسی به دادهها میشوند بنابراین، وقتی تعداد پردازندهها افزایش مییابد به همان نسبت حافظه کش سیستم افزایش مییابد و این نیز باعث افزایش سرعت سیستم با نسبتی بیش از تعداد پردازندهها میشود. به هر حال نحوه تقسیمبندی برنامه جهت بکارگیری پردازندهها در اجرای برنامه، عامل تعیین کننده در سرعت اجرای برنامه است.
4ـ ارتباط درون رشتهای
کامپیوترهای موازی به طور نظری، بصورت ماشینهای دسترسی تصادفی موازی
(PRAMs) مدل شدهاند. اگر چه مدل PRAM از نحوه اتصال داخلی بین واحدهای محاسباتی صحبت نمیکند اما با این وجود برای تعیین حد بالای موازیسازی یک مسئله مفید است. در حقیقت اتصال داخلی بین پردازندهها نقش مهمی را بازی میکند.
پردازندهها را میتوان با هم مرتبط کرده، به طوریکه بصورت تعاونی در حل یک مسئله بکار گرفته شوند و یا میتوان هر یک را به طور مستقل بکار گرفت به نحوی که یک پردازنده خاص قسمتهای مختلف یک مسئله را بین دیگر پردازندهها توزیع کرده و در آخر نتایج را جمعآوری کند که به این حالت اخیر Processor Farm (مزرعه پردازندهها ) گفته میشود.
به هر حال، طرق مختلفی جهت ارتباط پردازندهها با یکدیگر وجود دارد مانند حافظه اشتراکی (Shared memory)، همعرض (Crossbar)، گذرگاه اشتراکی (Shared Bus) و شبکهای (Network) به طوریکه در حالت شبکهای نیز بیشمار همبندی مثل ستارهای، حلقهای، درختی، ابر مکعبی و انواع بسیار دیگر وجود دارد.
روشهای دسترسی به پردازش موازی میتواند به روشهای مختلف صورت میگیرد که در این جا چند مورد را نام میبریم:
چند پردازندگی (Multiprocessing)
خوشهای از کامپیوتر (Computer cluster)
سوپرکامپیوترهای موازی (Parallel supercomputers)
محاسبات توزیع شده (Distributed computing)
5ـ نرمافزار موازی
تعداد بسیاری از سیستمهای نرمافزاری جهت برنامهنویسی کامپیوترهای موازی طراحی شدهاند. این سیستمها هم در سطح سیستم عامل و هم در سطح زبانهای برنامه نویسی وجود دارند. آنها باید ساز و کاری جهت تقسیم یک مسئله به چند وظیفه و تخصیص این وظایف به پردازندهها داشته باشند. چنین ساز و کارهایی میتواند شامل موازیسازی ضمنی و یا موازیسازی صریح باشد.
در روش موازیسازی ضمنی، سیستم (که میتواند کامپایلر یا برنامههای دیگر باشد) به طور خودکار مسئله را به چند وظیفه تقسیم کرده و هر یک را به پردازندهای اختصاص میدهد اما در روش موازیسازی صریح، برنامهنویس شخصاً مسئله را به چند وظیفه تفکیک و هر یک را به پردازندهای ارجاع میدهد.
به تقسیم عادلانه محاسبات بر روی همه پردازندهها، عمل موازنه بار گفته میشود. عمل موازنه بار (Load balancing) نیز کمک میکند تا از همه پردازندهها به طور یکنواخت استفاده شود. در این روش وظایف از پردازندههایی که بار بیشتری دارند به پردازندههای با بار کمتر انتقال داده میشود.
ارتباط بین وظایف, معمولاً توسط ارتباط رشتهها از طریق حافظه اشتراکی یا انتقال پیغام انجام میشود به طوریکه هر یک در شرایطی بکار گرفته میشود.
6ـ مدلهای برنامهنویسی موازی
یک مدل برنامهنویسی موازی مجموعهای از فناوریهای نرمافزاری است که برای بیان الگوریتمهای موازی و تطابق برنامهها با سیستمهای موازی بکار میرود. این مدل همان نحوه استفاده از برنامهها، زبانها، کامپایلرها، کتابخانهها، سیستمهای ارتباطی و ورودی/خروجی موازی است. دانشمندان برای توسعه برنامههای موازی خود، یک مدل برنامهنویسی موازی را انتخاب میکنند. مدلهای موازی با روشهای گوناگونی بکار گرفته میشود مثل ضمیمه شدن یک کتابخانه حاوی دستورات موازیسازی به زبانهای برنامه نویسی معمول و یا توسعه زبان برنامه نویسی یا تکمیل مدلهای اجرایی جدید.
سخن پایانی
در این مقاله سعی در معرفی پردازش موازی و بیان تعاریف ابتدایی آن شد. همینطور اهم کاربردهای آن برشمرده شد. امروزه مبحث پردازش موازی یکی از پرطرفدارترین مباحث در شاخههای مختلف علمی است که نیاز روز افزون در دستیابی به آن احساس میشود.