موضوع مقاله: واحد پردازش مرکزی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # واحد پردازش مرکزی | مقدمه: شکل، طراحی و پیاده‌سازی CPUها در طول زمان تغییر کرده‌است، اما عملیات پایه‌ای آن‌ها تقریباً بدون تغییر باقی مانده‌است. | ## بخش 1: واحد پردازش مرکزی | اجزای اصلی یک CPU عبارت‌اند از: واحد منطق و محاسبه (Arithmetic logic unit) که عملیات حسابی و منطقی را انجام می‌دهد، رجیسترهای (ثبات‌های) پردازنده که برای ALU عملوند فراهم می‌کنند و نتایج عملیات را ذخیره می‌کنند، و یک واحد کنترل که عمل واکشی دستورالعمل‌ها از حافظه و اجرای آن‌ها را با هدایت کردن عملیات هماهنگ ALU، رجیسترها و سایر اجزا سازماندهی می‌کند. تراشه‌های ریزپردازنده‌ها که دارای چندین CPU هستند، پردازنده‌های چندهسته‌ای نام دارند. کامپیوترهای ابتدایی همچون انیاک، برای انجام کارهای مختلف باید سیم‌کشی مجدد می‌شدند، از این جهت به آن‌ها «کامپیوترهای برنامه-ثابت» می‌گفتند. از آنجایی که اصطلاح CPU به‌طور کلی، به ابزاری برای اجرای نرم‌افزار (برنامهٔ کامپیوتر) گفته می‌شود، ابتدایی‌ترین ابزارهایی که به درستی CPU نام گرفتند، در واقع با ابداع رایانه‌های با قابلیت ذخیرهٔ برنامه به وجود آمدند. ایدهٔ یک کامپیوتر ذخیره کنندهٔ برنامه، قبل از این در طراحی سیستم انیاک آقای جان پرسپر اکرت و جان ماکلی وجود داشت، اما در ابتدا حذف شد تا پروژه زودتر تمام شود. در ۳۰ ژوئن ۱۹۴۵ و قبل از ساخت انیاک، ریاضیدانی به نام جان فون نویمان مقاله‌ای را با عنوان "اولین پیش‌نویس یک گزارش در رابطه با ادواک (EDVAC)" منتشر کرد، که توصیفی کلی از یک کامپیوتر ذخیره‌کنندهٔ برنامه بود که سرانجام، در اوت ۱۹۴۹ کامل شد. کامپیوتر ادواک طوری طراحی شد تا تعداد خاصی از دستورالعمل‌ها (یا عملیات) مختلف را اجرا کند. با تفاوت چشمگیر، برنامه‌های نوشته شده برای EDVAC قابل ذخیره‌سازی در حافظهٔ سریع کامپیوتر بود و نه به شکل سیم‌کشی فیزیکی در کامپیوتر. این نوآوری موجب برطرف شدن برخی محدودیت‌های شدید انیاک شد، که عبارت بودند از: مدت زمان و تلاش زیاد برای پیکربندی مجدد کامپیوتر برای انجام یک کار جدید. با استفاده از طراحی جان فون نویمان، برنامه‌ای که کامپیوتر EDVAC می‌توانست اجرا کند، به سادگی با تغییر دادن محتویات حافظه قابل تغییر بود. منچستر بیبی یک کامپیوتر کوچک تحقیقاتی با قابلیت ذخیره‌سازی برنامه بود که اولین برنامه را در ۲۱ ژوئن ۱۹۴۸ اجرا کرد و کامپیوتر Manchester Mark 1 اولین برنامهٔ خود را در شب ۱۶ یا ۱۷ ژوئن ۱۹۴۵ اجرا کرد. اولین CPUها دارای طراحی سلیقه‌ای بودند و به‌عنوان بخشی از یک کامپیوتر بزرگ‌تر و گاهی خاص استفاده می‌شدند. با این حال، این روش سلیقه‌ای طراحی CPUها برای کاربری خاص، به‌طور چشمگیری راه را برای تولید پردازنده‌هایی با کاربرد چندگانه و به صورت انبوه هموار کرد. هم کوچک‌سازی و هم استانداردسازی CPUها، موجب افزایش و فراگیری ابزارهای دیجیتال در زندگی مدرن شد، که بسیار بیشتر از کاربرد محدود آن‌ها در ماشین‌های محاسباتی اختصاصی بود. ریزپردازنده‌های جدید در ابزارهای الکترونیک، از خودروها گرفته تا گوشی‌های همراه و حتی گاهی در اسباب‌بازی‌ها وجود دارند. جان وان نویمان، به دلیل طراحی کامپیوتر ذخیره کنندهٔ برنامه شناخته شده‌است، که به خاطر تلاش وی برای ساخت EDVAC است. با این وجود، افرادی قبل از او، نظیر کنراد تسوزه ایده‌های مشابهی را پیشنهاد و پیاده‌سازی کردند. تفاوت کلیدی بین معماری‌های جان فون نویمان و هاروارد این است که در معماری هاروارد، ذخیره‌سازی و استفاده از دستورالعمل‌های CPU از داده‌ها جدا شده‌است، درحالی‌که در معماری جان فون نویمان از حافظهٔ یکسانی برای ذخیرهٔ داده‌ها و دستورالعمل‌ها استفاده می‌شود. اما معماری هاروارد نیز وجود دارد، خصوصاً در کاربردهای نهفته، برای مثال، میکروکنترلرهای ای وی آر Atmel، در واقع پردازنده‌های مبتنی بر معماری هاروارد هستند. رله‌ها و لامپ‌های خلاء یا همان لوله‌های ترمیونیک به‌طور شایعی به عنوان عناصر سوئیچ استفاده می‌شدند. درنهایت، CPUهای مبتنی بر لامپ‌های خلاء غلبه پیدا کردند، زیرا مزایای سرعت چشمگیر بیشتر از مشکل قابل اعتماد بودن است. بیشتر این CPUهای همگام، در مقایسه با طراحی‌های میکروالکترونیک جدید دارای سرعت‌های ساعتی پایین بودند. در آن زمان، فرکانس‌های سیگنال ساعت به‌طور شایع در محدودهٔ ۱۰۰ کیلو هرتز تا ۴ مگاهرتز بود که این سرعت، به میزان زیادی به دلیل سرعت ابزارهای سوئیچ مورد استفاده در داخل آن‌ها، محدود می‌شد. پیچیدگی طراحی پردازنده‌ها، همزمان با آسان شدن ساخت ابزارهای الکترونیک کوچک‌تر و قابل اعتمادتر در نتیجهٔ افزایش تکنولوژی‌های مختلف، افزایش یافت. در طی دهه‌های ۱۹۵۰ و ۱۹۶۰، دیگر لازم نبود که برای ساخت پردازنده‌های ترانزیستوری از عناصر سوئیچ حجیم، نامطمئن، و شکننده همچون لامپ‌های خلاء و رله‌ها استفاده کرد. با این پیشرفت‌ها، پردازنده‌های پیچیده‌تر و قابل اطمینان‌تر، بر روی یک یا چندین برد مدار چاپی که حاوی اجزاء گسسته (منفرد) بودند، پیاده‌سازی شدند. در سال ۱۹۶۴، شرکت آی‌بی‌ام، یک معماری رایانه به نام آی‌بی‌ام سیستم ۳۶۰ IBM System/360 ارائه کرد، که در مجموعه‌ای از کامپیوترهایی استفاده شد که قادر بودند برنامه‌های مشابهی را، با سرعت‌ها و کارایی متفاوت اجرا کنند. این نوآوری در آن زمان اهمیت چشمگیری داشت، زیرا بیشتر کامپیوترهای الکترونیک، حتی آن‌هایی که توسط یک شرکت ساخته می‌شدند، با یکدیگر ناسازگار بودند. شرکت آی‌بی‌ام برای ارتقاء این نوآوری، از مفهوم یک ریزبرنامه (یا همان ریزکد) استفاده کرد که هنوز کاربرد گسترده‌ای در پردازنده‌های جدید دارد. معماری System/360، آن‌قدر محبوب شد که برای دهه‌ها بازار رایانه‌های بزرگ را به دست گرفت و هنوز هم توسط کامپیوترهای جدید مشابهی نظیر آی‌بی‌ام سری زد ادامه پیدا کرده‌است. در سال ۱۹۶۵، شرکت تجهیزات دیجیتال ایکویپ‌منت کورپوریشن، یک کامپیوتر تأثیرگذار دیگر را با هدف فروش علمی و تحقیقاتی ارائه کرد، که PDP-8 نام داشت. کامپیوترهای ترانزیستوری مزایای منحصر به فرد متعددی در مقایسه با کامپیوترهای پیشین داشتند. ترانزیستورها علاوه بر افزایش دادن قابلیت اعتماد و کاهش مصرف انرژی، همچنین به پردازنده‌ها این امکان را دادند تا با سرعت‌های بسیار بالاتر کار کنند، زیرا زمان سوئیچ یک ترانزیستور، در مقایسه با یک لامپ خلأ یا رله کوتاه‌تر است. به واسطهٔ افزایش قابلیت اطمینان و سرعت عناصر سوئیچ (که در حال حاضر تقریباً تماماً ترانزیستور هستند)، سرعت ساعت پردازنده‌ها در این زمان، به سادگی، به ده‌ها مگاهرتز رسید. علاوه بر این، درحالی‌که ترانزیستورهای گسسته و پردازنده‌های مدار مجتمع استفادهٔ بسیار زیادی داشتند، طراحی‌هایی جدید با کارایی بالا، همچون پردازنده‌های برداری اس‌ام‌دی (تک دستورالعمل، چندین داده) شروع به ظهور کردند. این طراحی‌های تحقیقاتی ابتدایی، بعدها باعث ظهور دورهٔ ابررایانه‌های اختصاصی، نظیر ابررایانه‌های ساخته شده توسط شرکت کری و فوجیتسو شد. CPUهای مجتمع کوچک-مقیاس در این دوره، روشی برای تولید تعداد زیادی ترانزیستور بهم متصل در یک فضای فشرده ابداع شد. مدار مجتمع این امکان را فراهم کرد تا تعداد زیادی ترانزیستور را بتوان بر روی یک دای نیمه‌رسانا یا همان chip تولید کرد. در ابتدا فقط مدارهای دیجیتال غیر اختصاصی بسیار پایه‌ای همچون گیت‌های NOR در داخل آی‌سی‌ها کوچک‌سازی شدند. آی‌سی‌های SSI، نظیر آی‌سی‌هایی که در کامپیوتر هدایت کننده آپولو استفاده شدند، معمولاً حاوی حداکثر ده‌ها ترانزیستور بودند. برای ساخت یک پردازندهٔ کامل با استفاده از آی‌سی‌های SSI نیاز به هزاران چیپ بود، با این حال، این‌ها در مقایسه با طراحی‌های ترانزیستوری گسستهٔ پیشین، مصرف انرژی و فضای بسیار کمتری داشتند. ماسفت با داشتن مقیاس پذیری بالا و مصرف انرژی بسیار کمتر و تراکم بالاتر در مقایسه با ترانزیستورهای پیوند دوقطبی، امکان تولید مدارهای مجتمع با تراکم بالا را فراهم کرد. آقای Lee Boysel مقالات تأثیرگذاری را، از جمله یک «بیانیه» در سال ۱۹۶۷، که در آن توضیح می‌داد چگونه یک کامپیوتر بزرگ ۳۲ بیتی را با استفاده از تعداد نسبتاً کمی از مدارهای مجتمع مقیاس بزرگ بسازیم، منتشر کرد. در دههٔ ۱۹۶۰، آی سی‌های ماس کندتر بودند و در ابتدا، فقط در مواردی که مصرف انرژی کمتربود، مفید بودند..T. با پیشرفت تکنولوژی میکرو الکترونیک، ترانزیستورهای بیشتری در داخل آی سی‌ها قرار داده شدند، که باعث کاهش تعداد آی سی‌های مورد نیاز برای یک پردازنده شد. در سال ۱۹۶۸، تعداد آی سی‌های مورد نیاز برای ساخت یک پردازنده کامل، به تعداد ۲۴ آی سی از ۸ نوع کاهش پیدا کرد، که هر کدام حاوی تقریباً هزار ماسفت بودند.R. از زمان ارائهٔ اولین ریزپردازندهٔ تجاری، یعنی اینتل ۴۰۰۴ در سال ۱۹۷۱، و اولین ریزپردازنده ای که به‌طور گسترده مورد استفاده قرار گرفت، یعنی اینتل ۸۰۸۰ در سال ۱۹۷۴، این کلاس از پردازنده‌ها، تقریباً به‌طور کامل، تمام روش‌های دیگر پیاده‌سازی پردازنده را از رده خارج کردند. تولیدکننده‌های رایانه‌های بزرگ و مینی کامپیوترها در آن زمان، برنامه‌های تولید آی سی مالکیتی را آغاز کردند، تا معماری‌های کامپیوتری قدیمی خود را ارتقا دهند و سرانجام، ریز پردازنده‌هایی ابداع کردند که با مجموعهٔ دستورالعمل و همچنین با سخت‌افزار و نرم‌افزار قدیمی آن‌ها نیز سازگاری داشتند. با در نظر گرفتن پیشرفت و موفقیت همه‌گیر کامپیوترهای شخصی، در حال حاضر، اصطلاح CPU تقریباً به‌طور کامل به ریزپردازنده‌ها گفته می‌شود. این در حالی است که، ریز پردازنده‌ها، درواقع، پردازنده‌هایی هستند که با استفاده از تعداد بسیار کمی از آی سی‌ها (معمولاً فقط یکی) تولید می‌شوند. در نتیجهٔ پیاده‌سازی روی یک دای، اندازهٔ کلی پردازنده‌ها کوچک‌تر شد که منجر به افزایش سرعت سوئیچ شد، که دلیل آن، فاکتورهای فیزیکی نظیر کاهش ظرفیت خازنی پارازیتی بود. این امر باعث شده‌است تا ریزپردازنده‌های همگام، دارای سرعت‌های ساعتی با محدودهٔ ده‌ها مگاهرتز تا چندین گیگاهرتز باشند. علاوه بر این، قابلیت ساخت ترانزیستورهای بسیار کوچک در یک آی سی، باعث افزایش پیچیدگی و تعداد ترانزیستورها در یک پردازشگر، به میزان چندین برابر، شد. این رویه ای که به‌طور گسترده مشاهده می‌شود، تحت قانون مور توصیف می‌شود، که ثابت شده‌است، پیش‌بینی کننده ای نسبتاً دقیق برای رشد پیچیدگی پردازنده (و سایر آی سی‌ها) تا سال ۲۰۱۶ بود. اگرچه پیچیدگی، اندازه، ساختار، و فرم کلی پردازنده‌ها از سال ۱۹۵۰ بسیار تغییر کرده‌است، اما طراحی و عملکرد اساسی آن‌ها زیاد تغییر نکرده‌است. تقریباً تمام پردازنده‌های مرسوم امروزی را می‌توان به شکل بسیار دقیقی، به فرم ماشین‌های ذخیره کننده برنامه ای فون نویمان، توصیف کرد. از آنجایی که قانون مور دیگر صدق نمی‌کند، نگرانی‌هایی پیرامون محدودیت‌های تکنولوژی ترانزیستوری مدار مجتمع به‌وجود آمده‌است. این نگرانی‌های جدیدتر، از جمله فاکتورهایی هستند که موجب شده‌اند تا محققان به دنبال روش‌های جدید محاسبه، نظیر کامپیوتر کوانتومی و همچنین توسعهٔ استفاده از موازی سازی و سایر روش‌هایی که مزایای مدل کلاسیک فون نویمان را افزایش می‌دهند، باشند. افزایش تعداد هسته‌های پردازنده، همیشه دلیل بر افزایش سرعت پردازش هسته نمی‌باشد چراکه هنوز هم چیپ‌هایی هستند که تعداد هستهٔ بالایی دارند ولی از روش عملکرد پردازش موازی استفاده نمی‌کنند. واحد اندازه‌گیری فرکانس پردازنده، گیگاهرتز است که با علامت GHz نشان داده می‌شود. تقریباً تمام پردازنده‌ها در طی عملکرد خود، از سه مرحلهٔ واکشی، کد گشایی، و اجرا که در مجموع چرخهٔ دستورالعمل نامیده می‌شود، تبعیت می‌کنند. بعد از اجرای یک دستورالعمل، کل فرایند تکرار می‌شود و چرخهٔ بعدی دستورالعمل، به‌طور معمول، دستورالعمل بعدی را، در نتیجهٔ افزایش مقدار شمارنده برنامه، واکشی می‌کند. اگر یک دستورالعمل پرش اجرا شود، مقدار شمارندهٔ برنامه طوری تغییر می‌کند که آدرس دستورالعملی که به آن پرش انجام شده‌است، در آن ذخیره شود و اجرای برنامه به‌طور نرمال ادامه پیدا می‌کند. در پردازنده‌های پیچیده‌تر می‌توان چندین دستورالعمل را به‌طور همزمان واکشی، رمزگشایی، و اجرا کرد. در این قسمت، آنچه که توصیف می‌شود، به‌طور کلی خط تولید RISC کلاسیک نام دارد که استفادهٔ زیادی در پردازنده‌های ساده در بسیاری از ابزارهای الکترونیک دارد (که معمولاً با نام میکروکنترلر شناخته می‌شوند) و به میزان زیادی نقش مهم حافظه نهان پردازنده را و همچنین مرحله واکشی خط تولید را نادیده می‌گیرد. برخی دستورالعمل‌ها به جای اینکه دادهٔ حاصل را به‌طور مستقیم تولید کنند، شمارنده برنامه را دستکاری می‌کنند. چنین دستورالعمل‌هایی به‌طور کلی، پرش نام دارند و موجب تسهیل اجرای رفتارهایی از برنامه، از جمله: حلقه‌ها، اجرای شرطی برنامه (از طریق استفاده از یک پرش شرطی) و همچنین موجودیت توابع را تسهیل می‌کنند. در برخی پردازنده‌ها، برخی دستورالعمل‌ها قادرند تا وضعیت بیت‌ها را در یک رجیستر فلگ تغییر دهند. این فلگ‌ها را می‌توان برای تأثیرگذاری روی رفتار یک برنامه استفاده کرد، زیرا معمولاً نشان دهنده نتایج عملیات مختلف هستند. برای مثال، در چنین پردازنده‌هایی یک دستورالعمل «مقایسه»، دو مقدار را ارزیابی می‌کند و بیت‌های موجود در رجیستر فلگ را ست می‌کند یا پاک می‌کند، که نشان می‌دهد کدام یک بزرگتر است و اینکه آیا آنها برابرند یا خیر. یکی از این فلگ‌ها را مجدداً می‌توان توسط یک دستورالعمل پرش، برای تعیین جریان برنامه استفاده کرد. واکشی اولین مرحله واکشی (Fetch) نام دارد که در واقع وظیفهٔ استخراج یک دستورالعمل (که توسط تعدادی یا صفی از اعداد نشان داده می‌شود) را از حافظه برنامه بر عهده دارد. مکان دستورالعمل (آدرس) در حافظهٔ برنامه، توسط شمارنده برنامه (Program Counter یا PC، که در ریزپردازنده‌های x86 اینتل به آن «اشاره‌گر دستورالعمل» نیز گفته می‌شود) تعیین می‌شود، که عددی را ذخیره می‌کند که نشانگر آدرس دستورالعمل بعدی برای واکشی است. بعد از اینکه دستورالعمل واکشی شد، مقدار شمارندهٔ برنامه به میزان اندازهٔ دستورالعمل افزایش می‌یابد، تا آدرس دستورالعمل بعدی در توالی مورد نظر، در آن قرار گیرد. معمولاً دستورالعملی که قرار است واکشی شود، باید از یک حافظهٔ نسبتاً کند واکشی شود، که باعث می‌شود تا پردازنده منتظر بماند تا دستورالعمل برگردد. این مشکل به میزان زیادی در پردازنده‌های جدید، با استفاده از حافظه‌های نهان و معماری‌های خط تولید، کمتر شده‌است. رمزگشایی دستورالعملی که توسط پردازنده از حافظه واکشی می‌شود، در واقع مشخص می‌کند که پردازنده قرار است چه کاری انجام دهد. در مرحلهٔ رمزگشایی (decoding) که توسط یک مدار با نام رمزگشاء دستورالعمل انجام می‌شود، دستورالعمل مورد نظر به سیگنال‌هایی تبدیل می‌شود که قسمت‌های دیگر پردازنده را کنترل می‌کنند. شیوهٔ تفسیر دستورالعمل، توسط معماری مجموعه دستورالعمل (ISA) پردازنده تعریف می‌شود. معمولاً، گروهی از بیت‌ها (با نام، یک فضا) در داخل دستورالعمل، که آپ کد نام دارد، مشخص می‌کند که چه عملیاتی باید انجام شود و معمولاً، فضای باقی مانده، اطلاعات تکمیلی مورد نیاز برای عملیات مذکور، مثلاً عملوندها را فراهم می‌آورد. این عملوندها ممکن است به شکل یک مقدار ثابت (مقدار فوری) باشند، یا به شکل مکان یک مقدار باشند که ممکن است، این مکان یک رجیستر پردازنده یا یک آدرس حافظه باشد. در برخی طراحی‌های پردازنده، رمزگشاء دستورالعمل به شکل یک مدار سخت‌افزاری شش میخه و غیرقابل تغییر پیاده‌سازی می‌شود، درحالی‌که در پردازنده‌های دیگر، برای ترجمهٔ دستورالعمل‌ها به مجموعه‌هایی از سیگنال‌های پیکربندی پردازنده، از یک ریز برنامه استفاده می‌شود. در برخی موارد، حافظه ای که برنامه را ذخیره می‌کند، قابل نوشتن مجدد است، که در نتیجه می‌توان روش رمزگشایی دستورالعمل‌ها توسط پردازنده را تغییر داد. در طی هر عمل، قسمت‌های مختلف پردازنده به صورت الکتریکی به گونه‌ای متصل می‌شوند تا بتوانند تمام یا بخشی از عملیات مورد نظر را انجام دهند و سپس عمل، به‌طور معمول، در پاسخ به یک پالس ساعت کامل می‌شود. در بسیاری مواقع، نتایج حاصل، در داخل یک رجیستر داخلی پردازنده نوشته می‌شوند تا توسط دستورالعمل‌های بعدی به سرعت قابل دسترسی باشند. در سایر موارد، نتایج ممکن است در حافظه اصلی نوشته شوند که کندتر است اما ارزان‌تر و دارای ظرفیت بالاتر است. هنگامی که یک پالس ساعت رخ می‌دهد، این حاصل جمع، به محل ذخیره منتقل می‌شود و اگر حاصل جمع خیلی بزرگ باشد (یعنی بزرگتر از اندازه کلمهٔ خروجی ALU) باشد، آنگاه، یک فلگ سرریز محاسبه ای ست خواهد شد. | ## بخش 2: واحد پردازش مرکزی | خطوط مشکی نشان‌دهندهٔ جریان داده هستند، درحالی‌که خطوط قرمز نشان‌دهندهٔ جریان کنترل هستند. در داخل مدار پردازندهٔ اصلی، مجموعه‌ای از عملیات اساسی شش میخ (Hardwired) شده‌است که مجموعهٔ دستورالعمل نام دارد. چنین عملیاتی ممکن است شامل مثلاً: جمع کردن یا تفریق کردن دو عدد، مقایسهٔ دو عدد، یا پرش به بخش دیگری از یک برنامه باشد. هر عملیات اساسی توسط ترکیب خاصی از بیت‌ها با نام آپ کد زبان ماشین نمایش داده می‌شود. پردازندهٔ اصلی در زمان اجرای دستورالعمل‌ها در یک برنامه زبان ماشین، تصمیم می‌گیرد که چه عملیاتی را با کد گشایی آپ کد مورد نظر انجام دهد. یک دستورالعمل زبان ماشین کامل حاوی یک آپ کد، و در بسیاری موارد بیت‌های دیگری است که آرگومان‌های خاصی را برای عملیات مذکور مشخص می‌کنند (برای مثال اعدادی که باید با هم جمع شوند، در یک عملیات جمع). یک برنامهٔ زبان ماشین، مجموعه ای از دستورالعمل‌های زبان ماشین است که پردازنده اجرا می‌کند. عملیات ریاضی واقعی برای هر دستورالعمل، توسط یک مدار منطقی ترکیبی در داخل پردازنده CPU به نام واحد محاسبه و منطق یا همان ALU انجام می‌گیرد. به‌طور کلی، یک پردازنده برای انجام یک دستورالعمل مراحل زیر را انجام می‌دهد: ابتدا آن را از حافظه واکشی می‌کند، سپس برای انجام یک عملیات از ALU استفاده می‌کند، و در نهایت نتیجه را در حافظه ذخیره می‌کند. علاوه بر دستورالعمل‌های ریاضیاتی اعداد صحیح و عملیات منطقی، دستورالعمل‌های ماشین مختلف دیگری وجود دارد، نظیر: دستورالعمل‌های مربوط به بارگیری داده از حافظه و ذخیره‌سازی آن در حافظه، عملیات انشعاب و عملیات ریاضی روی اعداد ممیز شناور که توسط واحد ممیز شناور (FPU) در CPU انجام می‌شود. این واحد به حافظهٔ کامپیوتر، واحد محاسبه و منطق، و ابزارهای ورودی و خروجی می‌گوید که چگونه به دستورالعمل‌هایی که به پردازنده فرستاده شده‌اند، پاسخ دهند.این واحد با فراهم کردن سیگنال‌های زمانبندی و کنترل، عملیات سایر واحدها را هدایت می‌کند. در طراحی‌های کامپیوتری جدید، واحد کنترل معمولاً یک بخش داخلی از CPU است که نقش و عملیات کلی آن، از اول تغییری نکرده‌است. ورودی‌های ALU عبارتند از: کلمات داده که قرار است روی آن عملیات انجام شود (با نام عملوند)، اطلاعات وضعیتی از عملیات قبلی، و یک کد از واحد کنترل که نشان می‌دهد کدام عملیات باید انجام شود. بسته به دستورالعملی که اجرا می‌شود، عملوندهای مورد نیاز ممکن است از رجیسترهای داخلی پردازنده یا حافظه خارجی بیایند، یا این‌که ثابت‌هایی باشند که توسط خود ALU تولید می‌شوند.زمانی که تمام سیگنال‌ها برقرار می‌شوند و در سرتاسر مدار منتشر می‌شوند، نتیجهٔ عملیات انجام گرفته در خروجی‌های ALU ظاهر می‌شود. این نتایج شامل یک کلمهٔ داده می‌شود که ممکن است در یک رجیستر یا حافظه ذخیره شود و همچنین شامل اطلاعات وضعیتی می‌شود، که به‌طور معمول در یک رجیستر داخلی خاص CPU که برای این هدف منظور شده‌است، ذخیره می‌شود. با محول کردن وظیفه محاسبات آدرس به یک مدار جداگانه که به‌طور موازی با مابقی CPU کار می‌کند، می‌توان تعداد چرخه‌های مورد نیاز CPU برای اجرای دستورالعمل‌های مختلف ماشین را کاهش داد، و بدین طریق عملکرد را بهبود داد.پردازنده، در حالی که عملیات مختلفی را انجام می‌دهد، لازم است تا آدرس‌هایی را که برای واکشی داده از حافظه لازم هستند، محاسبه کند. برای مثال، باید قبل از این‌که CPU بتواند داده را از مکان‌های واقعی حافظه واکشی کند، مکان‌های داخل-حافظه‌ای عناصر آرایه محاسبه شوند. این محاسبات تولید آدرس عبارت‌اند از: عملیات محاسباتی مختلف برای اعداد صحیح نظیر، جمع کردن، تفریق کردن، عملیات باقیمانده (Modulo) و جابه‌جایی‌های بیت. معمولاً محاسبه کردن یک آدرس حافظه، نیاز به بیش از یک دستورالعمل عمومی ماشین دارد، که لزوماً به سرعت کدگشایی و اجرا نمی‌شود. با اضافه کردن یک AGU به طراحی یک پردازنده و همچنین با ارائهٔ دستورالعمل‌های اختصاصی که از AGU استفاده می‌کنند، می‌توان بار محاسبات مختلف تولید آدرس را از گردن مابقی CPU برداشت و این محاسبات معمولاً به سرعت در یک چرخهٔ CPU قابل اجرا هستند. قابلیت‌های یک AGU بستگی به یک CPU خاص و معماری آن دارد؛ بنابراین، برخی AGUها عملیات بیشتری را برای محاسبهٔ آدرس، پیاده‌سازی و نمایان می‌کنند، درحالی‌که برخی دیگر، علاوه بر این، دستورالعمل‌های اختصاصی پیشرفته ای را لحاظ می‌کنند که می‌توانند روی عملوندهای متعدد به صورت همزمان اجرا شوند. علاوه بر این، برخی معماری‌های CPU، دارای شیوه‌های متعددی هستند تا بتوانند بیش از یک عملیات محاسبه آدرس را، به صورت همزمان انجام دهند و به این طریق، با بهره‌گیری از ماهیت سوپراسکالر طراحی‌های پیشرفتهٔ CPU، کارایی را بالا ببرند. پردازنده‌های ساده‌تر، خصوصاً میکروکنترلرها، معمولاً فاقد واحد مدیریت حافظه هستند. حافظهٔ نهان (کش) حافظهٔ نهان (Cache) پردازنده، در واقع، نوعی حافظهٔ نهان سخت‌افزاری است که توسط واحد پردازش مرکزی یک کامپیوتر، برای کاهش میانگین هزینهٔ (زمان یا انرژی) دسترسی به داده موجود در حافظهٔ اصلی استفاده می‌شود. یک حافظهٔ نهان، در واقع یک حافظهٔ کوچک‌تر و سریع‌تر است که به هستهٔ یک پردازنده نزدیک‌تر است و کپی‌هایی از داده‌هایی از مکان‌های حافظه اصلی که مکرراً استفاده می‌شوند را ذخیره می‌کند. بیشتر CPUها، دارای کش‌های مستقل و متنوع، از جمله: کش‌های دستورالعمل و کش‌های داده هستند، که در آن، کش داده معمولاً به شکل یک سلسله مراتب از سطوح بیشتر کش سازماندهی می‌شود (L1, L2, L3, L4, ...).تمام پردازنده‌های جدید (سریع) (به استثناء موارد اختصاصی اندک)، دارای سطوح متعددی از کش‌های پردازنده هستند. اولین پردازنده‌ها که از کش استفاده کردند، فقط دارای یک سطح کش بودند که برخلاف کش‌های سطح یک جدید، به دو قسمت: L1d (برای داده) و L1i (برای دستورالعمل) تقسیم نمی‌شدند. تقریباً تمام پردازنده‌های جدید که دارای کش هستند، دارای یک کش دو قسمتی در سطح یک هستند و همچنین دارای کش سطح ۲ و در پردازنده‌های بزرگ‌تر، کش سطح سه نیز هستند. سطح دوم کش معمولاً تقسیم نمی‌شود و به شکل یک مخزن مشترک برای کش تقسیم شدهٔ سطح ۱ عمل می‌کند. هر هسته از یک پردازنده چند هسته ای، دارای کش اختصاصی سطح ۲ است، که معمولاً بین هسته‌ها به اشتراک گذاشته نمی‌شود. کش سطح ۴ در حال حاضر رایج نیست، و به‌طور کلی، از جنس حافظهٔ دسترسی تصادفی پویا(DRAM) در یک چیپ یا دای مجزا قرار دارد و به شکل حافظهٔ دسترسی تصادفی ایستا (SRAM) نیست. به‌طور تاریخی، این قضیه، در رابطه با سطح ۱ نیز صادق بود، این در حالی است که، چیپ‌های بزرگ‌تر، امکان ادغام آن و به‌طور کلی تمام سطوح کش را، به استثناء سطح آخر فراهم آورده‌اند. هر سطح اضافه‌ای از کش معمولاً بزرگ‌تر است و به شکل متفاوتی بهینه‌سازی می‌شود.پردازنده برای به‌دست آوردن داده، ابتدا حافظهٔ نهان را چک می‌کند و پس از نیافتن اطلاعات، به سراغ حافظه‌های دیگر از جمله RAM می‌رود. حافظهٔ نهان می‌تواند دارای چند سطح (Level) باشد که با حرف L در مشخصات پردازنده نوشته می‌شود. معمولاً پردازنده‌ها تا ۳ لایه حافظهٔ نهان دارند که لایهٔ اول (L1) نسبت به دوم (L2) و دوم نیز نسبت به سوم (L3) دارای سرعت بیشتر و حافظهٔ کمتری است. زمانی‌که پردازنده می‌خواهد داده‌ای را مورد پردازش قرار دهد ابتدا به نزدیک‌ترین حافظه سطح حافظهٔ نهان خود نگاه می‌کند تا در صورت موجود بودن آن دستورالعمل را پردازش کند. بدین ترتیب اگر داده‌ها در نزدیک‌ترین سطح حافظهٔ پنهان پردازنده یافت شد، مورد پردازش قرار می‌گیرد و اگر پیدا نشد به ترتیب به سطح‌های بعدی می‌رود و در نهایت اگر پیدا نشد به حافظهٔ اصلی رجوع می‌کند. کش سطح ۳ بین تمام هسته‌ها به اشتراک گذاشته می‌شود و به همین خاطر ظرفیت بیشتری دارد. سرعت ساعت بیشتر CPUها، مدارهای همگام هستند، به این معنی است که آنها از یک سیگنال ساعت برای هماهنگ‌کردن عملیات متوالی خود استفاده می‌کنند. سیگنال ساعت توسط یک مدار نوسانگر خارجی تولید می‌شود، که تعداد ثابتی از پالس‌ها را در هر ثانیه، به شکل یک موج مربعی متناوب تولید می‌کند. فرکانس پالس‌های ساعت مشخص می‌کند که CPU با چه سرعتی دستورالعمل‌ها را اجرا کند و در نتیجه، با افزایش سرعت ساعت، دستورالعمل‌های بیشتری توسط CPU در هر ثانیه اجرا خواهند شد. برای اطمینان از عملکرد صحیح پردازنده، باید مدت دورهٔ ساعت، بیشتر از حداکثر زمان مورد نیاز برای منتشر شدن تمام سیگنال‌ها در سرتاسر CPU باشد. با ست کردن طول دورهٔ ساعت به میزان بالاتری از بدترین حالت مدت زمان تأخیر انتشار، می‌توانیم تمام CPU و روشی را که برای انتقال داده برمبنای لبه‌های بالا رونده و پایین روندهٔ سیگنال ساعت استفاده می‌کند، طراحی کنیم. مزیت این کار این است که پردازنده به‌طور چشمگیری ساده‌تر می‌شود؛ هم از نظر طراحی و هم از نظر تعداد اجزا. البته این مشکل نیز وجود دارد که تمام CPU باید منتظر کندترین عناصر خود باشد، حتی اگر بخش‌هایی از CPU بسیار سریع تر باشد. این محدودیت، به میزان زیادی به وسیلهٔ روش‌هایی که موازی‌سازی CPU را افزایش می‌دهند، جبران شده‌است. با این حال، بهبودهای معماری به تنهایی قادر به حل تمام معایب پردازنده‌های تماماً همگام نیستند. برای مثال، سیگنال ساعت، در معرض تأخیرهای ناشی از هرگونه سیگنال‌های الکتریکی دیگر است. سرعت‌های بالای ساعت در CPUهایی که به‌طور فزاینده پیچیده شده‌اند، باعث می‌شود تا نگه داشتن سیگنال ساعت به شکل هم فاز در تمام بخش‌های واحد، دشوار شود. این امر باعث شده‌است تا در بسیاری از CPUهای جدید، چندین سیگنال ساعت مشابه فراهم شود، تا مانع از این شود که یک سیگنال منفرد آن‌قدر تأخیر پیدا کند که موجب اختلال عملکرد پردازنده شود. مشکل مهم دیگری که به‌دنبال افزایش چشمگیر سرعت ساعت به وجود می‌آید، مقدار گرمایی است که توسط پردازنده آزاد می‌شود. تغییر مداوم ساعت موجب می‌شود تا بسیاری از قطعات، صرف نظر از این‌که آیا در آن لحظه استفاده می‌شوند یا خیر، دچار سوئیچ شوند. به‌طور کلی، قطعه‌ای که در حال سوئیچ است، انرژی بیشتری را در مقایسه با عنصری که در وضعیت بدون تغییر است، مصرف می‌کنند؛ بنابراین، با افزایش سرعت ساعت و در نتیجه افزایش مصرف انرژی پردازنده، نیاز به انتشار گرمای بیشتری از طریق روش‌های خنک کنندهٔ پردازنده است. یک روش برای مقابله با سوئیچ‌های بی‌مورد، کلاک گیتینگ (Clock Gating) نام دارد که عبارت است از خاموش کردن سیگنال ساعت برای اجزای بلا استفاده (یعنی، عملاً غیرفعال کردن آن‌ها). با این حال، پیاده‌سازی این روش نیز معمولاً دشوار است و استفادهٔ رایجی ندارد، به جز در طراحی‌های بسیار کم‌مصرف. یک طراحی اخیر CPU که قابل ذکر است و از روش کلاک گیتینگ استفادهٔ زیادی می‌کند، پردازندهٔ زنون (Xenon) (که برحسب دستورالعمل‌های پاورپی‌سی شرکت آی‌بی‌ام طراحی شده) در ایکس‌باکس ۳۶۰ است که از این طریق، مصرف انرژی ایکس باکس ۳۶۰ به‌طور چشمگیری کاهش پیدا کرده‌است. شیوهٔ دیگر برای مقابله با بخشی از مشکل سیگنال ساعت سرتاسری، برداشتن سیگنال ساعت به صورت یکپارچه است. اگرچه برداشتن سیگنال ساعت سرتاسری، باعث پیچیده‌تر شدن فرایند طراحی به طرق مختلف می‌شود، با این حال، طراحی‌های ناهمگام (یا بدون ساعت) در مقایسه با طراحی‌های مشابه همگام، برتری قابل توجهی از لحاظ مصرف انرژی و انتشار گرما دارند. اگرچه تا حدودی ناشایع است، اما پردازنده‌هایی تماماً ناهمگام ساخته شده‌اند که از سیگنال ساعت سرتاسری استفاده نمی‌کنند. برخی طراحی‌های CPU، به جای این‌که سیگنال ساعت را به صورت کلی حذف کنند، فقط بخش‌هایی از سیستم مورد نظر را ناهمگام می‌کنند، مثلاً از ALUهای ناهمگام همراه با خط تولید سوپراسکالر، برای دستیابی به برخی فواید عملکردی در محاسبات استفاده می‌کنند. اگرچه در مجموع، مشخص نیست که آیا طراحی‌های تماماً ناهمگام می‌توانند در حد قابل مقایسه یا بهتری در مقایسه با طراحی‌های همگام عمل کنند یا خیر، اما مشخص شده‌است که حداقل در محاسبات ریاضی ساده‌تر، کارایی بالاتری دارند. این ویژگی، همراه با برتری آنها در مصرف انرژی و انتشار گرما، آن‌ها را تبدیل به گزینهٔ مناسبی برای کامپیوترهای نهفته کرده‌است. ماژول تنظیم‌کنندهٔ ولتاژ بسیاری از CPUهای جدید، دارای یک قطعهٔ مجزا برای مدیریت انرژی هستند، که در دای ادغام شده‌است، و وظیفهٔ آن، تنظیم کردن منبع ولتاژ به صورت دلخواه برای مدار CPU است. برای مثال برخی کامپیوترهای دیجیتال قدیمی اعداد را به شکل مقادیر سیستم عددی ده‌دهی (پایه ۱۰) نشان می‌دادند و برخی دیگر از کامپیوترها از نمایش‌های غیرمعمول نظیر، ternary (پایه ۳) استفاده کرده‌اند. تقریباً تمامی پردازنده‌های جدید، اعداد را به فرم باینری (دودویی) نشان می‌دهند، که در آن هر رقم به وسیله یک کمیت فیزیکی دو مقداری، نظیر ولتاژ «بالا» یا «پایین» نمایش داده می‌شود. اکثر پردازنده‌های جدید از کلماتی که دارای اندازه‌های توان دو هستند، مثلاً: ۸، ۱۶، ۳۲ یا ۶۴ بیت استفاده می‌کنند. اندازه و دقت اعداد صحیحی که یک پردازنده می‌تواند نمایش دهد، مربوط به نمایش عددی می‌شود. در رابطه با یک پردازنده باینری، این معیارها به وسیلهٔ تعداد بیت‌هایی (رقم‌های چشمگیر یک عدد صحیح کدگذاری شده به طریق باینری) که پردازنده می‌تواند در یک عملیات پردازش کند، اندازه‌گیری می‌شود، که در واقع، اندازهٔ کلمه، پهنای بیت، پهنای مسیر داده، دقت عدد صحیح، یا اندازه عدد صحیح نام دارد. اندازهٔ عدد صحیح یک پردازنده، محدودهٔ مقادیر صحیحی که پردازنده می‌تواند به‌طور مستقیم روی آن عملیات انجام دهد را مشخص می‌کند. برای مثال، یک پردازندهٔ ۸ بیتی می‌تواند به‌طور مستقیم، اعداد صحیحی را که به شکل ۸ بیت نمایش داده شده‌اند و دارای یک محدودهٔ مقادیر اعداد صحیح گسسته به میزان ۲۵۶ (28) هستند، دستکاری کند. کمحدوده اعداد صحیح، همچنین می‌تواند روی تعداد مکان‌هایی از حافظه که پردازنده می‌تواند به صورت مستقیم آدرس دهی کند تأثیر بگذارد (یک آدرس یک مقدار صحیح است که نشان دهنده یک مکان خاص از حافظه است). برای مثال اگر یک پردازنده باینری، از ۳۲ بیت برای نمایش یک آدرس حافظه استفاده کند، آنگاه می‌تواند به‌طور مستقیم 28 مکان حافظه را آدرس‌دهی کند. برای دور زدن این محدودیت، و به دلایل مختلف دیگر، برخی پردازنده‌ها از مکانیسم‌هایی (نظیر، bank switching) استفاده می‌کنند تا بتوانند حافظه بیشتری را آدرس‌دهی کنند.پردازنده‌هایی که دارای اندازه‌های کلمه بزرگتر هستند، نیاز به مداربندی بیشتر دارند و در نتیجه از لحاظ فیزیکی بزرگتر هستند و هزینهٔ بیشتری می‌برند و انرژی بیشتری مصرف می‌کنند (و بنابراین گرمای بیشتری تولید می‌کنند). در نتیجه، در کاربری‌های جدید، به‌طور رایج از میکروکنترلرهای ۴ یا ۸ بیتی استفاده می‌شود، با وجود اینکه پردازنده‌هایی با اندازهٔ کلمه بسیار بزرگتر (همچون ۱۶، ۳۲، ۶۴ و حتی ۱۲۸ وجود دارند). با این حال، زمانیکه نیاز به عملکرد بالا داریم، مزایای اندازهٔ بزرگ‌تر کلمه (محدوده‌های داده بزرگ‌تر و فضاهای آدرس بزرگتر) ممکن است بر معایب آن چیره شود. مسیرهای دادهٔ داخلی یک پردازنده می‌تواند باریک‌تر از اندازه کلمه باشد، تا اندازه و هزینه کاهش یابد. برای بهره‌گیری از برخی از مزایای طول‌های کمتر و بیشتر بیت، بسیاری از مجموعه دستورالعمل‌ها دارای پهناهای بیت متفاوتی برای دادهٔ صحیح و ممیز شناور هستند. در این حالت، پردازنده‌هایی که از این مجموعه دستورالعمل‌ها استفاده می‌کنند، می‌توانند پهناهای بیت متفاوتی برای قسمت‌های مختلف کامپیوتر داشته باشند. برای مثال، مجموعه دستورالعمل System/360 شرکت آی‌بی‌ام اساساً ۳۲ بیتی بود، اما از مقادیر ممیز شناور ۶۴ بیتی هم پشتیبانی می‌کرد تا دقت و محدودهٔ بیشتری را در رابطه با اعداد ممیز شناور فراهم کند. مدل System/360 Model 65 دارای یک جمع‌کننده ۸ بیتی برای محاسبات دسیمال و باینری ممیز ثابت بود و همزمان دارای یک جمع‌کننده ۶۰ بیتی برای محاسبات ممیز شناور نیز بود. علی‌الخصوص، زمانی که پردازنده برای اهداف عمومی استفاده می‌شود، باید یک تعادل منطقی بین قابلیت صحیح و نقطه شناور برقرار شود. توصیفی که از عملکرد پایه‌ای یک پردازنده در بخش قبلی شد، ساده‌ترین فرمی است که یک پردازنده می‌تواند داشته باشد. این نوع از پردازنده که معمولاً آن را ساب اسکالر(subscalar) می‌نامند، یک دستور را روی یک یا دو قطعهٔ داده، در یک زمان اجرا می‌کند. از آنجایی که فقط یک دستور در یک زمان اجرا می‌شود، کل پردازنده باید منتظر بماند تا آن دستور کامل شود تا بتواند به دستور بعدی برود. در نتیجه پردازنده‌های ساب اسکالر، در رابطه با دستوراتی که بیش از یک پالس ساعت (چرخهٔ ساعت) برای اجرا شدن کامل طول می‌کشند، معطل می‌ماند. حتی اضافه کردن یک واحد اجرایی دیگر بهبود زیادی روی عملکرد ندارد، و در این حالت به جای اینکه یک مسیر معطل باشد، دو مسیر معطل می‌ماند و تعداد ترانزیستورهای بلااستفاده افزایش می‌یابد. با این وجود عملکرد آن تقریباً همیشه ساب اسکالر (کمتر از یک دستور در یک چرخه) است. | ## بخش 3: واحد پردازش مرکزی | تلاش برای رسیدن به عملکردی در حد اسکالر یا بهتر از آن منجر به پیدایش انواعی از روش‌های طراحی شد که باعث می‌شود تا پردازنده، کمتر به صورت خطی و بیشتر به صورت موازی عمل کند. در بهترین حالت، این خط تولید می‌تواند یک دستورالعمل را در هر چرخه ساعت کامل کند. یکی از ساده‌ترین روش‌های مورد استفاده برای افزایش موازی‌سازی این است که اولین مراحل واکشی و رمزگشایی دستورالعمل را پیش از اینکه اجرای دستورالعمل قبلی تمام شود، شروع کنیم. خط لوله دستورالعمل، با شکستن مسیر اجرا و تبدیل آن به مراحل جداگانه، باعث می‌شود تا در هر زمان بیش از یک دستورالعمل اجرا شود. این جدا کردن را می‌توان با خط مونتاژ مقایسه کرد که در آن یک دستور در هر مرحله کاملتر می‌شود، تا اینکه کلا از خط خارج شود. با این وجود، روش خط لوله، ممکن است موقعیتی را به وجود آورد که در آن نتایج عملیات قبلی برای کامل کردن عملیات بعدی لازم است. برای جلوگیری از این وضعیت، باید توجه بیشتری شود تا در صورت رخ دادن این شرایط، بخشی از خط لوله دستورالعمل را به تأخیر بیاندازیم. به‌طور طبیعی، برآورده کردن این شرایط نیازمند مداربندی اضافه است، بنابراین پردازنده‌های خط مونتاژی، پیچیده‌تر از انواع ساب اسکالر هستند (البته، خیلی پیچیده‌تر نیستند). یک پردازنده از نوع خط لوله، می‌تواند بسیار نزدیک به حد اسکالر شود، در این شرایط تنها مانع موجود وقفه‌ها (دستورالعملی که بیش از یک چرخهٔ ساعتی در یک مرحله طول می‌کشد) هستند. با واکشی و توزیع دو دستورالعمل به صورت همزمان، حداکثر دو دستورالعمل را می‌توان در هر چرخه ساعت کامل کرد. پیشرفت بیشتر در زمینهٔ ایدهٔ خط لوله، منجر به ابداع روشی شده‌است که زمان بیکاری اجزای پردازنده را حتی به میزان بیشتری کاهش می‌دهد. طراحی‌هایی که اصطلاحاً سوپراسکالر(superscalar) هستند شامل یک خط لوله دستورالعمل طولانی و چندین واحد اجرایی مشابه از جمله: واحدهای بارگزاری/ذخیره‌سازی، واحدهای محاسبه و منطق، واحدهای ممیز شناور، و واحدهای تولید آدرس هستند. در یک خط لوله سوپراسکالر، دستورالعمل‌های متعددی خوانده شده و به توزیع کننده ها(dispatcher) می‌روند، توزیع کننده تصمیم می‌گیرد که آیا دستورالعمل‌های مذکور می‌توانند به‌طور موازی (همزمان) اجرا شوند یا نه. به‌طور کلی، هرقدر یک پردازندهٔ سوپراسکالر بتواند دستورالعمل‌های بیشتری را به‌طور هم‌زمان به واحدهای اجرایی در حال انتظار ارسال کند، دستورهای بیشتری در یک چرخهٔ مشخص اجرا می‌شوند. بیشترین دشواری در طراحی یک معماری سوپراسکالر پردازنده مربوط به ساخت یک توزیع‌کنندهٔ مؤثر است. توزیع کننده، باید قادر باشد تا به سرعت و بدون اشتباه مشخص کند که آیا دستورالعمل‌ها می‌توانند به‌طور موازی اجرا شوند، و آن‌ها را به شیوه‌ای توزیع کند تا بیشترین واحدهای اجرایی ممکن را از بیکاری خارج کند. این امر نیازمند این است که خط لوله دستورالعمل بیشتر مواقع ممکن پر باشد و معماری‌های سوپراسکالر را نیازمند مقادیر چشمگیری از حافظه نهان پردازنده(cache) می‌کند. همچنین، در این شرایط نیاز به تکنیک‌های حیاتی پیشگیری از خطر همچون: پیش‌بینی انشعاب، اجرای حدسی، تغییر نام رجیستر، اجرای خارج از نوبت و حافظه تراکنشی، برای حفظ سطوح بالای کارایی داریم. پردازنده با تلاش برای پیش‌بینی کردن اینکه کدام شاخه یا مسیر در یک دستورالعمل شرطی انتخاب خواهد شد، می‌تواند تعداد دفعاتی را که تمام خط تولید باید معطل بماند تا یک دستورالعمل شرطی کامل شود، به حداقل برساند. اجرای خارج از نوبت تا حدودی ترتیب اجرای دستورالعمل‌ها را تغییر می‌دهد تا تاخیرهای ناشی از وابستگی‌های داده را کاهش دهد. اجرای حدسی، با اجرا کردن بخش‌هایی از کد که ممکن است بعد از کامل شدن یک عملیات شرطی مورد نیاز نباشد، معمولاً موجب کمی افزایش در کارایی می‌شود. اجرای خارج از نوبت تا حدودی ترتیب اجرای دستورالعمل‌ها را تغییر می‌دهد تا تاخیرهای ناشی از وابستگی‌های داده را کاهش دهد. همچنین، در مورد جریان یک دستورالعمل، جریان چندین داده- که در آن مقدار زیادی داده مشابه باید پردازش شود- پردازنده‌های جدید می‌توانند بخش‌هایی از خط لوله را غیرفعال کنند تا، هنگامی که یک دستورالعمل به دفعات زیادی اجرا می‌شود، پردازنده بتواند مراحل واکشی و رمزگشایی را نادیده بگیرد و بنابراین باعث افزایش چشمگیر کارایی در مواقع خاصی، خصوصاً در موتورهای برنامه ای یکنواخت همچون نرم‌افزار ایجاد ویدئو و پردازش تصویر شود. در مواردی که بخشی از پردازنده سوپر اسکالر است و بخش‌هایی نیست، آن بخشی که سوپراسکالر نیست، دچار افت عملکرد به دلیل معطلی‌های زمان‌بندی می‌شود. اینتل پنتیوم P5 دارای دو واحد محاسبه و منطق سوپر اسکالر بود که هر کدام از آنها می‌توانستند یک دستورالعمل را در هر چرخه ساعت بپذیرند، اما واحد ممیز شناور آن نمی‌توانست یک دستورالعمل را در هر چرخه ساعت بپذیرد؛ بنابراین، ALU در رابطه با اعداد صحیح سوپراسکالر بود، اما در رابطه با ممیز شناور سوپراسکالر نبود. معماری نسل بعد از P5، یعنی P6 قابلیت‌های سوپراسکالر را به ویژگی‌های ممیز شناور خود اضافه کرد و بنابراین باعث افزایش چشمگیر در عملکرد دستورالعمل ممیز شناور شد. هم طراحی خط لوله ساده و هم طراحی سوپراسکالر، با فراهم آوردن امکان کامل کردن اجرای دستورالعمل‌ها با سرعتی فراتر از یک دستورالعمل در هر چرخه ساعت(ILP) برای یک پردازنده منفرد، موازی سازی سطح دستورالعمل را در CPU افزایش می‌دهند. اکثر طراحی‌های جدید پردازنده حداقل تا حدودی سوپراسکالر هستند و تقریباً تمام پردازنده‌های عمومی که در دهه اخیر طراحی شده‌اند سوپراسکالر هستند. در سال‌های بعدی، بخشی از تأکید در طراحی کامپیوترهای دارای سطوح بالای موازی سازی در سطح دستورالعمل، از سخت‌افزار پردازنده دور شده و بر روی رابط نرم‌افزاری یا همان معماری مجموعه دستورالعمل (ISA) متمرکز شده‌است. رویکرد کلمه دستورالعمل بسیار طولانی (VLIW) باعث می‌شود تا مقداری از موازی سازی در سطح-دستورالعمل به صورت ضمنی و مستقیماً توسط نرم‌افزار انجام گیرد، که منجر به کاهش بار کاری پردازنده برای افزایش ILP می‌شود و بدین گونه پیچیدگی طراحی کاهش یابد. موازی‌سازی در سطح وظایف رویکرد دیگر برای بهبود کارایی، اجرای چندین ریسمان یا فرایند به صورت موازی است. در این طرح‌بندی، هر CPU دارای سخت‌افزار اضافه برای حفظ یک نمای به روز متداوم از حافظه است. با اجتناب از نماهای کهنهٔ حافظه، این پردازنده‌ها می‌توانند روی یک برنامه همکاری کنند و برنامه‌ها می‌توانند از یک پردازنده به پردازندهٔ دیگر مهاجرت کنند. سیستم‌های چند فرایندی متقارن، دارای تعداد کمی پردازنده‌ها هستند، درحالی‌که سیستم‌های دسترسی به حافظه به‌شکل غیر یکپارچه، با هزاران پردازنده ساخته شده‌اند. در ابتدا، چند-پردازشی، با استفاده از چندین پردازندهٔ مجزا و بوردهایی برای پیاده‌سازی اتصالات بین آن‌ها، ساخته شد. بعداً مشخص شد که موازی سازی ظریف تر، می‌تواند با یک برنامه منفرد وجود داشته باشد. یک برنامهٔ منفرد ممکن است دارای چندین ریسمان (یا تابع) باشد، که می‌توان آن‌ها را به صورت مجزا یا موازی اجرا کرد. برخی از قدیمی‌ترین موارد این تکنولوژی، فرآیندهای ورودی-خروجی همچون دسترسی-مستقیم-به-حافظه را به صورت یک ریسمان جدا از ریسمان محاسباتی، پیاده‌سازی می‌کردند. یک رویکرد کلی تر برای این تکنولوژی، در دهه ۱۹۷۰ ارائه شد که در آن، سیستم‌ها طوری طراحی می‌شدند تا چندین ریسمان محاسباتی را به شکل موازی اجرا کنند. این رویکرد، در مقایسه با رویکرد چند-پردازشی به صرفه تر است، زیرا فقط تعداد اندکی از بخش‌های یک پردازنده برای پشتیبانی از چند ریسمانی باید تکثیر شوند، درحالی‌که برای چند-پردازشی، باید کل پردازنده تکثیر شود. در رویکرد چند-ریسمانی، واحدهای اجرایی و سیستم حافظه (از جمله کش‌ها)، در بین چندین ریسمان مشترک هستند. مشکل رویکرد چند-ریسمانی این است که پشتیبانی سخت‌افزاری برای چند-ریسمانی در مقایسه با چند-پردازشی، برای نرم‌افزار نمایان تر است؛ بنابراین، نرم‌افزارهای ناظر همچون سیستم عامل، برای پشتیبانی از چند ریسمانی باید متحمل تغییرات زیادی شوند. یک نوع از چند ریسمانی که پیاده‌سازی شد، چند ریسمانی غیر همزمان نام دارد که در آن، یک ریسمان تا زمانی اجرا می‌شود که مجبور شود برای برگشتن داده از حافظه خارجی معطل شود، که در این هنگام، CPU بلافاصله به ریسمان دیگری که آماده اجرا است تعویض زمینه می‌کند. نوع دیگری از چند ریسمانی، چند ریسمانی همزمان نام دارد، که در آن، دستورالعمل‌های مربوط به چندین ریسمان، به صورت موازی در داخل یک چرخه ساعت پردازنده اجرا می‌شوند.به مدت چندین دهه، از ۱۹۷۰ تا اوایل ۲۰۰۰، در طراحی پردازنده‌های عمومی با کارایی بالا، تمرکز بیشتر روی دستیابی به موازی سازی بالا در سطح-دستورالعمل، از طریق تکنولوژی‌هایی نظیر: خط لوله، حافظه‌های نهان، اجرای سوپراسکالر، اجرای خارج از نوبت و … بود. در اوایل دههٔ ۲۰۰۰، به دلیل رشد ناسازگاری بین فرکانس‌های اجرایی پردازنده و فرکانس‌های اجرایی حافظه و همچنین افزایش روزافزون تولید گرما توسط پردازنده که ناشی از تکنیک‌های اختصاصی موازی سازی در سطح-دستورالعمل بود، طراحان پردازنده دیگر قادر به دستیابی به کارایی‌های بالاتر با استفاده از تکنیک‌های ILP نبودند. همه گیر شدن طراحی‌های پردازنده‌های دو هسته‌ای و چند هسته ای و به‌طور قابل ذکر، شباهت طراحی‌های جدید اینتل به معماری کمتر سوپراسکالر P6، گواه بر این قضیه است. موازی‌سازی در سطح-داده یک مثال به‌طور فزاینده مهم، اما کمتر رایج از پردازنده‌ها (و در واقع به‌طور کلی، رایانش) به موازی سازی داده مربوط می‌شود. پردازنده‌هایی که پیش تر در رابطه با آنها صحبت کردیم، تماماً از نوع اسکالر بودند. همان‌طور که نام آنها نشان می‌دهد، پردازنده‌های برداری با قطعات متعددی از داده در زمینه یک دستورالعمل مرتبط هستند، درحالی‌که پردازنده‌های اسکالر، با یک قطعه از داده برای هر دستورالعمل سر و کار دارند. عمده بهره بری در ساخت پردازنده‌هایی که با بردارهای داده سر و کار دارند، در بهینه‌سازی وظایفی است که در آن‌ها نیاز است تا برخی اعمال (برای مثال، یک جمع یا یک ضرب برداری) روی مجموعهٔ بزرگی از داده انجام شود. برخی مثال‌های کلاسیک از این نوع وظایف عبارتند از: اپلیکیشن‌های چند رسانه‌ای (تصویر، ویدئو و صدا) و همچنین، انواع مختلفی از وظایف علمی و مهندسی. درحالی که یک پردازنده اسکالر باید تمام فرایند واکشی، رمزگشایی، و اجرای هر دستورالعمل و مقدار را در مجموعه ای از داده‌ها کامل کند، اما پردازنده برداری می‌تواند یک عملیات منفرد را روی مجموعه نسبتاً بزرگی از داده، فقط با یک دستورالعمل انجام دهد. این حالت، فقط زمانی امکان‌پذیر است که اپلیکیشن مورد نظر نیاز به مراحل متعددی دارد که عملیات مشابهی را روی مجموعه بزرگی از داده انجام می‌دهند. بسیاری از پردازنده‌های برداری ابتدایی نظیر Cray-1، تقریباً به صورت کامل مربوط به تحقیقات علمی و کاربردهای رمزنگاری بودند. با این وجود، از آنجایی که چند رسانه‌ای به میزان زیادی به سمت دیجیتال رفته‌است، نیاز به فرمی از SIMD در پردازنده‌های عمومی بیشتر شده‌است. کمی بعد از اینکه واحدهای ممیز شناور تبدیل به بخش ثابتی از پردازنده‌های عمومی شدند، اختصاص و پیاده‌سازی واحدهای اجرایی SIMD نیز در پردازنده‌های عمومی شروع شد. به‌طور روزافزون، توسعه دهندگان نرم‌افزار، این طراحی‌های ابتدایی را اصلاح و به فرم واحدهای اختصاصی SIMD پیشرفتهٔ جدید بازسازی کردند، که معمولاً بخشی از یک معماری مجموعه دستورالعمل است. یک میزبان، معادل مجازی یک ماشین فیزیکی است که روی آن، یک سیستم مجازی عمل می‌کند. در برخی سیستم‌ها، این امکان وجود دارد تا به صورت پویا، از خوشه کم کنیم یا به آن اضافه کنیم. بسیاری از مقادیر IPS گزارش شده، نشان‌دهندهٔ نرخ اجرای «حداکثری» بر روی توالی‌های دستورالعمل ساختگی با انشعابات معدود هستند، درحالی‌که بار کاری واقعی، شامل ترکیبی از دستورالعمل‌ها و اپلیکیشن‌هایی می‌شود که مدت زمان اجرای برخی از آن‌ها نسبت به بقیه بیشتر است. کارایی پردازش کامپیوترها، با استفاده از پردازنده‌های چندهسته‌ای که اساساً اتصال دو یا بیش از دو پردازندهٔ مجزا (با نام هسته‌ها، در این زمینه) در یک مدار مجتمع است، افزایش می‌یابد. به‌طور ایدئال، یک پردازندهٔ دو هسته‌ای تقریباً قدرت معادل دو برابر یک پردازندهٔ تک‌هسته‌ای دارد، اما در واقعیت، افزایش کارایی بسیار کمتر از این است و حدود تقریباً ۵۰٪ است که دلیل آن، الگوریتم‌های نرم‌افزاری و پیاده‌سازی‌های ناکامل است. افزایش تعداد هسته‌ها در یک پردازنده (یعنی دو هسته‌ای، چهار هسته‌ای و …) موجب افزایش میزان بار کاری قابل انجام توسط پردازنده می‌شود. این بدان معنی است که این پردازنده‌ها می‌توانند وقایع ناهمگام، وقفه‌ها و … را که در حجم زیاد می‌توانند اثرات مخربی روی عملکرد پردازنده داشته باشند، مدیریت کنند. این هسته‌ها را می‌توان به شکل طبقات مختلف در یک ساختمان پردازش در نظر گرفت که هر طبقه یک وظیفهٔ متفاوت را انجام می‌دهد. گاهی این هسته‌ها، در زمانی که یک هسته به تنهایی برای مدیریت اطلاعات کافی نباشد، می‌توانند کاری مشابه با هسته‌های مجاور خود انجام دهند. اورکلاک بالا بردن میزان نرخ زمانی کلاک و که سبب تولید هش‌ریت (میزان محاسبه اطلاعات توسط پردازنده در واحد زمان است)، بیشتر در واحد زمان و انجام سریع تری محاسبه در بازه زمانی می‌شود. پردازنده‌هایی که قفلشان بازگشایی شده باشد را می‌توان اورکلاک کرد و مزیت اورکلاک، انجام سریع تر پردازش و رندر‌های سنگین توسط پردازنده است. مضرات اورکلاک بالا رفتن دمای پردازنده برای محاسبه و در نتیجه استفاده مداوم سبب پایین آمدن عمر پردازش گر می‌شود. تنها پردازنده‌هایی اورکلاک می‌شوند که قابلیت اورکلاک شدن را در پسوند خود داشته باشند. زی‌آن (Xeon) نامی است که اینتل بر روی پردازنده‌های مخصوص به سرور گذاشته که اولین زی‌آن در سال ۱۹۹۸ به بازار عرضه شد. پردازنده‌های زی‌آن با بهره‌گیری از فناوری فراریسمانی که اجازه می‌دهد یک تراشه هم‌زمان دو ریسمان را با هم اجرا کند، راندمان بهتری ارایه می‌کنند. در هر فعالیت یا ایجاد یا اصلاحی در سرور، پردازنده سرور در حالت پردازش خواهد بود. شرکت‌های تولیدکننده گاهی بر روی پردازنده‌ها نام شرکت سازنده به صورت کامل و گاهی به صورت علائم اختصاری مخصوص شرکت مشخص می‌شود. شرکت‌های تولیدکنندهٔ پردازنده، هرساله پردازنده‌های قدرتمندی برای کاربران عادی و گیمرها ارائه می‌شوند. پیچیدگی طراحی پردازنده‌ها هم‌زمان با افزایش سریع فناوری‌های متنوع که ساختارهای کوچک‌تر و قابل اطمینان تری را در وسایل الکترونیک باعث می‌شد، افزایش یافت. اینتل در اواسط دهه ۱۹۷۰ میلادی، یکی از قوی‌ترین تراشه‌ها یعنی تراشه ۸۰۸۶ را به بازار عرضه کرد. پردازنده‌های Core i9 برای رقابت با پردازنده‌های تردریپر شرکت ای‌ام‌دی وارد بازار شده‌اند. پردازنده‌های Core i9، پنجمین سری و فعلاً آخرین پردازندهٔ معرفی شده که از خانوادهٔ پردازنده‌های رایانه خانگی هستند. ای‌ام‌دی یکی از بزرگ‌ترین رقیبان این شرکت، که پا به پای اینتل پردازنده‌های خود را معرفی و عرضه می‌کند. ای‌ام‌دی برای جذب مشتری بیشتر و در دست گرفتن بازار پردازنده‌های گرافیکی و مرکزی، سیاست کاهش قیمت را استفاده کرد و با این روش سعی در برتری نسبت به رقبا دارد. اِنویدیا آی‌بی‌ام Cyrix موتورولا نسل‌ها پردازنده‌ها بسته به تنوع در مدل و عملکرد آن‌ها دارای مدل‌های مختلفی هستند. معمولاً هر گاه یک تغییر اساسی در ساختار یا پردازنده به وجود آمده‌است نسل جدیدی برای آن نام‌گذاری شده‌است. معمولاً نسل‌های مختلف پردازنده‌ها را با نام، علائم یا شماره‌های مختلف نشان می‌دهند. شرکت‌های سازندهٔ پردازنده تولیدات خود را بر اساس یک روش استاندارد نام‌گذاری می‌کنند. بازار تولید تراشه به دنبال دنیاگیری کووید-۱۹ بسیاری از کارخانه‌های تولیدی به‌صورت موقت تعطیل شدند و همین موضوع باعث شده‌است. کمبود تراشه روی صنایع مختلفی اثر گذاشته که یکی از مهم‌ترین آن‌ها صنعت گوشی هوشمند است. | ## جمع‌بندی | میزان خرید هواوی به علت تحریم‌های ایالات متحده آمریکا در مقایسه با سال ۲۰۱۹ در حدود ۲۳ درصد کمتر شده‌است.