جمعه 25 دیماه 1383

كلاك پردازنده ها در برابر سرعت واقعي :

نوشته شده در21:33 article .

حتما اگر تا كنون با پردازنده هاي AMD كار كرده ايد متوجه شده اين كه هنگام نصب فركانس كاري اين پردازنده ها با مدل اعلام شده از سوي كارخانه مغايرت دارد . اما چرا؟ به صورت ساده شركت AMD ادعا مي كند كه فركانس اعلام شده پردازنده هاي خود در حقيقت نشاندهنده اينموضوع است كه اين پردازنده در حد همتاي خود متعلق به شركت اينتل كارآيي دارد .

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

در حال حاضر رقابت اصلي در بازار پردازنده هاي PC بين دو شركت AMD و اينتل جريان دارد . هر چند در زمان طراحي نمونه اوليه پردازنده 8086 بيش از 12 شركت آنرا توليد مي كردند ، اما به مرور زمان شركتهاي كوچك از دور رقابت خارج شدند و رقابتهاي اصلي بين اين دو شركت ايجاد شد .
اما همانطور كه حتما تا كنون متوجه شده ايد < براي كامپيوتر شما تفائتي نمي كند كه پردازنده شما AMD باشد يا اينتل و تمامي نرم افزار ها با اين پردازنده هاي همخواني دارند و كار مي كنند . دليل اين موضوع استفاده هر دو پردازنده از دستورات مشابه بر مبناي X86 مي باشد . به زبان ساده تر اينكه كليه كدهاي نرم افزاري ( از جمله سيستم عامل ) توسط كامپايلرها يا اسمبلر در انتها به فايلي به زبان ماشين تبديل مي شوند . زبان ماشين زباني است بر اساس صفر و يك كه توسط سخت افزار قابل كد گشايي است . تمامي پردازنده هاي X86 دستورات مشابهي در سطح زبان ماشين دارند امانكته اي كه باعث تمايز آنها از يكديگر مي شود ، چگونگي پياده سازي سخت افزاري اين دستورات مي باشد كه هر شركت بنا به طرح و سازمان كامپيوتر خود اين دستورات را پياده سازي مي كند .
اينجاست كه تفاوت در عملكرد پردازنده ها كاملا مشخص مي شود چرا كه هر يك بر اساس طرحهاي خود دستورات زبان ماشين را پياده سازي ميكنند .
اما حالا قدري وارد مسايل پيچيده تر شويم . همانطور كه در ايتدا گفتم بحث اصلي ما دليل بالاتر بودن كارآيي برخي پردازنده ها با فركانس پايين است . اولين پارامتري كه به غير از فركانس در سرعت يك پردازنده موثر است ، پارامتر IPC ( Instruction Per Clock ) مي باشد . IPC به زبان ساده يعني به طور متوسط چند دستورالعمل در هر كلاك اجرا مي شود .
اما مقدار IPC به مساثل گوناگوني ارتباط دارد كه مهمترين آن موازي گري در يك پردازنده مي باشد .
لگر خط توليد يك كارخانه را مشاهده كرده باشيد ( فيلم معروف عصر جديد اثر چارلي چاپلين را حتما ديده ايد ) كارها بين بخشهاي مختلف تقسيم مي شوند به اين معني كه هر بخش تنها نسئول انجام جزيي از كار است و پس از انجام وظيفه خود ، محصول را به بخش بعدي براي تكميل مي فرستد .
اين اتفاق در پردازنده ها هم مي افتد با اين تفاوت كه به جاي خط توليد از واژه خط لوله ( PipeLine ) استفاده مي شود . به بيان ديگر پردازش خط لوله هر عمليات را به جندين ريز عمل مثلا K ريز عمل مي شكند ، طوري كه هر كدام از اين K ريز عمل در يك مرحله يكي پس از ديگري اجرا مي شوند و هر عمليات با گذشت k مرحله به طور كامل انجام مي پذيرد .
بهتر است براي روشن شدن يك مثال ساده را بررسي مي كنيم . در اين مثال فرض مي كنيم يك خط لوله چهار مرحله اي داريم . كه داراي مراحل زير است :
1) Fetch : : در اين مرحله دستورالعمل به پردازنده واكشي مي شود .
2) Decode : دستورالعمل كدگشايي مي شود و نوع دستور و داده هاي مورد نياز آن معلوم مي شود .
3) Execute دستورالعمل اجرا مي شود .
4) WriteBack : نتيجه اجرا نوشته و ذخيره مي شود .
در اين حالت اجراي هر دستورالعمل به چهار قسمت تقسيم شده است و اگر تعداد زيادي دستوراعمل داشته باشيم مانند شكل 1 انجام مي شوند .
همانطور كه مشاهده مي كنيد به اين ترتيب از منابع سيستم به طور كامل استقاده مي شود و پردازشي موازي به وجود آيد .از سوي هر چه تعداد مراحل خط لوله بيشتر باشد ، در نتيجه مي توان فركانس پردازنده را بالاتر برد چرا كه در اين صورت در هر مرحله عمليات كمتري انجام مي شود در نتيجه سرعت هر مرحله بالاتر مي رود .
اما بالابردن تعداد مراحل در سيستمهاي پردازنده اي با دستورالعملهاي بالا مانند پردازنده هاي مبتني بر X86 مانند شمشير دو لبه است . چرا كه بالا بردن مراحل مشكل ديگري را در هنگام اجراي دستورات به وجود ما آورد . به طور ساده اينكه پردازش خط لوله اي دتنها در حالتي به طور 100% جولا مي دهد كه تمامي دستورات برنامه به صورت ترتيبي بلشيد كه معمولا برنامه ها اينطور نيستند . اگر اهل برنامه نويسي باشيد حتما ار شرطها حلفه ها و احيانا پرشها استفاده كرده ايد . اين دستورات در سطح زبان ماشين همگي با انشعابها ( Branch )پياده سازي مي شوند. اما در ضردازش خط لوله اي مشكل اينجاست كه زماني كه يك انشعاب اتفاق بيفتد ، در حقيقت تمامي دستوراتي كه بعد از پرش به صورت ترتيبي در برنامه موجود داشته اند بايد از خط لوله خارج شوند و دستورات مقصد پرش به خط لوله بار شود . اين عمل بسيار زمانگير است و نكته ديگر اينكه اكثر پرشها در مراحل اجرايي ( در مثال بالا در مرحله Execute ) شناسايي مي شوند و هر چه تعداد مراحل بيشتر باشد < تعداد دستوراتي كه بايد از خط لوله تخليه شوند بيشتر است . در مثالي كه زده شد شناسايي يك انشعاب ممكن است منجر به ورود دو دستور به خط لوله شود كه بايد تخليه شوند .
اما در AMD AThLON مراحل خط لوله 10 زيرمرحله مي باشد و اين مقدار در پردازنده هاي Pentium 4 Intel عدد 20 مي باشد . به اين ترتيب اينتل مي تواند به سادگي فركانس پردازنده هاي خود را بالا ببرد اما همانطور كه گفته شد در انشعابها ضعيفتر از AMD عمل مي كند .
جالب اينجاست كه در عمل نيز همين اتفاق مي افتد ، چنانچه IPC در پردازنده هاي اينتل بدون تكنولوژي HT عدد 6 و در پردازنده هاي AMD عذذ 9 است . به زبان ساده تر اينكه به طور متوسط يك پردازنده AMD با فركانس بكسان با رقيب Pentuim 4 اش ، 1.5 برابر سريعتر عمل مي كند .
البته IPC تنها به خط لوله ارتباط پيدا نمي كند و مساثل ديگري همچون نقدار حافظه Cache ، مكانيزم پيش بيني هاي انشعاب و .. در IPC موثرند كه به دليل سنگين بودن اين مطالب ، بحث درباره آنها را به آينده موكول مي كنيم