بحث پردازش موازی بحث جدیدی نبوده و مقدمات فکری آن را می توان از سالهای 1920میلادی در کتب مقالات پیدا کرد .موفقییت پردازش موازی از سالهای 1960شروع شد ،ظهور وپیدایش نیازهای محاسباتی – عملیاتی و کاربردی بلادرنگ موجب گردید.
تعداد زیادی پروژه طراحی وساخت سیستم های تحقیق وپژوهش درسیستمهای نرم افزاری وسخت افزاری پردازش موازی گردید،موجب تحول وتکامل سریع پردازش موازی در اوایل نسل پنجم گردید .تحول پیدا شده در ده ساله اخیر موجب گردید تا امکان بهم بندی سیستم های پردازش موازی از چند پردازش گر به چند صد هزار پردازشگر برسد ،زبان های برنامه نویسی و همراه با سیستم های عامل بهتر وکاراتر به وجود آید ،توسعه وگسترش شبکه های ارتباطی برای ارتباط واتصال واحدهای عملیاتی قدم مهم دیگری بود ، که در این دوران بر داشته شد و محدودیت های اتصال واحدهای عملیاتی ودستگاههای ورودی و خروجی را از میان برداشت.دلیل رواج و توسعه سیستم های پردازش موازی برای تأمین نیازهای محاسباتی و عملیاتی هر کاری احتیاج به قدرت ویژه ای است که تأمین آن امروزه از سه طریق استفاده از سیستم های سوپر کامپیوترها و یا سیستم های پردازش موازی ممکن ومیسر است.
هزینه سیستم های پردازش موازی به ازای توان اجرایی یک میلیون دستورالعمل در ثانیه کمتر از دو سیستم دیگر خواهد بود ودلیل آن استفاده از واحدهای معمولی کامپیوتری در سیستم های پردازش موازی است و باعث ایجاد قدرت محاسباتی وعملیاتی ارزانتر می¬شود .
1-1 پردازش موازی
پردازش ( محاسبه ی ) موازی ، شکلی از پردازش است که در آن دستورالعملهای بسیاری در یک زمان و به صورت همزمان صورت می گیرند ( انجام می شوند ) ، و بر اساس این اصل اجرا می شوند که مسائل بزرگ را اغلب می توان به مسائل کوچکتر تقسیم کرد ، که سپس با هم و به صورت همزمان حل می شوند .( به صورت موازی ) .
 چندین شکل مختلف از محاسبه ی ( پردازش ) موازی وجود دارد : توازی سطح – بیت ، توازی سطح – دستورالعمل ، توازی داده ها ، و توازی کار .
این شکل از پردازش در طول سالهای زیادی مورد استفاده قرار می گرفته است ، مخصوصاً در پردازش با اجرای بالا ( عملکرد بالا ) ، اما علاقه به آن در سالهای اخیر افزایش یافته است به دلیل محدودیت های فیزیکی که از مقیاس گذاری فرکانس جلوگیری می کند .
پردازش موازی ، الگوی برجسته ای در ساخت کامپیوتر به حساب می آید ، مخصوصاً به شکل پردازش گرمای چند هسته ای ، هر چند ، در سالهای اخیر ، مصرف انرژی توسط کامپیوترهای موازی باعث نگرانی و یک مسئله ی دارای اهمیت شده است .
کامپیوترهای موازی را می توان به طور کلی طبق سطحی که چند هسته ای و چند پردازش گر که دارای عوامل پردازش متعددی در یک دستگاه ساده می باشند ، در حالی که دسته ها ، MPP ها و شکبه ها از کامپیوترهای متعدد استفاده می کنند تا بر روی همین فعالیت کار کنند .
نوشتن برنامه های کامپیوتر موازی نسبت به کامپیوترهای ترتیبی بسیار سخت تر است ، چون همزمانی ، دسته های جدیدی از خرابی های نرم افزاری بالقوه را ایجاد می کند ، که در میان آنها شرایط کار کردن ( در جا کار کردن ) رایج ترین می باشد .
ارتباط و همزمانی بین کامپیوترهای زیر وظیفه یکی از بزرگترین موانع برای دستیابی به اجرای خوب برنامه ی موازی می باشد .
سرعت بالای یک برنامه در نتیجه موازی سازی توسط قانون آمدال داده شده است .
قبلاً ، نرم افزار کامپیوتر برای پردازش دنباله دار ( مداوم ) نوشته شده است .
برای حل یک مسئله ، یک الگوریتم ایجاد می شود و به عنوان جریان دنباله داری از دستور العمل ها اجرا می شود .
این دستورالعمل ها روی یک واحد پردازش مرکزی روی یک کامپیوتر اجرا می شوند .
در یک زمان مشخص فقط یک دستورالعمل ممکن است اجرا شود ، - بعد از آن که یک دستورالعمل تمام شد ، دستورالعمل بعدی اجرا می شود .
از طرف دیگر ، پردازش موازی از عوامل پردازش متعددی به طور همزمان استفاده می کند تا یک مسئله راحل کند .
این کار با شکستن مسئله ( تقسیم کردن مسئله ) به بخش های مستقل انجام می شود تا بنابراین هر عامل ( عنصر ) پردازش بتواند بخش الگوریتم خود را به طور همزمان با دیگر بخش ها اجرا کند .
عوامل پردازش می توانند گوناگون باشند و شامل منابعی مانند یک کامپیوتر ساده با چندین پردازشگر ، چندین کامپیوتر شبکه بندی شده ، سخت افزار ویژه، یا ترکیی از هر کدام از این ها باشند .
مقیاس گذاری فرکانس دلیل اصلی برای پیشرفت در اجرای ( عملکرد ) کامپیوتر از اواسط 1980 تا سال 2004 بوده است .
زمان اجرای یک برنامه با تعداد دستورالعمل هایی که توسط زمان میانگین هر دستور العمل ضرب می شوند ( دو برابر می شوند ) برابر است .
با ثابت ماندن همه ی چیزها دیگر ، افزایش فرکانس سرعت ، زمان میانگین که برای اجرای هر دستورالعمل طول می کشد را کاهش می دهد .
بنابراین افزایش در فرکانس ، زمان اجرای همه ی برنامه های پردازش – کران دار را کاهش می دهد .
 برای حل یک مسئله ، یک الگوریتم ایجاد می شود و به عنوان جریان دنباله داری از دستور العمل ها اجرا می شود .
هر چند ، مصرف نیرو توسط یک چیپ ( مدار مجتمع ) با تساوی F × V2 × C = P داده شده9 است ، که P نیرو ، C ظرفیت و توانایی که در هر دوره ساعت تغییر می کند ( نسبت به تعداد ترانزیستورهایی که ورودی آنها تغییر می کند ) ، V ولتاژ ، و F فرکانس پردازشگر ( در هر ثانیه می چرخد ) می باشد .
افزایش در فرکانس ، میزان نیروی مصرف شده در یک پردازشگر را افزایش می دهد .
افزایش مصرف نیروی پردازشگر باعث کنسل شدن پردازشگرهای Tejas و Jayhawk در می سال 2004 شد ، که به طور کلی به عنوان پایان مقیاس گذاری فرکانس به عنوان الگوی اصلی ساخت کامپیوتر ذکر شده است .
قانون مور مشاهده ی تجربی است که تراکم ترانزیستور در یک پردازشگر کوچک ( میکرو) هر 18 تا 24 ماه دو برابر می شود .
علی رغم مسائل مربوط به مصرف نیرو ، و پیش بینی های تکراری از پایان آن ، قانون مور هنوز موثر است .
با پایان مقیاس گذاری فرکانس ، این ترانزیستورهای اضافی را می توان برای افزودن سخت افزار اضافی برای پردازش موازی به کار برد .
قانون آمدال و قانون گاستافسون : زمان اجرای برنامه و سرعت یک برنامه با موازی سازی زیر بهینه .
منحنی آبی ، افزایش سرعت ( خطی ) که در مورد بهینه در برنامه بودجود می آید را ترسیم می کند ، در حالی که منحنی بنفش افزایش سرعت واقعی (زیر بهینه ) را نشان میدهد .
به همین ترتیب ، منحنی زرد ، زمان اجرایی را که برنامه در مورد بهینه تجربه خواهد کرد را نشان می دهد .
که p تعداد پردازشگرها ، s افزایش سرعت و بخش غیر قابل موازی شونده ی فرآیند می باشد .
قانون آمدال یک اندازه ی مساله ثابت را فرض می کند و این که اندازه ی بخش بعدی مستقل از تعداد پردازشگر ها می باشد ، در حالی که قانون گاستافسون این فرضیه ها را در نظر نمی گیرد .
وابستگی ها : فهم و وابستگی های داده ها و (اطلاعات ) در اجرای الگورتیم های موازی مهم و اساسی است هیچ برنامه نمی تواند سریع تر از بلندترین زنجیره ی محاسبات وابسته اجرا شود ( که به عنوان مسیر اصلی شناخته شده است ) چون محاسباتی که بستگی به محاسبات قبلی در زنجیره دارند باید به ترتیب اجرا شوند .
هر چند اکثر الگوریتم ها برای اجرای محاسبات مستقل به طور موازی وجود دارند .
فرض کنیم pi و pj دو بخش از برنامه می باشد .
شرایط برنستین زمان توصیف می شود که این دو مستقل از همدیگر هستند و می توانند به طور موازی اجرا شوند .
فرض کنیم Li همه ی متغیرهای ورودی به pi و oi متغیر های خروجی باشند ، و به همین ترتیب برای pj .
pI و pj از هم مستقل هستند اگر یکدیگر را برآورده کنند .
اختلال موقعیت اول جریانی از وابستگی را ایجاد می کند که باوضعیت اول مطابق است و نتیجه ای را ایجاد می کند که توسط وضعیت دوم مورد استفاده قرار می گیرد .
موقعیت دوم یک ضد وابستگی را نمایان می کند ، هنگامی که وضعیت اول متغیری را که توسط عبارت دوم مورد نیاز است بیش از حد می نویسد .
موقعیت سوم و نهایی ، 4 ، یک وابستگی خروجی است .
هنگامی که دو متغیر برای موقعیت مشابه نوشته می شوند ، خروجی نهایی باید از وضعیت دوم بلند شود ( ایجاد شود ) .
عملیات زیر را در نظربگیرید ، که چندین نوع وابستگی را شرح می دهند : عملیات 3 در (a.b ) Dep را نمی توان قبل ازعملیات 12 اجرا کرد ( یا حتی موازی با آن ) ، چون عملیات 3 نتیجه ای از عملیات 2 را مورد استفاده قرار می دهد .
این امر شرایط 1 را مختل می کند .
و بنابراین جریانی از وابستگی را ایجاد میکند .
در این مثال هیچ وابستگی بین دستورالعمل ها وجود ندارد ، بنابراین می توان همه آنها را به صورت موازی اجرا کرد .
شرایط برنستین این امکان را به حافظه نمی دهد که بین فرآیندهای مختلف تقسیم شود .
به همین دلیل برخی ابزرا تقویت برای ترتیب بین دستیابی ها لازم است ، مانند مخابرها ، موانع ، یا برخی دیگر از روش های همزمان سازی شرط اصل ، منع ( جلوگیری ) متقابل ، همزمانی ، و کاهش سرعت موازی : کارهای زیر مجموعه در یک برنامه های موازی معمولاً نخ ( رشته ) نامیده می شوند .
برخی ساختارهای کامپیوتر موازی از رشته های کوچکتر و سبک تر استفاده می کنند که فیبر نامیده می شود ، در حالی که دیگر کامپیوترها از رشته های بزرگتر که فرآیند نامیده می شوند ، استفاده می کنند هر چند رشته ها به طور کلی به عنوان یک اصطلاح کلی برای کارهای زیر مجموعه پذیرفته شده است .
رشته ها باید اغلب برخی متغیرها را که بین آنها تقسیم می شود به روز کنند .
این دستوالعملها بین دو برنامه ممکن است در هر ترتیبی دارای صفحه سفید شوند .
برای مثال ، برنامه زیر را در نظر بگیرید : اگر دستورالعمل 1B بین 1A و 3A اجرا شود ، یا اگر دستورالعمل 1A بین 1B و 3B اجرا شود ، برنامه اطلاعات ( داده های ) غلط ایجاد خواهد کرد .
این مسئله به عنوان شرط اصل شناخته شده است .
برنامه ریز باید از یک قفل استفاده کند تا منع ( جلوگیری) متقابل را ایجاد کند .
قفل یک ساختار زبان برنامه ریزی است که به یک رشته امکان کنترل یک متغیر را میدهد و دیگر رشته ها را از خواندن یا نوشتن آن منع می کند ، تا زمانی که آن متغیر باز شود .
رشته ای که قفل را نگه داشته است آزاد است که بخش مهم خود را اجرا کند ( بخشی از یک برنامه که نیاز به دسترسی انحصاری به برخی متغیرها دارد ) ، و هنگامی که تمام می شود داده ها را باز کند .
بنابراین ، برای تضمین اجرای صحیح برنامه ، برنامه ی بالا را می توان برای استفاده از قفل ها باز نویسی کرد : یک رشته به طور موفقیت آمیزی متغیر V را قفل خواهد کرد ، در حالی که رشته ی دیگر باز خواهد کرد – نمی تواند پیش رود ( پیشرفت کند ) تا زمانی که V دوبار باز شود .
این امر اجرای صحیح برنامه را تضمین می کند .
قفل ها ، در حالی که برای تضمین اجرای صحیح برنامه لازم هستند ، می توانند به شدت سرعت یک برنامه را کاهش دهند .
قفل کردن چندین متغیر با استفاده از قفل های غیر اتمی امکان قفل کردن چندین متغیر بااستفاده از قفل های غیر اتمی امکان قفل کردن محکم ( باز نشونده ی) برنامه را ایجاد می کند .
یک قفل الهی چندین متغیر را در یک زمان قفل می کند ، هیچ کدام از آنها را قفل نمی کند .
اگر دو رشته هر کدام قفل کنند ، این امکان وجود دارد که یک رشته چنین موردی ، هیچ کدام از رشته ها نمی توانند کامل شوند ، و قفل محکم (باز نشونده ) نتیجه می شود .
بسیاری از برنامه های موازی نیاز دارند که کارهای