اشاره :
نگاهي به دلايل انتخاب پردازنده‌هاي چند هسته‌اي و مقوله پردزاش موازي در آنها



مقدمه
آيا يك پردازنده دو هسته‌اي با فركانس كاري 1.8 گيگاهرتز برابر با يك پردازنده تك هسته‌اي با فركانس كاري 3.6 گيگا هرتزي است ؟آيا پردازنده دو هسته‌اي با فركانس كمتر ، قويتر از پردازنده تك هسته‌اي با فركانس بالاتر است ؟ اساس كار پردازنده‌هاي دو هسته‌اي چيست ؟
سوالاتي از اين قبيل هنوز هم در ذهن كاربران در هنگام خريد پردازنده مطرح مي‌شود. در اين مطلب سعي مي‌كنيم با توضيح كوتاهي ديد شما را نسبت به پردازنده‌هاي چند هسته‌اي باز تر كنيم.

پردازنده‌هاي چند هسته‌اي
در دنياي امروز و در صنعت ساخت پردازنده‌ها ، رقابت بر سر افزايش فركانس كاري متوقف شده و جنگ بر سر تعداد هسته‌هاي پردازشگر و ميزان كارآيي آنها شكل گرفته است. در اين حالت تنها سازنده‌اي موفق است كه بتواند تعادلي مناسب بين سرعت كلاك و تعداد واحد‌هاي پردازشگر برقرار كند. به لطف تكنولوژي‌هاي ساخت 90 نانو و يا 65 نانو پردازنده‌هايي با بيش از يك واحد پردازشگر ممكن شدند. پروسه‌هاي ساخت مذكور با كاهش اندازه سطح Die و نيز قابليت مديريت بهتر توان مصرفي و در نتيجه كاهش حرارت ايجاد شده ، تعداد بيشتري از واحد‌هاي پردازشگر را در پردازنده ممكن ساخته اند.هم اكنون نيز 4 واحد پردازشگر را در يك پردازنده ديده‌ايم و در آينده نيز قطعا اين مقدار افزايش خواهد يافت. اما آنچه كه مهم جلوه مي‌كند اين است كه نرم‌افزار‌ها چگونه مي‌توانند گذر از تك هسته‌اي به دوهسته و يا چهار هسته‌اي را پذيرفته و خود را با آن هماهنگ سازند.
در اين مطلب به بررسي اين موضوع پرداخته و گوشه‌اي از جريان پردازش موازي را مورد بررسي قرار مي‌دهيم.

در حالت ايده‌آل نرم‌افزاري را در نظر مي‌گيريم كه مي‌تواند از قابليت Multi-Threading به درستي استفاده كند. البته علت اينكه عبارت " به درستي " را بكار برديم در ادامه ارايه خواهد شد. بدين ترتيب اين نرم‌افزار مي‌تواند بار كاري خود را به چندين رشته قابل پردازش (Thread) بصورت كاملا يكسان از لحاظ حجم كاري تقسيم كرده و آنها را براي پردازش به سمت هسته‌هاي پردازشگر ارسال كند. حال اين هسته‌هاي پردازشگر مي‌تواند در يك پردازنده بوده و يا تركيبي از چندين پردازنده باشد. بدين ترتيب هر رشته قابل پردازش را يك هسته پردازشگر مورد پردازش قرار داده و سرعت انجام كار افزايش مي‌يابد. بهتر است اين پروسه را با ذكر مثالي بيان كنيم .
به عنوان مثال عبارت محاسباتي زير را در نظر بگيريد : (1+2)x(3+4)
اگر فرض كنيم هر عمليات رياضي در يك سيكل به انجام برسد آنگاه براي انجام اين عبارت به 3 سيكل كاري احتياج خواهيم داشت(با فرض اينکه پردازنده‌اي تك هسته‌اي، اين عمليات در 3 سيكل كاري انجام مي‌گيرد).اما اگر پردازنده‌ دو هسته‌اي در اختيار داشته باشيم در يك سيكل بطور موازي محاسبه مقادير داخل پرانتز صورت گرفته و در يك سيكل ديگر نتايج داخلي دو پرانتر در هم ضرب مي‌گردند.
بعبارتي ديگر مي‌توان گفت پردازش نتيجه داخلي دو پرانتز در يك سيكل و بطور همزمان و موازي توسط دو هسته صورت مي‌گيرد و سپس عمل ضرب انجام مي‌پذيرد. ملاحظه مي‌كنيد كه در اين حالت فركانس كاري در جريان كلي كار در نظر گرفته نشده است. اين بدين معني است كه با افزايش تعداد هسته‌هاي پردازشگر به سبب خاصيت " پردازش موازي " كارآيي و سرعت انجام كار افزايش مي‌يابد. كاملا واضح است كه تعداد كارگر‌هاي بيشتر، همواره از تعداد كارگر‌هاي سريع ولي كمتر ، پر سرعت تر است. به همين دليل در هنگام ورود پردازنده‌هاي دو هسته‌اي شاهد بوديم كه فركانس كاري آنها در مقايسه با پردازنده‌هاي تك هسته بطور قابل توجهي كاهش يافته بود.

يكي از مسايلي كه اكثر كاربران را دچار مشكل كرده بود كاهش فركانس كاري در پردازنده‌هاي دو هسته‌اي است. درواقع سوال خيلي‌ها اين بود كه براي مثال، پردازنده 3.6 گيگا هرتزي پنتيوم 4 قويتر است يا پردازنده 1.8 گيگاهزتزي Core 2 ؟
شايد با مثال بالا كمي ‌شبهات بر طرف شده باشد. البته تمام برتري پردازنده‌هاي دو هسته‌اي جديد به پردازش موازي آنها نيست اما مي‌توان گفت بارزترين علت اين برتري همين توانايي و قابليت پردازش موازي است.

اما اين قضيه تمام جريان نيست. با ورود پردازنده‌هاي چند هسته‌اي مشكلات و نقاط ضعف جديد نيز مطرح شدند. در واقع هميشه ميزان بار كاري لازم براي استفاده از دو يا چهار هسته پردازنده وجود ندارد. همچنين در تقسيم و انتشار بار كاري بين هسته‌هاي پردازشگر نيز هنوز مكانيسم صحيحي ديده نمي‌شود. به عبارت بهتر واسط‌هاي فيزيكي ( HyperTransport در AMD و Front Side Bus در Intel ) ممكن است سبب ايجاد گلوگاه در اين امر شوند. اگر به لايه‌هاي بالاتر نيز دقت كنيم سيستم عامل هم به عنوان فرستنده و توزيع كننده ، خود مي‌تواند سبب ايجاد گلوگاه گردد.
جدال نرم‌افزار‌ها با پردازنده‌هاي چند هسته‌اي
در بخش قبلي اشاره كرديم كه يك نرم‌افزار در حالت ايده‌آل مي‌تواند به درستي از قابليت Multi-Threading بهره گرفته و توانايي پردازنده چند هسته‌اي را به طرز درستي مورد استفاده قرار دهد. بحث بر سر اين است كه اين استفاده درست از قابليت Multi-Threading چگونه است. به خاطر بياوريد زماني را كه پردازنده‌هاي دو هسته‌اي تازه به بازار عرضه شده بودند. در آن زمان بازي‌هاي وقت به خوبي بر روي پردازنده‌هاي تك هسته‌اي اجرا مي‌شدند اما بر روي پردازنده‌هاي دو هسته‌اي كمي‌با مشكل مواجه شده بودند. آنچه در زمان ورود پردازنده‌هاي دو هسته‌اي مطرح مي‌شد عدم توانايي نرم‌افزار‌ها در استفاده از تمام قابليت‌هاي يك پردازنده‌هاي دو هسته‌اي بود. چرا كه نرم‌افزارها نمي‌توانستند بار كاري خود را به رشته‌هاي قابل پردازش يكسان از لحاظ حجم كاري تقسيم كرده و بدين ترتيب سرعت انجام پردازش را افزايش دهند. در مقابل عبارت Multi-Threading مي‌توان مفهوم Multi Tasking را مطرح كرد. به عنوان مثال استفاده از يك مرورگر براي ديدن صفحات اينترنتي و هم زمان با آن گوش دادن به موسيقي ، مفهموم چند وظيفه‌اي را توجيه مي‌كند. جرياني كه پردازنده‌هاي دو هسته‌اي و يا چند هسته‌اي به خوبي از عهده آن بر مي‌آيند. چرا كه ديگر بحث بار كاري يك نرم‌افزار مستقل مطرح نيست. اما همانطور هم كه قبلا اشاره كرديم Multi-Threading بصورت ايده آل ( حداقل در بين خيل زيادي از نرم‌افزار‌هاي فعلي ) وجود ندارد. اما به نوعي هم گوشه‌اي از عمليات Multi-Threading ديده مي‌شود. براي مثال آنتي ويروسي را در نظر بگيريد. واسط گرافيكي اين آنتي ويروس را مي‌توان يك رشته قابل پردازش و دستور اسكن سيستم را رشته اي ديگر فرض كرد. اما آنچه كه مسلم است اين است كه حجم كاري اين دو رشته يكسان نيست و لذا Multi-Threading به معنا و مفهوم ايده آل خود اجرا نخواهد شد.

با توضيحات فوق مي‌توان به اين نتيجه رسيد كه يكي ديگر از عواملي كه قابليت‌هاي يك پردازنده چند هسته‌اي را محدود مي‌كند وجود نرم‌افزار‌هاي اين چنيني است. در واقع در هنگام اجراي يك نرم‌افزار آنتي ويروس و در كنار آن تماشاي يك DVD مي‌توانيد به افزايش كارآيي سيستم خود پي ببريد ( Multi Tasking ) اما در هنگام اجراي يك نرم‌افزار بر روي پردازنده چند هسته‌اي خود شايد اين تفاوت را اصلا احساس نكنيد.
توسعه نرم‌افزار‌ها در حالت Multi-Threading ايده آل ، كار سختي است. در كنار كار سخت ، هزينه بالا نيز نا گزير خواهد بود. به همين دليل است كه هنوز اكثر نرم‌افزار‌ها به اين سمت كشيده نشده‌اند. هر چند در بين بازي‌هاي جديد و به روز مواردي ديده مي‌شود كه سازندگان آنها توانايي پشتيباني از پردازنده‌هاي چند هسته‌اي را در ساختار اجرايي بازي لحاظ كرده اند.
سخن پاياني
همانطور كه ملاحظه كرديد پردازنده‌هاي دو هسته‌اي و نيز چند هسته‌اي از لحاظ سرعت انجام كار ( بدون توجه به فركانس كاري ) برتري خود را ثابت كرده اند. تنها عاملي كه مي‌توان در سطح كاربري آن را مهم دانست وجود نرم‌افزار‌هاي سازگار با پردازنده‌هاي چند هسته‌اي است. مشكلي كه در ابتداي ورود آنها ديده مي‌شد و به تدريج در حال رفع شدن است. در واقع سازندگان نرم‌افزار ناچار به پذيرش اين ساختار جديد هستند. تمام حالات فوق سبب نمي‌شود كه در خريد پردازنده‌هاي چند هسته‌اي شك كنيد. چرا كه در آينده اي نه چندان دور " پردازش موازي " و " پردازش چند وظيفه‌اي " مهمترين عوامل در پروسه پردازش خواهند بود. بنابراين اگر قصد خريد پردازنده اي چند هسته‌اي را داريد در مورد آن ترديد نكنيد. آينده از آن پردازنده‌هاي چند هسته‌اي است .