25-03-2020، 7:38
واحد کنترل (Control Unit) ویرایش
نوشتار اصلی: واحد کنترل
واحد کنترل یا CU قسمتی از CPU است که مسیر عملکرد پردازنده را تعیین میکند. این واحد تعیین میکند که قسمتهای مختلف رایانه از قبیل حافظه، ALU و ورودی/خروجیها چگونه به یک دستورالعمل که به پردازنده فرستاده شدهاست پاسخ دهند.
نمایش نمادین واحد ALU یا منطق و محاسبات و سیگنالهای ورودی و خروجی آن
واحد محاسبات و منطق (arithmetic logic unit (ALU)) ویرایش
نوشتار اصلی: واحد محاسبه و منطق
واحد محاسبات و منطق یا ALU یک مدار دیجیتال داخل پردازنده است که حساب اعداد صحیح و منطق عملیات بیتی را انجام میدهد.
واحد آدرس سازی (Address generation unit) ویرایش
واحد آدرس سازی یا AGU که گاهی «واحد محاسبه آدرس» یا ACU نیز خوانده میشود، یک واحد عملکردی در داخل CPU است که آدرسهایی را که CPU برای دسترسی به حافظه اصلی استفاده کردهاست، محاسبه میکند.
واحد مدیریت حافظه (Memory management unit (MMU)) ویرایش
نوشتار اصلی: واحد مدیریت حافظه
اکثر ریزپردازندههای جدید دارای واحدی به نام واحد مدیریت حافظه یا MMU هستند که آدرسهای منطقی را به آدرسهای RAM فیزیکی ترجمه میکنند.
حافظه نهان یا کش (Cache) ویرایش
حافظه نهان پردازنده یا CPU Cache یک حافظه نهان سختافزاری است که توسط CPU استفاده میشود تا هزینه متوسط دسترسی به داده (یعنی زمان و انرژی) از حافظه اصلی کاهش یابد.
نرخزمانی (Clock Rate) ویرایش
نوشتار اصلی: سرعت ریزپردازنده
اکثر پردازندهها و در حقیقت اکثر دستگاههایی که با منطق پالسی و تناوبی کار میکنند به صورت طبیعی باید سنکرون یا همزمان باشند. این بدان معناست که آنها به منظور همزمانسازی سیگنالها طراحی و ساخته شدهاند. این سیگنالها به عنوان سیگنال ساعت (پالس ساعت) شناخته میشوند و معمولاً به صورت یک موج مربعی پریودیک (متناوب) میباشند. برای محاسبه بیشترین زمانی که سیگنال قادر به حرکت از قسمتهای مختلف مداری پردازندهاست، طراحان یک دوره تناوب مناسب برای پالس ساعت انتخاب میکنند. این دوره تناوب باید از مقدار زمانی که برای حرکت سیگنال یا انتشار سیگنال در بدترین شرایط ممکن صرف میشود بیشتر باشد. برای تنظیم دوره تناوب باید پردازندهها باید مطابق حساسیت به لبههای پایین رونده یا بالا رونده حرکت سیگنال در بدترین شرایط تأخیر طراحی و ساخته شوند. در واقع این حالت هم از چشمانداز طراحی و هم از نظر میزان اجزای تشکیل دهنده یک مزیت ویژه در سادهسازی پردازندهها محسوب میشود. اگرچه معایبی نیز دارد، از جمله اینکه پردازنده باید منتظر المانهای کندتر بماند، حتی اگر قسمتهایی از آن سریع عمل کنند. این محدودیت به مقدار زیادی توسط روشهای گوناگون افزایش قدرت موازیسازی (انجام کارها به صورت همزمان) پردازندهها قابل جبران است. پالش ساعت شامل یک لبه بالا روند و یک لبه پایین رونده است که این تغییر حالت با تغییر ولتاژ صورت میپذیرد.
دامنه عدد صحیح (Integer range) ویرایش
روشی که یک پردازنده از طریق آن اعداد را نمایش میدهد یک روش انتخابی در طراحی است که البته در بسیاری از راههای اصولی اثرگذار است. در برخی از کامپیوترهای دیجیتالی اخیر از یک مدل الکترونیکی بر پایه سیستم شمارش دسیمال (مبنای ده) برای نمایش اعداد استفاده شدهاست. برخی دیگر از کامپیوترها از یک سیستم نامتعارف شمارشی مانند سیستم سه تایی (مبنای سه) استفاده میکنند. در حال حاضر تمامی پردازندههای پیشرفته اعداد را به صورت دودویی (مبنای دو) نمایش میدهند که در آن هر عدد به وسیله چندین کمیت فیزیکی دو ارزشی مانند ولتاژ بالا و پایین نمایش داده میشوند. علت نمایش دهی از طریق اعداد حجم کم و دقت بالا در اعدادی است که پردازشگر میتواند نمایش دهد. در حالت دودویی پردازندهها، یک بیت به یک مکان مشخص در پردازنده اطلاق میشود که پردازنده با آن به صورت مستقیم در ارتباط است. ارزش بیت (مکانهای شمارشی) یک پردازنده که برای نمایش اعداد بکار برده میشود «بزرگی کلمه»، «پهنای بیت»، «پهنای گذرگاه اطلاعات» یا «رقم صحیح» نامیده میشود؛ که البته این اعداد گاهی در بین بخشهای مختلف پردازندههای کاملاً یکسان نیز متفاوت است. برای مثال یک پردازنده ۸ بیتی به محدودهای از اعداد دسترسی دارد که میتواند با هشت رقم دودویی (هر رقم دو مقدار میتواند داشته باشد) ۲ یا ۲۵۶ عدد گسسته نمایش داده شود. نتیجتاً مقدار صحیح اعداد باعث میشود که سختافزار در محدودهای از اعداد صحیح که قابل اجرا برای نرمافزار باشد محدود شود و بدین وسیله توسط پردازنده مورد بهرهبرداری قرار گیرد.
موازی گرایی (پاراللیسم) ویرایش
توصیفی که از عملکرد پایهای یک سی پی یو در بخش قبلی شد، سادهترین فرمی است که یک سی پی یو میتواند داشته باشد. این نوع از سی پی یو که معمولاً آن را ساب اسکیلر مینامند، یک دستور را روی یک یا دو جزو اطلاعاتی، در یک زمان اجرا میکند. این فرایند موجب یک ناکارآمدی ذاتی در سی پی یوهای ساب اسکیلر میشود. از آنجایی که فقط یک دستور در یک زمان اجرا میشود، کل سی پی یو باید منتظر بماند تا آن دستور کامل شود تا بتواند به دستور بعدی برود. در نتیجه سی پی یوهای ساب اسکیلر در موارد دستوری که بیش از یک پالس ساعت (چرخهٔ ساعتی) برای اجرا شدن کامل طول میکشند، معلق میماند. حتی اضافه کردن یک واحد اجرایی دیگر بهبود زیادی روی عملکرد ندارد، و در این حالت به جای اینکه یک مسیر معلق باشد، دو مسیر معلق میماند و تعداد ترانزیستورهای بلااستفاده افزایش مییابد. این طراحی، که در آن منابع اجرایی سی پی یو میتواند فقط یک دستور در یک زمان اجرا کند، قادر خواهد بود تا فقط احتمالاً به عملکردی در حد اسکیلر (یک دستور در یک 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 با هزاران پردازنده موجود هستند. در ابتدای امر، چند پردازشی با استفاده از چندین سی پی یو و صفحهٔ مجزا برای برقراری ارتباط بین پردازندهها ساخته شد. هنگامیکه پردازندهها و ارتباطهای بین آنها تماماً روی یک تراشهٔ سیلیکون منفرد سوار شدند، تکنولوژی مذکور ریزپردازندهٔ چند هستهای نام گرفت.
بعدها مشخص شد که fine-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 چند هستهای (چند پردازشی در سطح تراشه) و بهطور قابل ذکر طراحیهای جدیدتر اینتل که مشابه معماری کمتر سوپرسکیلر P۶ بودند، مشاهده کرد. طراحیهای بعدی در چندین خانوادهٔ پردازنده، CMP را نشان دادند، از جمله x86-64 Opteron و Athlon 64 X2, SPARC UltraSPARC T۱، IBM POWER۴ و POWER۵ و چندین سی پی یو ی کنسول بازی ویدئویی مشابه طراحی powerpc سه هستهای ایکس باکس ۳۶۰ و ریزپردازندههای سلولی ۷ هستهای ۷-core)) پلی استیشن ۳.
موازی گرایی (پاراللیسم) اطلاعات ویرایش
یک الگوی غیرمعمول اما بهطور فزایندهای مهم از سی پی یوها (و در حقیقت، بهطور کلی پردازش) مربوط به موازی گرایی اطلاعات است. پردازندههایی که قبلاً بحث شدند، تماماً انواعی از ابزارهای اسکیلر نامیده میشوند. همچنان که از نام آن پیداست، پردازندههای برداری (vector processors) با چندین قطعه از اطلاعات در زمینهٔ یک دستور سروکار دارند که با پردازندههای اسکیلر که با یک قطعه از اطلاعات برای هر دستور سروکار دارد، متفاوت است. در طبقهبندی Flynn، این دو نوع مواجه با اطلاعات بهطور کلی و به ترتیب SIMD (یک دستور برای چندین داده) و SISD (یک دستور برای یک داده) نامیده میشود. استفادهٔ مهم در ایجاد سی پی یوهایی که با بردارهایی از اطلاعات سرو کار دارند، در بهینهسازی اعمالی است که در آنها یک عمل (برای مثال یک جمع یا dot product)باید روی مجموعهٔ بزرگی از اطلاعات صورت گیرد. برخی از مثالهای کلاسیک این نوع از اعمال کاربردهای مولتی مدیا (تصاویر، ویدئو و صدا) و نیز بسیاری از انواع اعمال علمی و مهندسی هستند. در حالیکه یک سی پی یو ی اسکیلر باید تمام فرایند fetching، دکودینگ و اجرا ی هر دستور و مقدار را برای مجموعهای از اطلاعات انجام دهد، یک سی پی یو ی برداری میتواند یک عمل را روی مجموعهٔ نسبتاً بزرگی از اطلاعات با یک دستور انجام دهد. البته این امر تنها زمانی امکانپذیر است که کاربر مذکور نیازمند مراحل بسیاری است که یک عمل را روی مجموعهٔ بزرگی از دادهها اجرا میکند.
اکثر سی پی یوهای وکتور ابتدایی، نظیر Cray-۱ فقط مربوط به تحقیقات علمی و کاربردهای کریپتوگرافی بودند. با این وجود، هنگامیکه مولتی مدیاها به میزان زیادی به Media دیجیتال تغییر پیدا کردند، نیاز به برخی از اشکال SIMD در سی پی یوهای کاربرد-عمومی نیز برجسته شد. مدت کوتاهی بعد ازاینکه لحاظ شدن واحدهای اجرایی نقطهٔ شناور در سی پی یوهای کاربرد-عمومی شروع به معمول شدن کرد، اختصاصی شدن و بکارگیری واحدهای اجرایی SIMD نیز در سی پی یوهای کاربرد-عمومی شروع به ظهور کرد. برخی از این اختصاصهای SIMD ابتدایی نظیر Multimedia Acceleration eXtensions مربوط به HP و MMX اینتل فقط اینتیجر بودند
نوشتار اصلی: واحد کنترل
واحد کنترل یا CU قسمتی از CPU است که مسیر عملکرد پردازنده را تعیین میکند. این واحد تعیین میکند که قسمتهای مختلف رایانه از قبیل حافظه، ALU و ورودی/خروجیها چگونه به یک دستورالعمل که به پردازنده فرستاده شدهاست پاسخ دهند.
نمایش نمادین واحد ALU یا منطق و محاسبات و سیگنالهای ورودی و خروجی آن
واحد محاسبات و منطق (arithmetic logic unit (ALU)) ویرایش
نوشتار اصلی: واحد محاسبه و منطق
واحد محاسبات و منطق یا ALU یک مدار دیجیتال داخل پردازنده است که حساب اعداد صحیح و منطق عملیات بیتی را انجام میدهد.
واحد آدرس سازی (Address generation unit) ویرایش
واحد آدرس سازی یا AGU که گاهی «واحد محاسبه آدرس» یا ACU نیز خوانده میشود، یک واحد عملکردی در داخل CPU است که آدرسهایی را که CPU برای دسترسی به حافظه اصلی استفاده کردهاست، محاسبه میکند.
واحد مدیریت حافظه (Memory management unit (MMU)) ویرایش
نوشتار اصلی: واحد مدیریت حافظه
اکثر ریزپردازندههای جدید دارای واحدی به نام واحد مدیریت حافظه یا MMU هستند که آدرسهای منطقی را به آدرسهای RAM فیزیکی ترجمه میکنند.
حافظه نهان یا کش (Cache) ویرایش
حافظه نهان پردازنده یا CPU Cache یک حافظه نهان سختافزاری است که توسط CPU استفاده میشود تا هزینه متوسط دسترسی به داده (یعنی زمان و انرژی) از حافظه اصلی کاهش یابد.
نرخزمانی (Clock Rate) ویرایش
نوشتار اصلی: سرعت ریزپردازنده
اکثر پردازندهها و در حقیقت اکثر دستگاههایی که با منطق پالسی و تناوبی کار میکنند به صورت طبیعی باید سنکرون یا همزمان باشند. این بدان معناست که آنها به منظور همزمانسازی سیگنالها طراحی و ساخته شدهاند. این سیگنالها به عنوان سیگنال ساعت (پالس ساعت) شناخته میشوند و معمولاً به صورت یک موج مربعی پریودیک (متناوب) میباشند. برای محاسبه بیشترین زمانی که سیگنال قادر به حرکت از قسمتهای مختلف مداری پردازندهاست، طراحان یک دوره تناوب مناسب برای پالس ساعت انتخاب میکنند. این دوره تناوب باید از مقدار زمانی که برای حرکت سیگنال یا انتشار سیگنال در بدترین شرایط ممکن صرف میشود بیشتر باشد. برای تنظیم دوره تناوب باید پردازندهها باید مطابق حساسیت به لبههای پایین رونده یا بالا رونده حرکت سیگنال در بدترین شرایط تأخیر طراحی و ساخته شوند. در واقع این حالت هم از چشمانداز طراحی و هم از نظر میزان اجزای تشکیل دهنده یک مزیت ویژه در سادهسازی پردازندهها محسوب میشود. اگرچه معایبی نیز دارد، از جمله اینکه پردازنده باید منتظر المانهای کندتر بماند، حتی اگر قسمتهایی از آن سریع عمل کنند. این محدودیت به مقدار زیادی توسط روشهای گوناگون افزایش قدرت موازیسازی (انجام کارها به صورت همزمان) پردازندهها قابل جبران است. پالش ساعت شامل یک لبه بالا روند و یک لبه پایین رونده است که این تغییر حالت با تغییر ولتاژ صورت میپذیرد.
دامنه عدد صحیح (Integer range) ویرایش
روشی که یک پردازنده از طریق آن اعداد را نمایش میدهد یک روش انتخابی در طراحی است که البته در بسیاری از راههای اصولی اثرگذار است. در برخی از کامپیوترهای دیجیتالی اخیر از یک مدل الکترونیکی بر پایه سیستم شمارش دسیمال (مبنای ده) برای نمایش اعداد استفاده شدهاست. برخی دیگر از کامپیوترها از یک سیستم نامتعارف شمارشی مانند سیستم سه تایی (مبنای سه) استفاده میکنند. در حال حاضر تمامی پردازندههای پیشرفته اعداد را به صورت دودویی (مبنای دو) نمایش میدهند که در آن هر عدد به وسیله چندین کمیت فیزیکی دو ارزشی مانند ولتاژ بالا و پایین نمایش داده میشوند. علت نمایش دهی از طریق اعداد حجم کم و دقت بالا در اعدادی است که پردازشگر میتواند نمایش دهد. در حالت دودویی پردازندهها، یک بیت به یک مکان مشخص در پردازنده اطلاق میشود که پردازنده با آن به صورت مستقیم در ارتباط است. ارزش بیت (مکانهای شمارشی) یک پردازنده که برای نمایش اعداد بکار برده میشود «بزرگی کلمه»، «پهنای بیت»، «پهنای گذرگاه اطلاعات» یا «رقم صحیح» نامیده میشود؛ که البته این اعداد گاهی در بین بخشهای مختلف پردازندههای کاملاً یکسان نیز متفاوت است. برای مثال یک پردازنده ۸ بیتی به محدودهای از اعداد دسترسی دارد که میتواند با هشت رقم دودویی (هر رقم دو مقدار میتواند داشته باشد) ۲ یا ۲۵۶ عدد گسسته نمایش داده شود. نتیجتاً مقدار صحیح اعداد باعث میشود که سختافزار در محدودهای از اعداد صحیح که قابل اجرا برای نرمافزار باشد محدود شود و بدین وسیله توسط پردازنده مورد بهرهبرداری قرار گیرد.
موازی گرایی (پاراللیسم) ویرایش
توصیفی که از عملکرد پایهای یک سی پی یو در بخش قبلی شد، سادهترین فرمی است که یک سی پی یو میتواند داشته باشد. این نوع از سی پی یو که معمولاً آن را ساب اسکیلر مینامند، یک دستور را روی یک یا دو جزو اطلاعاتی، در یک زمان اجرا میکند. این فرایند موجب یک ناکارآمدی ذاتی در سی پی یوهای ساب اسکیلر میشود. از آنجایی که فقط یک دستور در یک زمان اجرا میشود، کل سی پی یو باید منتظر بماند تا آن دستور کامل شود تا بتواند به دستور بعدی برود. در نتیجه سی پی یوهای ساب اسکیلر در موارد دستوری که بیش از یک پالس ساعت (چرخهٔ ساعتی) برای اجرا شدن کامل طول میکشند، معلق میماند. حتی اضافه کردن یک واحد اجرایی دیگر بهبود زیادی روی عملکرد ندارد، و در این حالت به جای اینکه یک مسیر معلق باشد، دو مسیر معلق میماند و تعداد ترانزیستورهای بلااستفاده افزایش مییابد. این طراحی، که در آن منابع اجرایی سی پی یو میتواند فقط یک دستور در یک زمان اجرا کند، قادر خواهد بود تا فقط احتمالاً به عملکردی در حد اسکیلر (یک دستور در یک 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 با هزاران پردازنده موجود هستند. در ابتدای امر، چند پردازشی با استفاده از چندین سی پی یو و صفحهٔ مجزا برای برقراری ارتباط بین پردازندهها ساخته شد. هنگامیکه پردازندهها و ارتباطهای بین آنها تماماً روی یک تراشهٔ سیلیکون منفرد سوار شدند، تکنولوژی مذکور ریزپردازندهٔ چند هستهای نام گرفت.
بعدها مشخص شد که fine-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 چند هستهای (چند پردازشی در سطح تراشه) و بهطور قابل ذکر طراحیهای جدیدتر اینتل که مشابه معماری کمتر سوپرسکیلر P۶ بودند، مشاهده کرد. طراحیهای بعدی در چندین خانوادهٔ پردازنده، CMP را نشان دادند، از جمله x86-64 Opteron و Athlon 64 X2, SPARC UltraSPARC T۱، IBM POWER۴ و POWER۵ و چندین سی پی یو ی کنسول بازی ویدئویی مشابه طراحی powerpc سه هستهای ایکس باکس ۳۶۰ و ریزپردازندههای سلولی ۷ هستهای ۷-core)) پلی استیشن ۳.
موازی گرایی (پاراللیسم) اطلاعات ویرایش
یک الگوی غیرمعمول اما بهطور فزایندهای مهم از سی پی یوها (و در حقیقت، بهطور کلی پردازش) مربوط به موازی گرایی اطلاعات است. پردازندههایی که قبلاً بحث شدند، تماماً انواعی از ابزارهای اسکیلر نامیده میشوند. همچنان که از نام آن پیداست، پردازندههای برداری (vector processors) با چندین قطعه از اطلاعات در زمینهٔ یک دستور سروکار دارند که با پردازندههای اسکیلر که با یک قطعه از اطلاعات برای هر دستور سروکار دارد، متفاوت است. در طبقهبندی Flynn، این دو نوع مواجه با اطلاعات بهطور کلی و به ترتیب SIMD (یک دستور برای چندین داده) و SISD (یک دستور برای یک داده) نامیده میشود. استفادهٔ مهم در ایجاد سی پی یوهایی که با بردارهایی از اطلاعات سرو کار دارند، در بهینهسازی اعمالی است که در آنها یک عمل (برای مثال یک جمع یا dot product)باید روی مجموعهٔ بزرگی از اطلاعات صورت گیرد. برخی از مثالهای کلاسیک این نوع از اعمال کاربردهای مولتی مدیا (تصاویر، ویدئو و صدا) و نیز بسیاری از انواع اعمال علمی و مهندسی هستند. در حالیکه یک سی پی یو ی اسکیلر باید تمام فرایند fetching، دکودینگ و اجرا ی هر دستور و مقدار را برای مجموعهای از اطلاعات انجام دهد، یک سی پی یو ی برداری میتواند یک عمل را روی مجموعهٔ نسبتاً بزرگی از اطلاعات با یک دستور انجام دهد. البته این امر تنها زمانی امکانپذیر است که کاربر مذکور نیازمند مراحل بسیاری است که یک عمل را روی مجموعهٔ بزرگی از دادهها اجرا میکند.
اکثر سی پی یوهای وکتور ابتدایی، نظیر Cray-۱ فقط مربوط به تحقیقات علمی و کاربردهای کریپتوگرافی بودند. با این وجود، هنگامیکه مولتی مدیاها به میزان زیادی به Media دیجیتال تغییر پیدا کردند، نیاز به برخی از اشکال SIMD در سی پی یوهای کاربرد-عمومی نیز برجسته شد. مدت کوتاهی بعد ازاینکه لحاظ شدن واحدهای اجرایی نقطهٔ شناور در سی پی یوهای کاربرد-عمومی شروع به معمول شدن کرد، اختصاصی شدن و بکارگیری واحدهای اجرایی SIMD نیز در سی پی یوهای کاربرد-عمومی شروع به ظهور کرد. برخی از این اختصاصهای SIMD ابتدایی نظیر Multimedia Acceleration eXtensions مربوط به HP و MMX اینتل فقط اینتیجر بودند