واحد پردازش مرکزی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Die of an Intel ۸۰۴۸۶DX۲ microprocessor

سی‌پی‌یو (به انگلیسی: Central Processing Unit یا CPU) یا پردازنده (به انگلیسی: Processor)، یکی از اجزاء رایانه می‌باشد که فرامین و اطلاعات را مورد پردازش قرار می‌دهد. واحدهای پردازش مرکزی ویژگی پایه‌ای قابل برنامه‌ریزی‌شدن را در رایانه‌های دیجیتال فراهم می‌کنند، و یکی از مهم‌ترین اجزاء رایانه‌ها هستند. یک پردازندهٔ مرکزی، مداری یکپارچه می‌باشد که معمولاً به عنوان ریزپردازنده شناخته می‌شود. امروزه عبارت CPU معمولاً برای ریزپردازنده‌ها به کار می‌رود.
عبارت «Central Processor Unit» (واحد پردازندهٔ مرکزی) یک ردهٔ خاص از ماشین را معرفی می‌کند که می‌تواند برنامه‌های رایانه را اجرا کند. این عبارت گسترده را می‌توان به راحتی به بسیاری از رایانه‌هایی که بسیار قبل‌تر از عبارت "CPU" بوجود آمده بودند نیز تعمیم داد. به هر حال این عبارت و شروع استفاده از آن در صنعت رایانه، از اوایل سال ۱۹۶۰ رایج شد. شکل، طراحی و پیاده‌سازی پردازنده‌ها نسبت به طراحی اولیه آنها تغییر کرده‌است ولی عملگرهای بنیادی آنها همچنان به همان شکل باقی‌مانده‌است.
پردازنده‌های اولیه به عنوان یک بخش از سامانه‌ای بزرگ‌تر که معمولاً یک نوع رایانه‌است، دارای طراحی سفارشی بودند. این روش گران قیمت طراحی سفارشی پردازنده‌ها برای یک بخش خاص، به شکل قابل توجهی، مسیر تولید انبوه آنرا که برای اهداف زیادی قابل استفاده بود فراهم نمود. این استانداردسازی روند قابل ملاحظه‌ای را در عصر مجزای ابر رایانه‌های ترانزیستوری و ریز کامپیوترها آغاز نمود و راه عمومی نمودن مدارات مجتمع(IC یا Integrated Circuit) را سرعت فراوانی بخشید. یک مدار مجتمع، امکان افزایش پیچیدگی‌ها برای طراحی پردازنده‌ها و ساختن آنها در مقیاس کوچک را (در حد میلیمتر) امکان پذیر می‌سازد. هر دو فرایند (کوچک سازی و استاندارد سازی پردازنده‌ها)، حضور این تجهیزات رقمی را در زندگی مدرن گسترش داد و آن را به فراتر از یک دستگاه خاص مانند رایانه تبدیل کرد. ریزپردازنده‌های جدید را در هر چیزی از خودروها گرفته تا تلفن‌های همراه و حتی اسباب بازی‌های کودکان می‌توان یافت.

مدت زمان انجام یک کار به‌وسیله رایانه، به عوامل متعددی بستگی دارد که اولین آنها، سرعت پردازشگر رایانه‌است. پردازشگر یک تراشه الکترونیکی کوچک در قلب کامپیوتر است و سرعت آن بر حسب مگاهرتز یا گیگاهرتز سنجیده می‌شود. هر چه مقدار این پارامتر بیشتر باشد، پردازشگر سریعتر خواهد بود و در نتیجه قادر خواهد بود، محاسبات بیشتری را در هر ثانیه انجام دهد. سرعت پردازشگر به عنوان یکی از مشخصه‌های یک کامپیوتر به قدری در تعیین کارآیی آن اهمیت دارد که معمولاً به عنوان یکی از اجزای تشکیل دهنده نام کامپیوتر از آن یاد می‌شود. تراشه پردازشگر و اجزای الکترونیکی که آن را پشتیبانی می‌کنند، مجموعاً به عنوان واحد پردازش مرکزی یا CPU شناخته شده هست

واحد پردازش مرکزی واحد محاسباتی (ALU) و کنترلی (CU) رایانه‌است که دستورالعمل‌ها را تفسیر و اجرا می‌کند. رایانه‌های بزرگ و ریزرایانه‌های قدیمی بردهایی پر از مدارهای مجتمع داشته‌اند که عمل پردازش را انجام میداده‌اند. تراشه‌هایی که ریز پردازنده نامیده می‌شوند، امکان ساخت رایانه‌های شخصی و ایستگاه‌های کاری (Work Station) را میسر ساخته‌اند.

در اصطلاح عامیانه CPU به عنوان مغز رایانه شناخته می‌شود.

تاریخچه[ویرایش]

پیش از ظهور اولین ماشین که به پردازنده‌های امروزی شباهت داشت؛ کامپوترهای مثل انیاک مجبور بودند برای اینکه کارهای مختلفی را انجام دهند دوباره سیم کشی شوند. این ماشین‌ها کامپیوترهایی با برنامه ثابت نامیده می‌شوند. از آنجای که عبارت پردازنده عموماً برای دستگاه‌هایی که برنامه‌های کامپیوتری را اجرا می‌کنند به کار می‌رود، می‌توان کامپیوترهای برنامه ذخیره شده (stored-program computer) را به عنوان اولین پردازنده‌ها نام برد. ایده کامپیوترهای برنامه ذخیره شده در طراحی J. Presper Eckert و John William برای کامپیوتر اینیاک ارائه شده بود، ولی خیلی زود از طرح حذف گشت تا طرح سریع به اتمام برسد. در ۳۰ ژوئن ۱۹۴۵ قبل از اینکه اینیاک ساخته شود، ریاضی دانی به نام John von Neumann یک مقاله با عنوان اولین پیش نویس گزارش EDVAC منتشر کرد. که این طرح کلی از اولین کامپیوتر برنامه ذخیره شده بود که سرانجام در آگوست ۱۹۴۹ به اتمام رسید. EDVAC برای انجام تعداد خاصی از دستورالعمل‌ها طراحی شده بود. این دستورالعمل‌ها می‌توانستند ترکیب شوند و برنامه‌های مفیدی را روی EDVAC اجرا کنند. روشن است که برنامه‌هایی که برای EDVAC نوشته شده بودن روی حافظهٔ سریع کامپیوتر ذخیره می‌شدند به جای سیم کشی کردن مشخص کامپیوتر. طراحی von Neumann بر این محدودیت اینیاک، که زمان و تلاش زیاد برای پیکربندی مجدد برای انجام کار جدید بود غلبه کرد. برنامه یا نرم‌افزار ی که بر روی EDVAC اجرا می‌شد می‌توانست به راحتی محتویات حافظه را تغییر دهد. در ابتدا CPU ها به صورت اختصاصی به عنوان بخشی از یک دستگاه بزرگتر طراحی می‌شدند که گاهی بخشی از یک رایانه بودند. با این حال این روش سفارشی طراحی برای یک کاربرد خاص، راه را برای تولید انبوه پردازنده‌های ساخته شده نا هموار می‌کرد. استاندارد سازی پردازنده‌ها با پیدایش ترانزیستورها و میکرو کامپیوترها شروع شد و با ظهور آی سی‌ها شتاب بیشتری گرفت. آی سی‌ها این اجازه را می‌دادند که CPUهای پیچیده تر و با قواعد طراحی نانو متر تولید شوند. استانداردسازی و کوچک شدن CPUها هر دو باعث افزایش حضور دستگاه‌های دیجیتال در زندگی مدرن در مقابل کاربرد محاسباتی خاص شدند. ریز پردازنده‌ها در هر جایی از ماشین‌ها تا تلفن‌های همراه و اسباب بازی‌های کودکان حضور دارند. هرچند von Neumann به خاطر طراحی EDVAC خود شناخته شده است، قبل از او افرادی مانند Konrad Zuse ایده‌های مشابهی را مطرح و پیاده سازی نموده بودند. اصطلاح معماری هاروارد Harvard Mark که یک طراحی برنامه ذخیره شده که از نوار کاغذهای منگنه بجای حافظه‌های الکترونیکی استفاده می‌کرد، قبل از EDVAC تمام شده بود. تفاوت اصلی بین طراحی ون و معماری هاروارد فضای مشترک برای ذخیره دستورالعمل‌ها و داده‌ها در مقابل فضاهای جدا گانه طراحی هاروارد بود. اغلب CPUهای مدرن از طراحی ون پیروی می‌کنند، اما المان‌هایی هم وجود دارند که معماری هاروارد پیروی می‌کنند. رله‌ها و لامپ‌های خلا که عموماً به عنوان عناصر سوئیچینگ مورد استفاده قرار می‌گرفتند. یک کامپیوتر مفید به هزاران یا صدها هزار از این المان‌های سوئیچینگ نیاز دارد و سرعت کلی سیستم به سرعت این سوئیچ‌ها وابسطه است. کامپیوترهای لامپ خلا نزیر EDVAC تقریباً ۸ ساعت بدون خرابی کار می‌کردند در حالی که کامپیوترهای رله‌ای مانند طراحی هاروارد خیلی زودتر با مشکل مواجه می‌شدند. در نهایت CPUهای بر پایه لامپ خلا به دلیل سرعت قابل توجه و قابلیت اطمینان بیشتر بر هم نوعان خود پیروز شدند. اغلب CPUهای سنکرون نسبت به CPUهای مدرن با فرکانس کلاک کمتری در حد ۱۰۰Hz تا ۴ MHz کار می‌کردند که این محدودیت به دلیل سرعت کم المان‌های سوئیچ بود.

ترانزیستورهای گسسته و مدارات مجتمع (واحد پردازش مرکزی)[ویرایش]

PDP-8i cpu.jpg

پیچیدگی طراحی پردانده‌ها هم‌زمان با افزایش سریع فناوری‌های متنوع که ساختارهای کوچک‌تر و قابل اطمینان تری را در وسایل الکترونیک باعث می‌شد، افزایش یافت. اولین موفقیت با ظهور اولین ترانزیستورها حاصل شد. پردازنده‌های ‍‍ترانزیستوری در طول دهه‌های ۵۰ و ۶۰ میلادی زمان زیادی نبود که اختراع شده بود و این در حالی بود که آنها بسیار حجیم، غیر قابل اعتماد و دارای المانهای سوئیچینگ شکننده مانند لامپ‌های خلا و رله‌های الکتریکی بودند. با چنین پیشرفتی پردازنده‌هایی با پیچیدگی و قابلیت اعتماد بیشتری بر روی یک یا چندین برد مدار چاپی که شامل قسمت‌های تفکیک شده بودند ساخته شدند.

ریزپردازنده‌ها[ویرایش]

ریزپردازنده اینتل 80486DX2 در یک بسته سرامیکی

پیدایش ریز پردازنده‌ها در سال ۱۹۷۰ به طور قابل توجهی در طراحی و پیاده سازی پردازنده‌ها تأثیر گذار بود. از زمان ابداع اولین ریزپردازنده (اینتل۴۰۰۴)در سال ۱۹۷۰ و اولین بهره برداری گسترده از ریزپردازنده اینتل ۸۰۸۰ در سال ۱۹۷۴، این روند رو به رشد ریزپردازنده‌ها از دیگر روشهای پیاده سازی واحدهای پردازش مرکزی (CPU) پیشی گرفت، کارخانجات تولید ابر کامپیوترها و کامپیوترهای شخصی در آن زمان اقدام به تولید مدارات مجتمع با برنامه ریزی پیشرفته نمودند تا بتوانند معماری قدیمی کامپیوترهای خود را ارتقا دهند و در نهایت ریز پردازنده‌ای سازگار با مجموعه دستورالعمل‌ها ی خود تولید کردند که با سخت‌افزار و نرم‌افزارهای قدیمی نیز سازگار بودند. با دستیابی به چنین موفقیت بزرگی امروزه در تمامی کامپیوترهای شخصی CPUها منحصراً از ریز پردازنده‌ها استفاده می‌کنند.

عملکرد ریزپردازنده‌ها[ویرایش]

کارکرد بنیادی بیشتر ریزپردازنده‌ها علی‌رغم شکل فیزیکی که دارند، اجرای ترتیبی برنامه‌های ذخیره شده را موجب می‌شود. بحث در این مقوله نتیجه پیروی از قانون رایج نیومن را به همراه خواهد داشت. برنامه توسط یک سری از اعداد که در بخشی از حافظه ذخیره شده‌اند نمایش داده می‌شود. چهار مرحله که تقریباً تمامی ریزپردازنده‌هایی که از [ قانون فون نیومن] در ساختارشان استفاده می‌کنند از آن پیروی می‌کنند عبارت‌اند از: فراخوانی، رمزگشایی، اجرا، بازگشت برای نوشتن مجدد.

طراحی و اجرا[ویرایش]

مفهوم اساسی یک سی پی یو به صورت زیر است: در طراحی یک سی پی یو یک لیست از عملیات بنام مجموعهٔ دستوری بصورت ذاتی وجود دارد که سی پی یو آن‌ها را انجام می‌دهد. چنین عملیاتی ممکن است شامل جمع کردن یا تفریق کردن دو عدد، مقایسهٔ اعداد یا پرش به بخشی دیگر از یک برنامه باشد. هرکدام از این عملیات پایه‌ای توسط توالی خاصی از بیت‌ها نمایش داده می‌شود که این توالی برای چنین عملیات خاصی اپکد نام دارد. فرستادن یک اپکد خاص به یک سی پی یو باعث می‌شود تا سی پی یو عملی را که توسط اپکد مذکور نمایش داده می‌شود انجام دهد. برای اجرای یک دستور در یک برنامهٔ کامپیوتری، سی پی یو از اپکد دستور مذکور و نیز نشانوندهای آن (برای مثال، در مورد یک عمل جمع، دو عددی که قرار است با همجمع شوند.) استفاده می‌کند. عمل ریاضی واقعی برای هر دستور توسط یک زیرواحد از سی پی یو به نام واحد محاسبه و منطق (ALU)انجام می‌گیرد. یک سی پی یو علاوه بر اینکه از ALU خودش برای انجام اعمال استفاده می‌کند، اعمال دیگری نظیر: خواندن دستور بعدی از حافظه، خواندن اطلاعات مشخص شده بصورت نشانوند از حافظه و نوشتن یافته‌های حاصل در حافظه را نیز به عهده دارد. در بسیاری از طراحی‌های سی پی یو، یک مجموعهٔ دستوری مشخصا بین اعمالی که اطلاعات را از حافظه بارگیری می‌کنند و اعمال ریاضی افتراق می‌دهد. در این مورد اطلاعات بارگیری شده از حافظه در رجیسترها ذخیره می‌شود و یک عمل ریاضیاتی هیچ گونه نشانوندی نمی‌گیرد بلکه بسادگی عمل محاسباتی مذکور را روی اطلاعات موجود در رجیسترها انجام داده و آن را در یک رجیستر جدید می‌نویسد.

دامنه صحیح[ویرایش]

روشی که یک پردازنده از طریق آن اعداد را نمایش می‌دهد یک روش انتخابی در طراحی است که البته در بسیاری از راه‌های اصولی اثر گذار است. در برخی از کامپیوترهای دیجیتالی اخیر از یک مدل الکترونیکی بر پایه سیستم شمارش دسیمال (مبنای ده) برای نمایش اعداد استفاده شده‌است. برخی دیگر از کامپیوترها از یک سیستم نامتعارف شمارشی مانند سیستم سه تایی (مبنای سه) استفاده می‌کنند. در حال حاضر تمامی پردازنده‌های پیشرفته اعداد را به صورت دودویی (مبنای دو) نمایش می‌دهند که در آن هر عدد به وسیله چندین کمیت فیزیکی دو ارزشی مانند ولتاژ بالا و پایین نمایش داده می‌شوند.

علت نمایش دهی از طریق اعداد حجم کم و دقت بالا در اعدادی است که پردازشگر می‌تواند نمایش دهد. در حالت دودویی پردازنده‌ها، یک بیت به یک مکان مشخص در پردازنده اطلاق می‌شود که پردازنده با آن به صورت مستقیم در ارتباط است. ارزش بیت (مکانهای شمارشی) یک پردازنده که برای نمایش اعداد بکار برده می‌شود «بزرگی کلمه»، «پهنای بیت»، «پهنای گذرگاه اطلاعات» و یا «رقم صحیح» نامیده می‌شود. که البته این اعداد گاهی در بین بخش‌های مختلف پردازنده‌های کاملاً یکسان نیز متفاوت است. برای مثال یک پردازنده ۸ بیتی به محدوده‌ای از اعداد دسترسی دارد که می‌تواند با هشت رقم دودویی (هر رقم دو مقدار می‌تواند داشته باشد) ۲ یا ۲۵۶ عدد گسسته نمایش داده شود. نتیجاتا مقدار صحیح اعداد باعث می‌شود که سخت‌افزار در محدوده‌ای از اعداد صحیح که قابل اجرا برای نرم‌افزار باشد محدود شود و بدین وسیله توسط پردازنده مورد بهره برداری قرار گیرد.

پالس ساعت[ویرایش]

اکثر پردازنده‌ها و در حقیقت اکثر دستگاه‌هایی که با منطق پالسی و تناوبی کار می‌کنند به صورت طبیعی باید سنکرون یا هم‌زمان باشند. این بدان معناست که آنها به منظور هم‌زمان سازی سیگنالها طراحی و ساخته شده‌اند. این سیگنالها به عنوان سیگنال ساعت (پالس ساعت) شناخته می‌شوند و معمولاً به صورت یک موج مربعی پریودیک (متناوب) می‌باشند. برای محاسبه بیشترین زمانی که سیگنال قادر به حرکت از قسمت‌های مختلف مداری پردازنده‌است، طراحان یک دوره تناوب مناسب برای پالس ساعت انتخاب می‌کنند. این دوره تناوب باید از مقدار زمانی که برای حرکت سیگنال یا انتشار سیگنال در بدترین شرایط ممکن صرف می‌شود بیشتر باشد. برای تنظیم دوره تناوب باید پردازنده‌ها باید مطابق حساسیت به لبه‌های پایین رونده یا بالا رونده حرکت سیگنال در بدترین شرایط تاخیر طراحی و ساخته شوند. در واقع این حالت هم از چشم انداز طراحی و هم از نظر میزان اجزای تشکیل دهنده یک مزیت ویژه در ساده سازی پردازنده‌ها محسوب می‌شود. اگرچه معایبی نیز دارد، از جمله اینکه پردازنده باید منتظر المانهای کندتر بماند، حتی اگر قسمت‌هایی از آن سریع عمل کنند. این محدودیت به مقدار زیادی توسط روشهای گوناگون افزایش قدرت موازی سازی (انجام کارها به صورت هم‌زمان) پردازنده‌ها قابل جبران است.پالش ساعت شامل یک لبه بالا روند و یک لبه پایین رونده است که این تغییر حالت با تغییر ولتاژ صورت میپذیرد.

موازی گرایی (پاراللیسم)[ویرایش]

توصیفی که از عملکرد پایه‌ای یک سی پی یو در بخش قبلی شد، ساده ترین فرمی است که یک سی پی یو می‌تواند داشته باشد. این نوع از سی پی یو که معمولاً آن را ساب اسکیلر می‌نامند، یک دستور را روی یک یا دو جزو اطلاعاتی، در یک زمان اجرا می‌کند. این فرایند موجب یک ناکارامدی ذاتی در سی پی یوهای ساب اسکیلر می‌شود. از آنجایی که فقط یک دستور در یک زمان اجرا می‌شود، کل سی پی یو باید منتظر بماند تا آن دستور کامل شود تا بتواند به دستور بعدی برود. در نتیجه سی پی یوهای ساب اسکیلر در موارد دستوری که بیش از یک پالس ساعت (چرخهٔ ساعتی) برای اجرا شدن کامل طول می‌کشند، معلق می‌ماند. حتی اضافه کردن یک واحد اجرایی دیگر بهبود زیادی روی عملکرد ندارد، و در این حالت به جای اینکه یک مسیر معلق باشد، دو مسیر معلق می‌ماند و تعداد ترانزیستورهای بلااستفاده افزایش می‌یابد. این طراحی، که در آن منابع اجرایی سی پی یو می‌تواند فقط یک دستور در یک زمان اجرا کند، قادر خواهد بود تا فقط احتمالاً به عملکردی در حد اسکیلر (یک دستور در یک clock) برسد. با این وجود عملکرد آن تقریباً همیشه ساب اسکیلر (کمتر از یک دستور در یک چرخه) است.

تلاش برای رسیدن به عملکردی در حد اسکیلر و یا بهتر از آن منجر به طیفی از روش‌های طراحی شد که باعث می‌شود تا سی پی یو کمتر بصورت خطی و بیشتر به صورت موازی عمل کند. در هنگام استفاده از ترم پاراللیسم برای سی پی یوها، دو اصطلاح بطور کلی برای طبقه بندی این تکنیک‌های طراحی استفاده می‌شود. پاراللیسم در سطح دستوری (ILP) که هدف آن افزایش سرعت اجرای دستورات در داخل یک سی پی یو است (یا به عبارتی افزایش استفاده از منابع اجرایی روی همان چیپ (on-die))، و پاراللیسم در سطح thread که هدف آن افزایش تعداد threadهایی است (بطور موثر برنامه‌های جداگانه) که یک سی پی یو می‌تواند بطور همزمان اجرا کند. هر روش با روش دیگر از نظر نحوهٔ اجرا و نیز تاثیر نسبی آنها در افزایش عملکرد سی پی یو برای یک برنامه متفاوت است.

پاراللیسم در سطح دستوری[ویرایش]

یکی از ساده ترین شیوه‌های مورد استفاده برای انجام افزایش پاراللیسم این است که اولین مراحل fetching و decoding دستوری را پیش از اینکه اجرای دستور قبلی تمام شود، شروع کنیم. این روش ساده ترین فرم یک تکنیک بنام instruction pipelining است و در تقریباً تمام سی پی یوهای عمومی جدید استفاده می‌شود. پایپ لاینینگ، با شکستن مسیر دستوری و تبدیل ان به مراحل جداگانه، باعث می‌شود تا در هر زمان بیش از یک دستور اجرا شود. این جدا کردن را می‌توان با خط مونتاژ مقایسه کرد که در آن یک دستور در هر مرحله کاملتر می‌شود تا اینکه کامل شود.

با این وجود pipelining ممکن است موقعیتی را بوجود آورد که در آن یافته‌های عمل قبلی برای کامل کردن عمل بعدی لازم است. این وضعیت را معمولاً آشفتگی ناشی از وابستگی می‌نامند. برای جلوگیری از این وضعیت، باید توجه بیشتری شود تا در صورت رخ دادن این شرایط بخشی از خط تولید دستوری را به تاخیر اندازیم. بطور طبیعی براورده کردن این شرایط نیازمند مدارهایی اضافه‌است، بنابراین پردازنده‌های pipelined پیچیده تر از انواع ساب اسکیلر هستند (البته نه خیلی چشمگیر). یک پردازندهٔ pipelined می‌تواند بسیار نزدیک به حد اسکیلر شود، در این شرایط تنها مانع موجود stallها (دستوری که بیش از یک چرخهٔ ساعتی در یک مرحله طول می‌کشد) هستند. ارتقاء بیشتر در مورد ایدهٔ instruction pipelining منجر به ایجاد روشی شده‌است که زمان خالی اجزای سی پی یو را حتی به میزان بیشتری کاهش می‌دهد. طراحی‌هایی که گفته می‌شود سوپراسکیلر هستند شامل یک خط ایجاد(pipeline) دستور طولانی و واحدهای اجرایی مشابه متعدد هستند. در یک خط ایجاد سوپرسکیلر دستورهای متعددی خوانده شده و به dispatcher (توزیع گر) می‌روند، توزیع گر تصمیم می‌گیرد که آیا دستورات مذکور می‌توانند بطور موازی (همزمان) اجرا شوند یا نه. در صورتی که پاسخ مثبت باشد، دستورات مذکور به واحدهای اجرایی موجود ارسال (dispatch) می‌شوند. این کار باعث می‌شود تا چندین دستور به طور همزمان اجرا شوند. به طور کلی هرقدر یک سی پی یوی سوپرسکیلر بتواند دستورات بیشتری را بطور همزمان به واحدهای اجرایی در حال انتظار ارسال (dispatch) کند، دستورات بیشتری در یک سیکل مشخص اجرا می‌شوند.

بیشترین دشواری در طراحی یک معماری سوپرسکیلر سی پی یو مربوط به ساخت یک dispatcher موثر است. دیسپچر باید قادر باشد تا به سرعت و بدون اشتباه مشخص کند که آیا دستورات می‌توانند بطور موازی اجرا شوند و آنها را به شیوه‌ای ارسال (dispatch) کند تا بیشترین واحدهای اجرایی ممکن را از بیکاری خارج کند. این امر نیازمند این است که خط ایجاد دستوری حداکثر اوقات ممکن پر باشد و معماری‌های سوپرسکیلر را نیازمند مقادیر چشمگیری از کش سی پی یو(cache) می‌کند. همچنین در این شرایط تکنیک‌های پیشگیری از خطری نظیر پیش بینی شاخه‌ای (branch prediction)، اجرای حدسی (speculative execution) و اجرای خارج از نوبت (out of order execution) برای حفظ سطوح بالای عملکرد ضروری هستند. با تلاش برای پیش بینی اینکه یک دستور شرطی کدام شاخه (یا مسیر) را انتخاب می‌کند، سی پی یو می‌تواند تعداد زمان‌هایی را که تمام خط تولید (pipeline) باید منتظر بماند تا یک دستور شرطی کامل شود به حداقل برساند. اجرای حدسی با اجرای بخش‌هایی از کد که ممکن است بعد از کامل شدن یک عمل شرطی نیاز نباشند، معمولاً موجب افزایش متوسط عملکرد می‌شود. اجرای خارج از نوبت ترتیبی را که دستورات اجرا می‌شوند تا حدی دوباره چینی می‌کند تا تاخیر ناشی از وابستگی اطلاعات را کاهش دهد. همچنین در موارد یک دستور -چند دیتا (Single Instructions Multiple Data) - زمانیکه اطلاعات زیادی از یک نوع باید پردازش شود، پردازنده‌های جدید می‌توانند بخش‌هایی از خط ایجاد مذکور را غیر فعال کنند، در این حالت زمانیکه یک دستور چند بار اجرا می‌شود، سی پی یو می‌تواند از فازهای fetch و decode صرفه نظر کند و بنابراین در موقعیت‌های خاصی (خصوصاً در موتورهای برنامه‌ای بسیار مونوتون نظیر نرم‌افزار ایجاد ویدیو و پردازش عکس) به میزان زیادی عملکرد افزایش می‌یابد.

در مواردی که فقط بخشی از سی پی یو سوپرسکیلر است، بخشی که سوپرسکیلر نیست دچار جبران عملکردی ناشی از وقفه‌های زمانبندی می‌شود. Intel P5 Pentium (اینتل پنتیوم ۵)دو تا واحد محاسبه و منطق (ALU) سوپرسکیلر داشت که می‌توانست یک دستور را به ازای یک clock بپذیرد اما FPUی آن نمی‌توانست یک دستور را به ازای یک clock بپذیرد. بنابراین P۵ سوپرسکیلر از نوع integer است اما از نوع floating point (ممیز شناور) نیست. جانشین اینتل برای معماری P۵، نوع P۶ بود که قابلیت‌های سوپرسکیلر را به ویژگی‌های floating point آن اضافه می‌کرد و بنابراین موجب افزایش چشمگیری در عملکرد دستوری floating point می‌شد.

هم طراحی pipeline ساده و هم طراحی سوپر سکیلر موجب می‌شوند تا یک پردازندهٔ منفرد با سرعتی بیش از یک دستور به ازای یک چرخه (IPC) دستورات را اجرا کند و بدین وسیله ILP ی سی پی یو را افزایش می‌دهند. بیشتر طراحی‌های جدید سی پی یو حداقل تا حدی سوپرسکیلر هستند و تقریباً تمام سی پی یوهای عمومی که در دههٔ اخیر طراحی شده‌اند سوپرسکیلر هستند. در سال‌های اخیر بخشی از تاکید در طراحی کامپیوترهای ILP بالا از حوزهٔ سخت افزاری سی پی یو خارج شده و در اینترفیس نرم‌افزاری، یا همان ISA متمرکز شده‌است. استراتژی کلمهٔ دستوری خیلی بلند (VLIW) موجب می‌شود تا بخشی از ILP بطور مستقیم توسط نرم‌افزار درگیر شود و بدین وسیله میزان کاری را که سی پی یو باید انجام دهد تا ILP را افزایش دهد (بوست کند) و پیچیدگی طراحی مذکور را کاهش دهد، کم می‌کند.

پاراللیسم در سطح thread[ویرایش]

رویکرد دیگر برای دستیابی به عملکرد، اجرای چندین برنامه یا thread به صورت موازی است. در تقسیم بندی Flynn این رویکرد چندین دستور روی چندین دیتا (MIMD) نام دارد.

یک تکنولوژی که برای این هدف استفاده شد، تکنولوژی چند پردازشی (MP) نام دارد. چاشنی ابتدایی این نوع تکنولوژی چند پردازشی قرینه(SMP) نام داردکه در آن تعداد محدودی از سی پی یوها یک نمای منسجم از سیستم حافظهٔ خودشان را به اشتراک می‌گذارند. در این طرح ریزی هر سی پی یو سخت افزاری اضافی برای حفظ یک نمای دائماً بروز شده از حافظه دارد. با اجتناب از نماهای کهنه و مانده از سی پی یو، سی پی یوهای مذکور می‌توانند روی یک برنامه همکاری کنند و برنامه‌ها می‌توانند از یک سی پی یو به دیگری مهاجرت کنند. طرح ریزی‌هایی نظیر دستیابی غیر همشکل به حافظه (NUMA) و پروتکل‌های وابستهٔ مبتنی بر دایرکتوری در دههٔ ۱۹۹۰ ارائه شدند. سیستم‌های SMP به تعداد کمی از سی پی یوها محدود می‌شوند در حالیکه سیستم‌های NUMA با هزاران پردازنده موجود هستند. در ابتدای امر، چند پردازشی با استفاده از چندین سی پی یو و صفحهٔ مجزا برای برقراری ارتباط بین پردازنده‌ها ساخته شد. هنگامیکه پردازنده‌ها و ارتباط‌های بین آنها تماماً روی یک تراشهٔ سیلیکون منفرد سوار شدند، تکنولوژی مذکور ریزپردازندهٔ چند هسته‌ای نام گرفت.

بعدها مشخص شد که finer-grain parallelism با یک برنامهٔ منفرد ایجاد شد. یک برنامهٔ منفرد ممکن است چندین thread (یا عملکرد) داشته باشد که می‌توانند بطور جداگانه یا موازی اجرا شوند. برخی از نمونه‌های ابتدایی این تکنولوژی، پردازش ورودی/خروجی نظیر دسترسی مستقیم به حافظه را بعنوان یک thread جداگانه از thread محاسبه بکار گرفتند. یک رویکرد عمومی تر به این تکنولوژی در دههٔ ۱۹۷۰ ارائه شد. در آن زمان سیستم‌ها طوری طراحی شدند تا چندین thread محاسبه‌ای را بطور موازی اجرا کنند. این تکنولوژی (MT)multithreading نام دارد. این رویکرد در مقایسه با چند پردازشی به صرفه تر است زیرا فقط تعداد کمی از اجزا در داخل یک سی پی یو به منظور پشتیبانی از MT تکرار می‌شوند در حالیکه در MP تمام سی پی یو تکرار می‌شود. در MT، واحدهای اجرایی و سیستم حافظه من‌جمله کش‌ها در بین جندین thread به اشتراک گذارده می‌شوند. عیب MT این است که سخت افزاری که از مولتی ثردینگ پشتیبانی می‌کند در مقایسه با سخت افزاری که از MP پشتیبانی می‌کند برای نرم‌افزار قابل دیدن تر است و بنابراین نرم‌افزارهای ناظر نظیر سیستم‌های عامل برای پشتیبانی از MT باید متحمل تغییرات بیشتری شوند. یک نوع از MT که بکار گرفته شد block multithreading نام دارد که در آن اجرای یک thread آغاز می‌شود و زمانیکه برای بازگشت اطلاعات از حافظهٔ خارجی باید منتظر بماند، دچار توقف عملکرد می‌شود. در این حالت سی پی یو بلافاصله به thread دیگر که آمادهٔ اجرا است سوویچ می‌کند. این سوویچ معمولاً در یک چرخهٔ کلاک از سی پی یو انجام می‌گیرد.اولترااسپارک (UltraSPARC) نمونه‌ای از این تکنولوژی است. نوع دیگری از MT مولتی ثردینگ همزمان (simultaneous multithreading) نام دارد که در آن دستورات چندین thread بطور موازی در طی یک چرخهٔ کلاک از سی پی یو اجرا می‌شوند.

بمدت چندین دهه از ۱۹۷۰ تا ۲۰۰۰، در طراحی سی پی یوهای عمومی دارای عملکرد بالا به میزان زیادی روی دستیابی به ILP بالا از طریق تکنولوژی‌هایی مثل piplining، کش‌ها، اجرای سوپراسکیلر، اجرای خارج از نوبت و... تاکید می‌شد. این رویه منجر به طراحی سی پی یوهای بزرگ و پر مصرفی نظیر اینتل پنتیوم ۴ شد. در دههٔ ۲۰۰۰، نابرابری روزافزون بین فرکانس‌های عامل سی پی یو و فرکانس‌های عامل حافظهٔ اصلی و نیز جدی تر شدن مسالهٔ محو تدریجی پاور سی پی یو (power) بعلت تکنیک‌های ILP خیلی نامعمول تر موجب شد تا طراحان سی پی یو دیگر بدنبال افزایش عملکرد با استفاده از تکنیک‌های ILP نباشند. پس از آن، طراحان سی پی یو ایده‌هایی را از بازارهای کامپیوتری تجاری نظیر پردازش دادوستدی که در آن مجموع عملکرد چندین برنامه (پردازش مربوط به کار انجام شده در یک بازهٔ زمانی) مهمتر از عملکرد یک thread یا برنامه‌است، به عاریه گرفتند. این تغییر رویکرد می‌توان در تکثیر طراحی‌های CMP چند هسته‌ای (چند پردازشی در سطح تراشه) و بطور قابل ذکر طراحی‌های جدیدتر اینتل که مشابه معماری کمتر سوپرسکیلر بودند، مشاهده کرد. طراحی‌های بعدی در چندین خانوادهٔ پردازنده، CMP را نشان دادند، از جمله x۸۶-۶۴ Opteron و Athlon 64 X۲، SPARC UltraSPARC T۱، IBM POWER۴ و POWER۵ و چندین سی پی یو ی کنسول بازی ویدیویی مشابه طراحی powerpc سه هسته‌ای ایکس باکس ۳۶۰ و ریزپردازنده‌های سلولی ۷ هسته‌ای ۷-core)) پلی استیشن ۳.

موازی گرایی (پاراللیسم) اطلاعات[ویرایش]

یک الگوی غیر معمول اما بطور فزاینده‌ای مهم از سی پی یوها (و در حقیقت، بطور کلی پردازش) مربوط به موازی گرایی اطلاعات است. پردازنده‌هایی که قبلاً بحث شدند، تماماً انواعی از ابزارهای اسکیلر نامیده می‌شوند. همچنان که از نام آن پیداست، پردازنده‌های برداری (vector processors) با چندین قطعه از اطلاعات در زمینهٔ یک دستور سروکار دارند که با پردازنده‌های اسکیلر که با یک قطعه از اطلاعات برای هر دستور سروکار دارد، متفاوت است. در طبقه بندی Flynn، این دو نوع مواجه با اطلاعات بطور کلی و بترتیب SIMD (یک دستور برای چندین داده) و SISD (یک دستور برای یک داده) نامیده می‌شود. استفادهٔ مهم در ایجاد سی پی یوهایی که با بردارهایی از اطلاعات سرو کار دارند، در بهینه سازی اعمالی است که در آنها یک عمل (برای مثال یک جمع یا dot product)باید روی مجموعهٔ بزرگی از اطلاعات صورت گیرد. برخی از مثال‌های کلاسیک این نوع از اعمال کاربردهای مولتی مدیا (تصاویر، ویدئو و صدا) و نیز بسیاری از انواع اعمال علمی و مهندسی هستند. در حالیکه یک سی پی یو ی اسکیلر باید تمام فرایند fetching، دکودینگ و اجرا ی هر دستور و مقدار را برای مجموعه‌ای از اطلاعات انجام دهد، یک سی پی یو ی برداری می‌تواند یک عمل را روی مجموعهٔ نسبتاً بزرگی از اطلاعات با یک دستور انجام دهد. البته این امر تنها زمانی امکان پذیر است که کاربر مذکور نیازمند مراحل بسیاری است که یک عمل را روی مجموعهٔ بزرگی از داده‌ها اجرا می‌کند.

اکثر سی پی یوهای وکتور ابتدایی، نظیر Cray-۱ فقط مربوط به تحقیقات علمی و کاربردهای کریپتوگرافی بودند. با این وجود، هنگامیکه مولتی مدیاها به میزان زیادی به مدیای دیجیتال تغییر پیدا کردند، نیاز به برخی از اشکال SIMD در سی پی یوهای کاربرد-عمومی نیز برجسته شد. مدت کوتاهی بعد ازاینکه لحاظ شدن واحدهای اجرایی نقطهٔ شناور در سی پی یوهای کاربرد-عمومی شروع به معمول شدن کرد، اختصاصی شدن و بکارگیری واحدهای اجرایی SIMD نیز در سی پی یوهای کاربرد-عمومی شروع به ظهور کرد. برخی از این اختصاصیت‌های SIMD ابتدایی نظیر Multimedia Acceleration eXtensions مربوط به HP و MMX اینتل فقط اینتگر بودند.

منابع[ویرایش]

Wikipedia contributors, «Central processing unit,» Wikipedia, The Free Encyclopedia, http://en.wikipedia.org/w/index.php?title=Central_processing_unit&oldid=188161470 (accessed February ۱, ۲۰۰۸).

جستجو در ویکی‌انبار در ویکی‌انبار پرونده‌هایی دربارهٔ واحد پردازش مرکزی موجود است.