CPU چیست؛ هر آنچه باید در مورد پردازنده بدانید
واحد پردازش مرکزی (CPU) عنصری حیاتی در هر کامپیوتر محسوب میشود و تمامی محاسبات و دستوراتی را که به سایر اجزای کامپیوتر و تجهیزات جانبی آن منتقل میشود، مدیریت میکند. تقریباً تمام وسایل الکترونیکی و گجتهاییها که استفاده میکنید؛ از دسکتاپ و لپتاپ و گوشی گرفته تا کنسولهای گیمینگ و ساعتهای هوشمند، همه و همه به واحدی برای پردازش مرکزی مجهز هستند؛ در واقع این واحد، پایه و اساسی برای کامپیوترها به حساب میآید که بدون آن، سیستم روشن نمیشود، چه برسد به اینکه قابل استفاده باشد. سرعت بالای واحد پردازش مرکزی تابعی از دستور ورودی است و اجزای کامپیوترها تنها در صورتی که به این واحد متصل باشند، قدرت اجرایی پیدا میکنند.
- پردازنده چیست؟
- عملکرد پردازنده ها
- واحدهای عملیاتی پردازنده ها
- معماری پردازنده ها
- مجموعه دستورالعملها
- RISC درمقابل CISC یا ARM درمقابل x86
- تاریخچه مختصری از معماری پردازنده ها
- تفاوت های معماری ARM و X86-64
- شاخصهای عملکرد پردازنده ها
- فرکانس پردازنده ها
- حافظه کش
- هسته های پردازشی
- تفاوت بین پردازش تک هستهای و چند هستهای
- رشته های پردازشی
- هایپرتردینگ یا SMT چیست؟
- پردازنده در گیمینگ
- Bottleneck چیست؟
- راهاندازی سیستمی متعادل
ازآنجاکه واحدهای پردازش مرکزی، دادههای تمام قسمتهای کامپیوتر را بهطور همزمان مدیریت میکنند، ممکن است با افزایش حجم محاسبات و پردازشها، کُند عمل کند یا حتی با بالا رفتن حجم کاری، از کار بیفتد یا به اصطلاح کِرَش کند. امروزه رایجترین واحدهای پردازش مرکزی موجود در بازار از قطعات نیمههادی در مدارهای مجتمع تشکیل شدهاند که در انواع مختلفی به فروش میرسند و تولیدکنندگان پیشرو در این صنعت نیز، AMD و Intel هستند که از ۵۰ سال پیش تا به امروز در این حوزه با هم رقابت میکنند.
پردازنده چیست؟
برای آشنایی با واحد پردازش مرکزی (CPU)، ابتدا بخشی از کامپیوتر به نام SoC را خیلی مختصر معرفی میکنیم. SoC یا سیستم روی یک تراشه، بخشی از سیستم است که تمام اجزای مورد نیاز کامپیوتر را برای پردازش در تراشهای سیلیکونی ادغام میکند. SoC ماژولهای مختلفی دارد که واحد پردازش مرکزی (به اختصار پردازنده) جزئی اصلی از آن و پردازندهی گرافیکی، حافظه، کنترلر USB، مدارهای مدیریت انرژی و رادیوهای بیسیم (WiFi، 3G، 4G LTE، و غیره) اجزایی متفرقه هستند که ممکن است لزوماً روی SoC وجود نداشته باشند. واحد پردازندهی مرکزی که از این به بعد و در این مقاله آن را به اختصار پردازنده خطاب میکنیم، نمیتواند مستقل از تراشههای دیگر، دستورالعملها را پردازش کند؛ اما ساخت کامپیوتری کامل تنها با SoC امکانپذیر است.
SoC از پردازنده کمی بزرگتر است و در عین حال عملکردهای بسیار بیشتری نیز ارائه میدهد. در واقع با وجود تأکید زیادی که روی فناوری و عملکرد پردازنده میشود، این بخش از کامپیوتر، به خودی خود کامپیوتر نیست و میتوان آن را در نهایت، ماشینحسابی بسیار سریع معرفی کرد که جزئی از سیستم روی تراشه یا SoC است؛ دادهها را از حافظه فراخوانی میکند و سپس نوعی عملیات حسابی (جمع، ضرب) یا منطقی (و، یا، نه) روی آنها انجام میدهد.
عملکرد پردازنده ها
فرایند پردازش دستورها در پردازنده شامل چهار مرحلهی اصلی است که به ترتیب اجرا میشوند:
فراخوانی یا واکشی دستورالعملها از حافظه (Fetch): پردازنده ابتدا به منظور آگاهی از نحوهی مدیریت ورودی و دانستن دستورالعملهای مرتبط با آن، این دستورها را از حافظه دریافت میکند. این ورودی ممکن است یک یا بینهایت دستور باشد که باید در محلهای جداگانه آدرسدهی شوند. به این منظور واحدی به نام PC (مخفف Program Counter) یا شمارندهی برنامه، وجود دارد که ترتیب دستورهای ارسالشده را حفظ میکند؛ پردازنده نیز در تعاملی مشترک برای یافتن آدرس دستورالعمل دائماً با رم در ارتباط است (خواندن از حافظه).
رمزگشایی یا ترجمهی دستورالعملها (Decode): دستورالعملها به فرمی که برای پردازنده قابل درک باشند (زبان ماشین یا باینری) ترجمه میشوند. پردازنده پس از دریافت دستورها، برای درک آنها نیاز دارد تا این کدها به زبان ماشین (یا باینری) ترجمه شوند. نوشتن برنامهها به زبان باینری، از همان ابتدای امر، کار دشواری است و به همین دلیل کدها به زبانهای برنامهنویسی سادهتری نوشته میشوند و سپس واحدی به نام Assembler، این دستورها را به کدهای اجرایی و آماده برای پردازش پردازنده تبدیل میکند.
پردازش یا اجرای دستورهای ترجمهشده (Execute): مهمترین مرحله در عملکرد پردازنده، پردازش و اجرای دستورها است. در این مرحله دستورالعملهای رمزگشاییشده و باینری برای اجرا به کمک واحد ALU (مخفف Arithmetic & Logic Unit) یا واحد محاسبه و منطق، در آدرسی مخصوص پردازش میشوند.
ذخیرهی نتایج اجرا (Store): نتایج و خروجی دستورها به کمک واحد ثبات (Register) در حافظهی جانبی پردازنده ذخیره میشوند تا در دستورالعملهای آتی برای بالا بردن سرعت به آنها رجوع شود (نوشتن در حافظه).
فرایندی که در بالا توضیح داده شد، چرخهی واکشی-اجرایی نامیده میشود و میلیونها بار در ثانیه اتفاق میافتد؛ هربار پس از اتمام این چهار مرحلهی اصلی، نوبت به دستور بعدی میرسد و تمامی مراحل دوباره از اول اجرا شده تا زمانی که تمامی دستورالعملها پردازش شوند.
واحدهای عملیاتی پردازنده ها
هر پردازنده از سه واحد عملیاتی تشکیل شده است که در فرایند پردازش دستورها نقش دارند:
واحد محاسبه و عملیات منطقی (ALU یا همان Arithmetic & Logic Unit): این واحد مدار دیجیتالی پیچیدهای است که عملیات ریاضی و مقایسهای را انجام میدهد؛ در برخی پردازندهها، ALU به دو بخش AU (برای انجام عملیات حسابی) و LU (برای انجام عملیات منطقی) تقسیم میشود.
واحد کنترل حافظه (CU یا همان Program Counter): این واحد مداری است که عملیات را درون پردازنده هدایت و مدیریت میکند و چگونگی پاسخ دادن به دستورالعملها را به واحد محاسبه و منطق و دستگاههای ورودی و خروجی، دیکته میکند. کارکرد واحد کنترل در هر پردازنده بسته به معماری طراحی آن، میتواند متفاوت باشد.
واحد ثبات (Register): واحد ثبات، واحدی در پردازنده است که وظیفهی نگهداری موقت دادههای پردازششده، دستورالعملها، آدرسها، توالی بیتها و خروجی را بر عهده دارد و باید برای نگهداری این دادهها ظرفیت کافی داشته باشد. پردازندههایی با معماری ۶۴ بیتی، Registerهایی با ظرفیت ۶۴ بیتی دارند و پردازندههایی با معماری ۳۲ بیتی نیز دارای واحد ثباتی ۳۲ بیتی هستند.
معماری پردازنده ها
ارتباط میان دستورالعملها و طراحی سختافزار پردازنده، معماری پردازنده را شکل میدهد؛ اما معماری ۶۴ یا ۳۲ بیتی چیست؟ این دو معماری چه تفاوتهایی با یکدیگر دارند؟ برای پاسخ به این سؤال ابتدا باید با مجموعه دستورالعملها و نحوهی انجام محاسبات آنها آشنا شویم:
مجموعه دستورالعملها
مجموعه دستورالعملها (Instruction Set)، مجموعه عملیاتی است که هر پردازنده میتواند بهطور طبیعی اجرا کند. این عملیات از چندین هزار دستورالعمل ساده و ابتدایی (مانند جمع، ضرب، جابهجایی و…) تشکیل شده که اجرای آن از پیش برای پردازنده تعریف شده است و اگر عملیاتی در خارج از محدودهی این مجموعه دستورالعمل باشد، پردازنده نمیتواند آن را اجرا کند.
همانطورکه اشاره شد، پردازنده وظیفهی اجرای برنامهها را بر عهده دارد. این برنامهها مجموعهای از دستورالعملهای نوشتهشده به زبان برنامهنویسی هستند که باید با ترتیبی منطقی و دقیقاً مرحلهبهمرحله اجرا دنبال شوند.
ازآنجاکه کامپیوترها زبانهای برنامهنویسی را مستقیماً درک نمیکنند، این دستورالعملها باید به فرم زبانِ ماشین یا باینری ترجمه شوند که درک آنها برای کامپیوترها آسانتر باشد. فرم باینری تنها از دو عدد صفر و یک تشکیل شده است و دو حالت ممکن روشن (یک) یا خاموش (صفر) ترانزیستورها را برای عبور جریان الکتریسیته نشان میدهد.
در واقع هر پردازنده را میتوان مجموعهای از مدارهای الکتریکی دانست که مجموعهی دستورالعملها را دراختیار پردازنده قرار میدهند و سپس مدارهای مربوط به آن عملیات به وسیلهی سیگنالی الکتریکی فعال شده و پردازنده آن را اجرا میکند.
دستورالعملها از تعداد معینی بیت تشکیل شدهاند. برای مثال، در دستورالعملی ۸ بیتی؛ ۴ بیت اول آن به کد عملیات و ۴ بیت بعدی به دادههایی که باید استفاده شوند اشاره دارد. طول یک مجموعه دستورالعمل میتواند از چند بیت تا چند صد بیت متغیر بوده و در برخی از معماریها نیز طولهای متفاوتی داشته باشد.
بهطور کلی مجموعه دستورالعملها به دو دستهبندی اصلی زیر تقسیم میشوند:
- محاسبات کامپیوتری با مجموعه دستورالعملهای کاهشیافته (Reduced instruction set computer): برای پردازندهی مبتنی بر RISC (بخوانید ریسک)، مجموعه عملیات تعریف شده، ساده و اساسی هستند. این دست از محاسبات پردازشها را سریعتر و کارآمدتر انجام میدهند و برای کاهش زمان اجرا بهینهسازی شدهاند؛ RISC نیازی به داشتن مدارهای پیچیده ندارد و هزینهی طراحی آن پایین است. پردازندههای مبتنی بر RISC، هر دستور را در چرخهای واحد به اتمام میرسانند و تنها روی دادههای ذخیرهشده در رجیسترها، عملیات انجام میدهند؛ پس دستورالعملهای سادهای هستند، فرکانس بالاتری دارند، ساختار مسیرسازی اطلاعات در آنها بهینهتر است و عملیاتها را روی رجیسترها بارگذاری و ذخیره میکنند.
- محاسبات کامپیوتری با مجموعه دستورالعملهای پیچیده (Complex instruction set computer): پردازندههای CISC (بخوانید سیسک) یک لایه میکروکد یا ریزبرنامهریزی اضافی دارند که در آن دستورالعملهای پیچیده را به دستورهای ساده (مانند جمع یا ضرب) تبدیل میکنند. دستورالعملهای قابلبرنامهریزی در حافظهی سریع ذخیره میشوند و قابل بهروزرسانی هستند. در این نوع از مجموعه دستورالعملها، تعداد بیشتری از دستورالعملها را نسبت به RICS میتوان گنجاند و فرمت آنها میتوانند طول متغیر داشته باشند. در واقع CISC تقریباً نقطه مقابل RISC است. دستورالعملهای CISC میتوانند چندین چرخهی پردازنده را طی کنند و مسیرسازی اطلاعات در آنها به اندازه پردازندههای RISC کارآمد نیست. بهطور کلی پردازندههای مبتنی بر CISC میتوانند چندین عملیات را در طی یک دستور پیچیده اجرا کنند، اما در طول مسیر چندین چرخه را طی میکنند.
RISC درمقابل CISC یا ARM درمقابل x86
RISC و CISC در دستهبندی مجموعهی دستورالعملها، دو نقطهی ابتدایی و انتهایی این طیف هستند و در این میان ترکیبهای مختلف دیگری نیز به چشم میخورند. در ابتدا به بیان تفاوتهای اساسی RISC و CISC میپردازیم:
RICS یا مجموعه دستورالعملهای کاهش یافته | CISC یا مجموعه دستورالعملهای پیچیده |
---|---|
مجموعه دستورالعملهای RISC ساده هستند؛ تنها یک عملیات را اجرا میکنند و پردازنده میتواند در طی یک چرخه، آنها را پردازش کند. | دستورالعملهای CISC چندین عملیات را اجرا میکنند، اما پردازنده نمیتواند آنها را طی یک چرخهی واحد، پردازش کند. |
پردازندههای مبتنی بر RISC مسیرسازی بهینهتر و سادهتری برای اطلاعات دارند؛ طراحی این دستورها به قدری ساده است که میتوان آنها را بهصورت بخشبخش اجرا کرد. | پردازندههای مبتنی بر CISC ماهیت پیچیدهای دارند و اجرای دستورها در آن دشوارتر است. |
پردازندههای مبتنی بر RISC برای اجرای دستورالعملها به دادههای ذخیرهشده نیاز دارند. | در پردازندههای مبتنی بر CISC بهصورت مستقیم و ازطریق رم میتوان با دستورها کار کرد و دیگر نیازی به بارگذاری جداگانهی عملیات نیست. |
RISC به سختافزار پیچیدهای نیاز ندارد و تمام عملیات توسط نرمافزار انجام میشود. | نیازمندیهای سختافزاری طراحی CISC، بیشتر است. دستورالعملهای CISC با استفاده از سختافزار انجام میشوند و نرمافزارها غالباً سادهتر از RISC هستند. به همین دلیل است که برنامههایی مبتنی بر طراحی CISC، کدنویسی کمتری دارد و خود دستورالعملها، بخش بزرگی از عملیات را انجام میدهند. |
همانطورکه گفته شد در طراحی پردازندههای مدرن امروزی، ترکیبی از این دو مجموعه (CISC یا RISC) استفاده میشود. برای مثال معماری x86 ایامدی در اصل از مجموعه دستورالعملهای CISC استفاده میکند، اما به میکروکدی برای سادهسازی دستورالعملهای پیچیده مشابه RISC نیز مجهز است. حال که تفاوتهای دو دستهبندی اصلی مجموعهی دستورالعملها را بیان کردیم، کاربرد آنها را در معماری پردازندهها بررسی میکنیم.
اگر هنگام انتخاب گوشی یا تبلت، به معماری پردازندهی آن دقت کنید، متوجه خواهید شد که برخی از مدلها از پردازندههای اینتل استفاده میکنند، درحالیکه برخی دیگر مبتنی بر معماری ARM هستند.
فرض کنید که پردازندههای مختلف، هر کدام مجموعه دستورالعملهای مختلفی داشته باشند، در این صورت برای اجرای برنامههای مختلف، هر کدام باید جداگانه برای هر پردازنده کامپایل شوند. برای مثال برای هر پردازنده از خانوادهی AMD، لازم بود تا ویندوزی جداگانه توسعه داده شود، یا هزاران نسخه از برنامهی فتوشاپ برای پردازندههای مختلف نوشته میشد. بههمیندلیل، معماریهای استانداردی مبتنی بر دستهبندیهای RISC یا CISC یا ترکیبی از این دو طراحی شد و مشخصات این استانداردها هم دردسترس همه قرار گرفت. ARM، PowerPC، x86-64 و IA-64 نمونههایی از این استانداردهای معماری هستند که در ادامه دو مورد از مهمترین آنها و تفاوتهایشان را معرفی میکنیم:
تاریخچه مختصری از معماری پردازنده ها
در سال ۱۸۲۳، فردی به نام بارون جونز جکوب برزلیوس، عنصر شیمیایی سیلیکون (نماد Si، عدد اتمی ۱۴) را برای اولین بار کشف کرد. این عنصر به علت فراوانی و خاصیت نیمههادی قویای که دارد، بهعنوان ماده اصلی در ساخت پردازندهها و تراشههای کامپیوتری به کار میرود. تقریباً یک قرن بعد و در سال ۱۹۴۷، جان باردین، والتر براتین و ویلیام شاکلی اولین ترانزیستور را در آزمایشگاه بل اختراع و جایزهی نوبل دریافت کردند.
اولین مدار یکپارچهی (IC) کارآمد، سپتامبر ۱۹۵۸ رونمایی شد و دو سال بعد از آن IBM اولین مرکز تولید انبوه خودکار ترانزیستورها را در نیویورک توسعه داد. اینتل در سال ۱۹۶۸ پایهگذاری و AMD نیز یک سال بعد از آن تأسیس شد.
اولین پردازنده در اوایل دههی ۱۹۷۰، توسط اینتل اختراع شد؛ این پردازنده Intel 4004 نام داشت و با بهرهمندی از ۲۳۰۰ ترانزیستور، ۶۰ هزار عملیات در ثانیه انجام میداد. قیمت CPU اینتل 4004 با ۲۰۰ تعیین شده بود و تنها ۶۴۰ بایت حافظه داشت:
بعد از اینتل، موتورولا اولین پردازندهی ۸ بیتی خود را (MC6800) با فرکانس یک تا دو مگاهرتز معرفی کرد و سپس MOS Technology، پردازندهای سریعتر و ارزانتر نسبت به پردازندههای موجود معرفی کرد که در کنسولهای گیمینگ آن زمان، یعنی آتاری 2600 و سیستمهای نینتندو مانند Apple II و Commodore 64 استفاده شد. اولین پردازندهی ۳۲ بیتی را موتورولا در سال ۱۹۷۹ توسعه داد، البته این پردازنده تنها در کامپیوترهای مکینتاش اپل و آمیگا به کار رفت. کمی بعد National Semiconductor، اولین پردازندهای ۳۲ بیتی را برای استفاده عموم عرضه کرد.
PowerPC در سال ۱۹۹۳، اولین پردازندهی مبتنی بر مجموعه دستورالعملهای ۳۲ بیتی خود را عرضه کرد؛ این پردازنده توسط اتحادیهی AIM ( تشکیلشده از سه شرکت اپل، IBM و موتورولا) توسعه یافت و اپل در آن زمان از اینتل به PowerPC مهاجرت کرد. در ادامه دو ویدیوی تبلیغاتی را که اینتل و PowerPC در رقابت با یکدیگر منتشر کردند، مشاهده میکنید:
تبلیغ PowerPC برای نشان دادن ضعفهای اینتل
تبلیغ اینتل برای نشان دادن ضعفهای PowerPC
تفاوت پردازندهی ۳۲ بیتی و ۶۴ بیتی (x86 درمقابل x64): به بیان ساده، معماری x86 به خانوادهای از دستورالعملها اشاره دارد که در یکی از موفقترین پردازندههای اینتل، به نام 8086 به کار میرفت و اگر پردازندهای با معماری x86 سازگار باشد، آن پردازنده را بهعنوان x86-64 یا x86-32 میشناسند که برای نسخههای ویندوزی ۳۲ (و ۱۶) بیتی استفاده میشود؛ پردازندههای ۶۴ بیتی را x64 و پردازندههای ۳۲ بیتی را x86 معرفی میکنند.
بزرگترین تفاوت بین پردازندههای ۳۲ بیتی و ۶۴ بیتی، به میزان دسترسی متفاوت آنها به رم مربوط میشود:
حداکثر حافظهی فیزیکی معماری x86 یا پردازندههای ۳۲ بیتی، به ۴ گیگابایت محدود میشود؛ درحالیکه معماری x64 (یا پردازندههای ۶۴ بیتی) میتواند به حافظهی فیزیکی ۸، ۱۶ و برخی مواقع حتی تا ۳۲ گیگابایت دسترسی داشته باشد. یک کامپیوتر ۶۴ بیتی میتواند هم با برنامههای ۳۲ بیتی و هم با برنامههای ۶۴ بیتی کار کند؛ درمقابل، یک کامپیوتر ۳۲ بیتی تنها میتواند برنامههای ۳۲ بیتی را اجرا کند.
در بیشتر موارد، پردازندههای ۶۴ بیتی هنگام پردازش دادههای گسترده، از پردازندههای ۳۲ بیتی کارآمدتر عمل میکنند. برای آگاهی از اینکه سیستمعامل شما از کدام برنامهها (۳۲ بیتی یا ۶۴ بیتی) پشتیبانی میکند، کافی است یکی از دو مسیر زیر را طی کنید:
- کلیدهای Win + X را فشار دهید تا منوی کانتکس نمایش داده شود و سپس روی گزینهی System کلیک کنید. -> در پنجرهای که باز میشود، بخش System type را در قسمت مشخصات دستگاه (Device specification) پیدا کنید. ۶۴ بیتی یا ۳۲ بیتی بودن ویندوز خود را از این قسمت میتوانید مشاهده کنید.
- عبارت msinfo32 را در کادر جستوجوی ویندوز تایپ کرده و روی System Information نمایش دادهشده، کلیک کنید. -> از بخش System Information در سمت راست، نوع System پیدا کنید و ببینید که سیستمعامل ویندوز شما مبتنی بر x64 است یا X32.
مسیر اول
مسیر دوم
ARM نوعی از معماری پردازندههای کامپیوتری بود که در سال ۱۹۸۰ توسط Acorn معرفی شد؛ قبل از ARM، ایامدی و اینتل هر دو از دو معماری X86 اینتل، مبتنی بر محاسبات CISC، استفاده میکردند و IBM نیز در ورکاستیشنهای خود از محاسبات RISC بهره میبرد. در واقع Acorn اولین شرکتی بود که کامپیوتری خانگی بر مبنای محاسبات RISC توسعه داد و نام معماری آن را برگرفته از نام خود ARM گذاشت: مخفف Acorn RISC Machine. این شرکت پردازنده تولید نمیکرد و در عوض مجوز استفاده از معماری ARM را به دیگر تولیدکنندگان پردازنده میفروخت. هلدینگ Acorn، چند سال بعد، کلمهی Acorn را به Advanced تغییر داد.
معماری ARM دستورالعملهای ۳۲ بیتی را پردازش میکند و هستهی اصلی پردازندهای مبتنی بر این معماری، حداقل به ۳۵ هزار ترانزیستور نیاز دارد. پردازندههای طراحیشده بر مبنای معماری x86 اینتل که براساس محاسبات CISC پردازش میکنند، حداقل به میلیونها ترانزیستور نیاز دارند؛ در واقع مصرف بهینهی انرژی در پردازندههای مبتنی بر ARM و مناسب بودن آنها برای دستگاههایی مانند گوشی یا تبلت، با همین تعداد کم ترانزیستورها نسبت به معماری X86 اینتل مرتبط است.
ARM در سال ۲۰۱۱ معماری ARMv8 را با پشتیبانی از دستورها ۶۴ بیتی معرفی و یک سال بعد از آن، مایکروسافت نیز نسخه ویندوز سازگار با معماری ARM را به همراه تبلت سرفیس RT به بازار عرضه کرد.
تفاوت های معماری ARM و X86-64
معماری ARM به گونهای طراحی شده که تا حد امکان ساده باشد و در عین حال اتلاف انرژی را در حداقلترین سطح نگه دارد. درمقابل اینتل با معماری X86 از تنظیمات پیچیدهتری استفاده میکند که بیشتر برای پردازندههای قدرتمندتر دسکتاپی و لپتاپی مناسب است.
کامپیوترها پس از اینکه اینتل معماری مدرن x86-64 (که تحت عنوان x64 هم شناخته میشود) را معرفی کرد، به سراغ معماری ۶۴ بیتی رفتند. معماری ۶۴ بیتی برای انجام بهینهی محاسبات، ضروری است و رندرینگ سهبعدی و رمزنگاری را با دقت و سرعت بیشتری انجام میدهد. امروزه، هر دو معماری از دستورهای ۶۴ بیتی پشتیبانی میکنند، اما این تکنولوژی برای موبایل زودتر ارائه شد.
ARM در زمان پیادهسازی معماری ۶۴ بیتی در ARMv8، دو رویکرد را در این معماری پیش گرفت: AArch32 و AArch64. که اولی برای اجرای کدهای ۳۲ بیتی و دیگری برای اجرای کدهای ۶۴ بیتی استفاده میشود.
طراحی معماری ARM به شکلی است که میتواند خیلی سریع بین دو حالت سوییچ کند. این یعنی دیکُدر دستورالعملهای ۶۴ بیتی دیگر نیازی به سازگاری با دستورها ۳۲ بیتی ندارد و به گونهای طراحی شده که با تکنولوژی پیشین سازگار باشد، البته ARM اعلام کرده است که پردازندههای مبتنی بر معماری ARMv9 Cortex-A در سال ۲۰۲۳ تنها با دستورها ۶۴ بیتی سازگار خواهند بود و پشتیبانی از اپلیکیشنها و سیستمعاملهای ۳۲ بیتی در پردازندههای نسلهای بعدی به پایان خواهد رسید.
تفاوتهای میان معماری ARM و اینتل تا حد زیادی نشاندهندهی دستاوردها و چالشهای این دو شرکت است. رویکرد مصرف بهینهی انرژی در معماری ARM در عین حال که برای توان مصرفی زیر ۵ واتی در موبایلها مناسب است، امکان بهبود عملکرد پردازندههای مبتنی بر این معماری را تا سطح پردازندههای لپتاپی اینتل فراهم میکند. درمقابل توان مصرفی ۱۰۰ واتی اینتل در پردازندههای Core i7 و Core i9 یا حتی پردازندههای AMD، دستاوردی بزرگی در دسکتاپهای ردهبالا و سرورها محسوب میشود، البته به لحاظ تاریخی پایین آوردن این توان تا زیر ۵ وات امکانپذیر نیست.
پردازندههایی که از ترانزیستورهای پیشرفتهتر بهره میبرند، برق کمتری مصرف میکنند و اینتل نیز از مدتها پیش تلاش میکرد تا لیتوگرافی خود را از ۱۴ نانومتر به لیتوگرافیهای پیشرفتهتر ارتقا دهد. این شرکت اخیراً موفق شد پردازندههای خود را با فرایند ساخت ۱۰ نانومتری تولید کند، اما در همین حین، پردازندههای موبایلها نیز از ۲۰ نانومتر به طراحیهای ۱۴ و ۱۰ و ۷ نانومتری رسیدند که دستاوردی ناشی از رقابت سامسونگ و TSMC است. از سوی دیگر، AMD هم در سری رایزن از پردازندههای ۷ نانومتری رونمایی کرد و از رقبای معماری x86-64 خود پیشی گرفت.
نانومتر: یک متر تقسیم بر هزار برابر است با یک میلیمتر، یک میلیمتر تقسیم بر هزار برابر است با یک میکرومتر و یک میکرومتر تقسیم بر هزار برابر است با یک نانومتر، به تعبیر دیگر نانومتر یک میلیارد برابر کوچکتر از متر است.
لیتوگرافی یا فرایند ساخت: لیتوگرافی (lithography) واژهای یونانی به معنای سنگنگاری است که در پردازندهها به نحوهی قرار دادن اجزاء یا همان فرایند تولید و شکلگیری مدارها اشاره دارد؛ این فرایند توسط تولیدکنندگان متخصصی در این زمینه مانند TSMC، انجام میشود. نانومتر در لیتوگرافی از زمان تولید اولین پردازندهها تا چند سال پیش، فواصل قرارگیری اجزای پردازنده در کنار هم را نشان میداد؛ برای مثال لیتوگرافی چهارده نانومتری پردازندههای سری Skylake در سال ۲۰۱۵، به این معنا بود که اجزای تشکیلدهندهی آن پردازنده، با فاصله ۱۴ نانومتری از هم قرار گرفتهاند. در آن زمان باور بر این بود که هرچه لیتوگرافی یا فرایند ساخت پردازندهای کمتر باشد، مصرف انرژیِ بهینهتر و عملکرد بهتری دارد.
فواصل قرارگیری اجزا در پردازندهها امروزه دیگر آنچنان موضوعیت ندارد و فرایندهایی که برای ساخت این محصولات عنوان میشوند، بیشتر قراردادی هستند؛ چراکه دیگر نمیتوان بدون کاهش بهرهوری، این فواصل را از یک حدی بیشتر کاهش داد. بهطور کلی با گذشت زمان، پیشرفت فناوری، طراحی ترانزیستورهای مختلف و افزایش تعداد این ترانزیستورها در پردازنده، تولیدکنندگان راهکارهای مختلف دیگری مانند انباشهسازی سهبعدی را برای قرار دادن ترانزیستورها روی پردازندهها در پیش گرفتهاند.
منحصربهفردترین قابلیت معماری ARM را میتوان، پایین نگه داشتن توان مصرفی در اجرای اپلیکیشنهای موبایلی دانست؛ این دستاورد از توانایی پردازش ناهمگن ARM ناشی میشود؛ معماری ARM این امکان را فراهم میکند تا پردازشها بین هستههای قدرتمند و کممصرف تقسیم شوند و درنتیجه انرژی بهینهتر مصرف شود.
نخستین تلاش ARM در این حوزه به معماری big.LITTLE در سال ۲۰۱۱ برمیگردد و زمانی که هستههای بزرگ Cortex-A15 و هستههای کوچک Cortex-A7 از راه رسیدند. ایدهی استفاده از هستههای قدرتمند برای اپلیکیشنهای سنگین و استفاده از هستههای کممصرف برای پردازشهای سبک و پسزمینه، شاید آنچنان که باید مورد توجه قرار نگرفته باشد، اما ARM برای رسیدن به آن تلاشهای ناموفق و شکستهای زیادی را تجربه کرد؛ امروزه ARM معماری غالب بازار است: برای مثال آیپدها و آیفونها بهطور انحصاری از معماری ARM استفاده میکنند.
در این میان، پردازندههای Atom اینتل که از پردازش ناهمگن بیبهره بودند، نتوانستند با عملکرد و مصرف بهینهی پردازندههای مبتنی بر معماری ARM رقابت کنند و همین امر باعث شد اینتل از ARM عقب بماند.
سرانجام اینتل در سال ۲۰۲۰ توانست در طراحی پردازندههای ۱۰ نانومتری Lakefield خود، معماری هیبریدی برای هستهها را با یک هستهی قدرتمند (Sunny Cove) و چهار هستهی کممصرف (Tremont) به کار گیرد و در کنار این دستاورد از گرافیک و قابلیتهای اتصال نیز استفاده کند، اما این محصول برای لپتاپهایی با توان مصرفی ۷ وات ساخته شده بود که همچنان مصرف بالایی برای گوشیها محسوب میشود.
یکی دیگر از وجه تمایزهای مهم اینتل و ARM در نحوهی استفاده از طراحیشان است. اینتل معماری توسعه دادهشدهی خود را در پردازندههایی که تولید میکند، به کار میبرد و معماری را در محصولاتش به فروش میرساند، درحالیکه ARM گواهی طراحی و معماری خود را با قابلیت شخصیسازی به دیگر شرکتها، مانند مانند اپل، سامسونگ و کوالکام میفروشد و این شرکتها میتوانند بسته به اهداف خود تغییراتی در مجموعه دستورالعملهای این معماری و طراحی به وجود آورند.
تولید پردازندههای شخصیسازیشده برای شرکتهای تولیدکنندهی این محصولات، هزینهبر و پیچیده است، اما اگر به درستی انجام شود، محصولات نهایی میتوانند بسیار قدرتمند باشند. برای مثال، اپل تا یه حال بارها ثابت کرده است که شخصیسازی معماری ARM میتواند عملکرد پردازندههای این شرکت را همرده با x84-64 یا فراتر از آن قرار دهد.
اپل درنهایت قصد دارد تمام پردازندههای مبتنی بر معماری اینتل را از محصولات مک خود حذف کرده و سیلیکون مبتنی بر معماری ARM را جایگزین آنها کند. تراشهی M1، نخستین تلاش اپل در این راستا محسوب میشود که همراه با مکبوک ایر، مکبوک پرو و مک مینی عرضه شد. پس از آن تراشههای M1 Max و M1 Ultra نیز نشان دادند که معماری ARM همراه با چاشنی بهبودهای اپل میتواند معماری x86-64 را به چالش بکشد.
همانطورکه پیشتر گفته شد، معماریهای استانداردی مبتنی بر دستهبندیهای RISC یا CISC یا ترکیبی از این دو طراحی شد و مشخصات این استانداردها هم دردسترس همه قرار گرفت؛ اپلیکیشنها و نرمافزارها باید برای معماری پردازندهای که روی آن به اجرا در میآیند، کامپایل شوند. این موضوع قبلاً به دلیل محدود بودن پلتفرمها و معماریهای مختلف، دغدغهی بزرگی محسوب نمیشد، اما امروزه تعداد اپلیکیشنهایی که برای اجرا در پلتفرمهای مختلف به کامپایلهای متفاوتی نیاز دارند، افزایش پیدا کرده است.
مکهای مبتنی بر معماری ARM، سیستمعامل کروم در پلتفرم گوگل و ویندوز مایکروسافت، همه و همه مثالهایی در دنیای امروز هستند که به اجرای نرمافزار روی هر دو معماری Arm و x86-64 نیاز دارند. کامپایل بومی نرمافزار، تنها راهکاری است که میتوان در چنین شرایطی از آن بهره برد.
درواقع برای این پلتفرمها امکان شبیهسازی کد یکدیگر فراهم است و میتوان کدهای کامپایلشده برای یک معماری را روی معماری دیگری به اجرا درآورد. ناگفته نماند که چنین رویکردی نسبت به توسعهی ابتدایی اپلیکیشنی سازگار با هر پلتفرم، با کاهش عملکرد همراه است، اما همین امکانپذیر بودن شبیهسازی کد، میتواند تا حد زیادی فعلاً امیدوارکننده باشد.
پس از سالها توسعه، درحالحاضر شبیهساز ویندوز برای پلتفرمی مبتنی بر معماری ARM، عملکرد قابلقبولی برای اجرای اکثر اپلیکیشنها ارائه میدهد، اپلیکیشنهای اندرویدی نیز در اکثر مواقع روی کرومبوکهای مبتنی بر معماری اینتل، کموبیش رضایتبخش اجرا میشوند و اپل هم که ابزار ترجمهی کد مخصوص به خود (Rosetta 2) را توسعه داده است از اپلیکیشنهای قدیمی مک که برای معماری اینتل توسعه داده شده بودند، پشتیبانی میکند.
اما همانطورکه اشاره شد، هر سه، در اجرای برنامهها نسبت به شرایطی که برنامه از ابتدا برای هر پلتفرم جداگانه نوشته شود، ضعیفتر عمل میکنند. در کل معماری ARM و X86-64 اینتل را میتوان به شرح زیر مقایسه کرد:
معماری | ARM | X86-64 |
---|---|---|
CISC درمقابل RISC | معماری ARM نوعی معماری برای پردازندهها است و بنابراین تنها یک سازنده ندارد. این فناوری در پردازندههای گوشیهای اندرویدی و آیفونها به کار میرود. | معماری X86 توسط اینتل تولید شده و منحصراً در پردازندههای دسکتاپی و لپتاپی این شرکت استفاده میشود. |
پیچیدگی دستورالعملها | معماری ARM تنها از یک چرخه برای اجرای یک فرمان استفاده میکند و این ویژگی باعث میشود پردازندههای مبتنی بر این معماری برای دستگاههایی که نیاز به پردازشهای سادهتری دارند، مناسبتر باشد. | معماری اینتل (یا معماری X86 مرتبط با برنامههای ۳۲ بیتی ویندوز) غالباً از محاسبات CISC استفاده میکند و به همین دلیل مجموعه دستورالعملهای کمی پیچیدهتری داشته و برای اجرا به چندین چرخه نیاز دارد. |
پردازندههای موبایل درمقابل پردازندههای دسکتاپی | وابسته بودن معماری ARM به نرمافزار، باعث میشوند تا این معماری در طراحی پردازندهی گوشیها بیشتر به کار رود؛ ARM (بهطور کلی) در فناوریهای کوچکتر که مدام به منبع تغذیه دسترسی ندارند، بهتر کار میکند. | ازآنجاکه معماری X86 اینتل بیشتر به سختافزار متکی است، این معماری معمولاً برای طراحی پردازندههای دستگاههای بزرگتر مانند دسکتاپها استفاده میشود؛ اینتل بیشتر بر عملکرد تمرکز میکند و برای فناوریهای گستردهتر، معماری بهتری محسوب میشود. |
مصرف انرژی | معماری ARM نهتنها به لطف مجموعه محاسباتی تک چرخه خود، انرژی کمتری مصرف میکند، بلکه دمای عملیاتی آنها نیز نسبت به معماری X86 اینتل کمتر است؛ معماری ARM برای طراحی پردازندههای گوشیها عالی هستند، چراکه میزان انرژی لازم برای سرپا نگهداشتن سیستم و انجام دستورهای درخواستی کاربر را کاهش میدهد. | معماری اینتل بر عملکرد متمرکز بوده و از این رو برای کاربران دسکتاپها یا لپتاپها که به منبع نامحدود برق دسترسی دارند، مشکلی ایجاد نمیکند. |
سرعت پردازنده | پردازندههای مبتنی بر معماری ARM معمولاً کندتر از همتایان اینتلی خود هستند، چراکه برای مصرفی بهینه با توان پایینتری محاسبات را انجام میدهند. | پردازندههای مبتنی بر معماری X86 اینتل برای محاسبات سریعتر به کار میروند. |
سیستمعامل | معماری ARM در طراحی پردازندههای گوشیهای اندرویدی کارآمدتر است و معماری غالب در این بازار به حساب میآید؛ با اینکه دستگاههای مبتنی بر معماری X86 نیز میتوانند طیف کاملی از برنامههای اندرویدی، اما این برنامهها باید قبل از اجرا، ترجمه شوند. این سناریو به صرف زمان و انرژی نیاز دارد، بنابراین ممکن است عمر باتری و عملکرد کلی پردازنده صدمه ببیند. | معماری اینتل در تبلتها و سیستمعامل ویندوز، بهعنوان معماری غالب حکمرانی میکند. البته مایکروسافت در سال ۲۰۱۹، سرفیس پرو ایکس را با پردازندهای عرضه کرد که از معماری ARM بهره میبرد و میتوانست نسخهی کامل ویندوز را اجرا کند. اگر گیمر هستید یا اگر از تبلت خود انتظاراتی فراتر از اجرای نسخهی کامل ویندوز دارید، بهتر است همچنان از معماری اینتل بهره ببرید. |
در جریان رقابت بین Arm و x86 در ده سال گذشته، ARM را میتوان معماری برنده برای دستگاههای کممصرف مانند گوشیها دانست. این معماری در لپتاپها و سایر دستگاههایی که به مصرف بهینهی انرژی نیاز دارند نیز گامهای بلندی برداشته است. درمقابل با اینکه اینتل بازار گوشیها را از دست داده، تلاشهای این تولیدکننده برای بهینهسازی مصرف انرژی در طول سالها با پیشرفتهای چشمگیری همراه بوده است و با توسعهی معماری هیبریدی، مانند ترکیب Lakefield و Alder Lake ، اکنون بیش از هر زمان دیگری اشتراکات بسیاری با پردازندههای مبتنی بر معماری Arm دارد. Arm و x86 بهطور مشخص از نقطه نظر مهندسی متفاوت هستند و هرکدام نقاط قوت و ضعف فردی مخصوص به خود را دارند، بااینحال، امروزه دیگر تشخیص موارد استفاده و مصرف این دو از هم دیگر کار آسانی نیست، چراکه پشتیبانی از هر دو معماری بهطور فزایندهای در اکوسیستمها در حال افزایش است.
شاخصهای عملکرد پردازنده ها
عملکرد پردازنده، تأثیر زیادی بر سرعت بارگیری برنامهها و اجرای روان آنها دارد و برای اندازهگیری عملکرد هر پردازنده نیز معیارهای مختلفی وجود دارد که فرکانس (سرعت ساعت) یکی از مهمترین آنها است. پس دقت داشته باشید فرکانس هر هسته را میتوان معیاری برای اندازهگیری توان پردازشی آن در نظر گرفت، اما این معیار لزوماً معرف عملکرد کلی پردازنده نیست و موارد زیادی مانند تعداد هستهها و رشتهها، معماری داخلی (هم افزایی بین هستهها)، ظرفیت حافظهی کش، قابلیت اورکلاک، توان حرارتی، توان مصرفی، IPC و … را نیز برای قضاوت در مورد عملکرد کلی پردازنده در نظر گرفت.
همافزایی یا سینرژی (Synergy) به اثری گفته میشود که از جریان یا برهمکنش (تعامل) دو یا چند عنصر بهوجود میآید. اگر این اثر از مجموع اثرهایی که هر کدام از آن عناصر جداگانه میتوانستند به وجود آورند بیشتر شود در این صورت پدیدهی همافزایی رخ داده است.
در ادامه، دربارهی عوامل تأثیرگذار در عملکرد پردازنده، بیشتر توضیح میدهیم:
فرکانس پردازنده ها
یکی از مهمترین عوامل در انتخاب و خرید یک پردازنده فرکانس (سرعت کلاک یا Clock Speed) آن بوده که معمولاً برای همهی هستههای آن پردازنده عددی ثابت است. تعداد عملیاتی که پردازنده در هر ثانیه انجام میدهد را سرعت آن معرفی میکنند و با واحد هرتز (Hertz) مگاهرتز (MHz برای پردازندههای قدیمیتر) یا گیگاهرتز (GHz) بیان میشود.
در فرکانس یکسان، پردازندهای با IPC بالاتر میتواند پردازش بیشتری انجام دهد و قدرتمندتر است
بهطور دقیقتر فرکانس به تعداد چرخههای محاسباتی اشاره دارد که هستههای پردازنده در هر ثانیه انجام میدهند و با واحد گیگاهرتز (GHz-میلیاردها چرخه در ثانیه) اندازهگیری میشود.
برای مثال، پردازندهای با فرکانس ۳٫۲ گیگاهرتز، ۳٫۲ میلیارد سیکل عملیات در ثانیه اجرا میکند. در اوایل دههی ۱۹۷۰، پردازندهها از فرکانس یک مگاهرتز (MHz) یا اجرای یک میلیون چرخه در ثانیه عبور کردند و در حدود سال ۲۰۰۰ واحد اندازهگیری گیگاهرتز (GHz) برابر با یک میلیارد هرتز برای اندازهگیری فرکانس آنها انتخاب شد.
گاهی اوقات، چندین دستورالعمل در یک چرخه تکمیل میشوند و در برخی موارد نیز، یک دستورالعمل ممکن است در چندین چرخه پردازش شود. ازآنجاکه معماریها و طراحیهای مختلف هر پردازنده، دستورالعملها را به شکلی متفاوت انجام میدهند، توان پردازشی هستههای آنها بسته به معماری میتواند متفاوت باشد. در واقع بدون دانستن تعداد دستورالعملهای پردازششده در هر چرخه (IPC) مقایسهی فرکانس دو پردازنده کاملاً بیمعنی است.
فرض کنید دو پردازنده داریم؛ یکی توسط شرکت A و دیگری توسط شرکت B تولید شده است و فرکانس هر دوی آنها یکسان و برابر با یک گیگاهرتز است. اگر هیچ اطلاعات دیگری دراختیار نداشته باشیم، ممکن است این دو پردازنده را از نظر عملکرد یکسان در نظر بگیریم؛ اما اگر پردازندهی شرکت A در هر چرخه یک دستورالعمل را تکمیل کند و پردازندهی شرکت B نیز بتواند در هر چرخه دو دستورالعمل را کامل کند. بدیهی است که پردزاندهی دوم، عملکردی سریعتر از پردازندهی A خواهد داشت.
به عبارت سادهتر، در فرکانس یکسان، پردازندهای با IPC بالاتر میتواند پردازش بیشتری انجام دهد و قدرتمندتر است. پس برای ارزیابی صحیح عملکرد هر پردازنده، علاوه بر فرکانس به تعداد دستورالعملهایی که در هر چرخه انجام میدهد هم نیاز خواهید داشت.
بنابراین بهتر است فرکانس هر پردازنده را با فرکانس پردازندههای سریها و نسلهای مشابه با همان پردازنده مقایسه کرد. این احتمال وجود دارد که پردازندهای مربوط به پنج سال پیش با فرکانسی بالا، از پردازندهای جدید با فرکانسی پایینتر بهتر عمل کند، چراکه معماریهای جدیدتر به شکلی کارآمدتر با دستورالعملها برخورد میکنند.
پردازندههای سری X اینتل ممکن است از پردازندههای سری K با فرکانس بالاتر بهتر عمل کند، زیرا وظایف را بین هستههای بیشتری تقسیم میکنند و حافظهی کش بزرگتری دارند؛ از سوی دیگر در همان نسل از پردازندهها، پردازندهای با فرکانس بالاتر معمولاً در بسیاری از برنامهها بهتر از پردازندههایی با فرکانس پایینتر عمل میکند. به همین دلیل است که در مقایسهی پردازندهها، شرکت تولیدکننده و نسل پردازنده از اهمیت بالایی برخوردار است.
فرکانس پایه و فرکانس بوست: فرکانس پایهی هر پردازنده، حداقل فرکانسی است که پردازنده در زمان بیکاری یا هنگام انجام پردازشهای سبک با آن کار میکند؛ درمقابل، فرکانس بوست معیاری است که نشان میدهد عملکرد پردازنده هنگام انجام محاسبات سنگینتر یا فرآیندهای سختتر، چقدر میتواند افزایش پیدا کند. فرکانسهای بوست بهطور خودکار اعمال میشوند و با گرمای حاصل از پردازشهای سنگین، قبل از اینکه پردازنده به سطوح ناامنی در انجام محاسبات برسد، محدود میشوند.
در واقع نمیتوان بدون محدودیتهای فیزیکی (عمدتا برق و گرما) فرکانس پردازندهای را افزایش داد و زمانی که فرکانس به حدود ۳ گیگاهرتز میرسد، مصرف برق بهطور نامتناسبی افزایش پیدا میکند.
حافظه کش
یکی دیگر از عواملی که بر عملکرد پردازنده تأثیر میگذارد، ظرفیت حافظهی کش یا رم پردازنده است؛ این نوع رم به دلیل قرار گرفتن در نزدیکی پردازنده بسیار سریعتر از رم اصلی سیستم عمل کرده و پردازنده از آن برای ذخیرهی موقت دادهها و کاهش زمان انتقال دادهها به/از حافظهی سیستم استفاده میکند.
بنابراین، کش نیز میتواند تأثیر زیادی بر عملکرد پردازنده داشته باشد؛ هرچه ظرفیت رم پردازنده بیشتر باشد، عملکرد بهتری خواهد داشت. خوشبختانه امروزه تمام کاربران میتوانند به ابزارهای بنچمارک دسترسی داشته باشند و فارغ از ادعاهای تولیدکنندهها، خودشان هم عملکرد پردازندهها را ارزیابی کنند.
حافظهی کش میتواند چند لایهای باشد و با حرف L نشان داده میشود. معمولاً پردازندهها تا سه یا چهار لایه حافظهی کش دارند که لایهی اول (L1) نسبت به لایهی دوم (L2)، لایهی دوم نسبت به لایهی سوم (L3) و لایهی سوم نیز نسبت به لایهی چهارم (L4) سرعت بیشتر و حافظهی کمتری دارد. حافظهی کش معمولاً تا چند ده مگابایت فضا برای ذخیره کردن ارائه میدهد و هرچه این فضا بیشتر باشد، پردازنده با قیمت بالاتری به فروش خواهد رسید.
حافظهی کش وظیفهی حفظ داده را بر عهده دارد؛ این حافظه از رم (RAM) کامپیوتر سرعت بالاتری دارد و به همین دلیل تأخیر در اجرای دستورها را کاهش میدهد؛ درواقع پردازنده برای دسترسی به دادهای دلخواه، ابتدا حافظهی کش را چک میکند و در صورتی که دادهی مورد نظر در آن حافظه وجود نداشته باشد به سراغ رم میرود.
- حافظهی کش سطح یک (L1) که اولین حافظهی کش یا کش داخلی نام دارد؛ نزدیکترین حافظه به پردازنده است و سرعت بالا و حجم کمتری نسبت به دیگر سطوح حافظهی کش دارد، این حافظه، مهمترین دادههای مورد نیاز برای پردازش را در خود ذخیره میکند؛ چراکه پردازنده هنگام پردازش یک دستورالعمل، اول از همه به سراغ حافظهی کش سطح یک میرود.
- حافظهی کش سطح دو (L2) که به آن حافظهی کش خارجی میگویند نسبت به L1 سرعت کمتر و حجم بیشتری دارد و با توجه به ساختار پردازنده ممکن است بهصورت مشترک یا مجزا استفاده شود. L2 برخلاف L1 در رایانههای قدیمی روی مادربرد قرار میگرفت ولی امروزه در پردازندههای جدید این حافظه روی خود پردازنده قرار میگیرد و نسبت به لایهی بعدی کش، یعنی L3، تأخیر کمتری دارد.
- حافظهی کش L3 حافظهای است که در پردازنده بین تمام هستهها مشترک است و از لحاظ ظرفیت نسبت به حافظهی کش L1 یا L2 حجم بیشتری داشته، اما از نظر سرعت از آن دو کندتر است.
- حافظهی کش L4 هم مانند L3، نسبت به L1 یا L2 حجم بیشتر و سرعت کمتری دارد؛ L3 یا L4 معمولاً بهصورت اشتراکی مورداستفاده قرار میگیرند.
هسته های پردازشی
هسته، واحد پردازشی پردازنده است که میتواند بهطور مستقل تمام وظایف محاسباتی را انجام داده یا پردازش کند. از این منظر، میتوان هسته را پردازندهای کوچک در کل واحد پردازش مرکزی در نظر گرفت. این بخش از پردازنده از همان واحدهایی عملیاتی محاسبه و عملیات منطقی (ALU)، کنترل حافظه (CU) و ثبات (Register) تشکیل شده است که فرایند پردازش دستورها را با چرخهی واکشی-اجرا انجام میدهند.
در ابتدا پردازندهها تنها با یک هسته کار میکردند، اما امروزه پردازندهها عمدتاً چند هستهای هستند و حداقل دو یا چند هسته روی مدار مجتمع، دو یا چند فرایند را بهطور همزمان پردازش میکنند. توجه داشته باشید که هر هسته تنها میتواند در هر زمان یک دستور را اجرا کند. پردازندههای مجهز به چند هسته، مجموعه دستورها یا برنامهها را با استفاده از پردازش موازی (Parallel Computing) سریعتر از قبل اجرا میکنند. البته داشتن هستههای بیشتر به معنای افزایش کارایی کلی پردازنده نیست. چون بسیاری از برنامهها هنوز از پردازش موازی استفاده نمیکنند.
- پردازندههای تک هستهای (Single-core): قدیمیترین نوع پردازنده، پردازندهی تکهستهای است که میتواند در هر زمان، تنها یک فرمان را اجرا کند و برای انجام چندین کار بهطور همزمان کارآمد نیست. در این پردازنده شروع فرایندی مستلزم پایان عملیات قبلی است و در صورت اجرای بیش از یک برنامه، عملکرد پردازنده به شکل قابلتوجهی کاهش پیدا میکند. عملکرد یک پردازندهی تک هستهای با اندازهگیری توان آن و براساس فرکانس محاسبه میشود.
- پردازندههای دو هستهای (Dual-core): پردازندهی دو هستهای از دو هستهی قوی تشکیل شده و عملکردی مشابه دو پردازندهی تک هستهای دارد. تفاوت این پردازنده با پردازندهی تک هستهای در این است که در آرایهای متغیر از جریانهای داده به صورت رفت و برگشتی سوئیچ میکند و اگر رشته یا رشتههای بیشتری اجرا شود، پردازنده دو هستهای میتواند چندین وظیفه پردازش را به شکل بهینهتری مدیریت کند.
- پردازندههای چهار هستهای (Quad-core): پردازندهی چهار هستهای، مدل بهیینهشدهای از پردازندهی چند هستهای است که حجم کار را بین هستهها تقسیم کرده و با بهرهمندی از چهار هسته، قابلیت چندوظیفگی موثرتری را فراهم میکند؛ از این رو برای گیمرها و کاربران حرفهای مناسبتر است.
- پردازندههای شش هستهای (Hexa-Core): یکی دیگر از انواع پردازندههای چند هستهای، پردازندهی شش هستهای است که پردازشها را نسبت به انواع چهار هستهای و دو هستهای با سرعت بالاتری انجام میدهد. برای مثال پردازندههای Core i7 اینتل شش هسته دارند و برای کاربری روزمره مناسب هستند.
- پردازندههای هشت هستهای (Octa-Core): پردازندههای هشت هستهای با هشت هستهی مستقل توسعه یافتهاند و نسبت به انواع قبلی کارایی بهتری ارائه میدهند؛ این پردازندهها شامل مجموعهای دوگانه از پردازندههای چهار هستهای هستند که فعالیتهای مختلفی را بین انواع مختلف تقسیم میکنند. به این معنی که در بسیاری از مواقع، برای پردازش از حداقل هستههای مورد نیاز استفاده شده و اگر اضطرار یا نیازی وجود داشته باشد، چهار هستهی دیگر نیز در انجام محاسبات به کار گرفته میشوند.
- پردازندههای ده هستهای (Deca-Core): پردازندههای ده هستهای از ده سیستم مستقل تشکیل شدهاند که در اجرا و مدیریت پردازشها نسبت به سایر پردازندهها، قدرتمندتر عمل میکنند. این پردازندهها از انواع دیگر سریعتر هستند، قابلیت چندوظیفگی را به بهترین شکل ممکن انجام میدهند و روزبهروز هم تعداد بیشتری از آنها به بازار عرضه میشوند.
تفاوت بین پردازش تک هستهای و چند هستهای
بهطور کلی میتوان گفت که انتخاب بین پردازندهای تکهستهای و قدرتمند و پردازندهای چند هستهای با قدرتی معمولی، تنها و تنها به نحوهی کاربری بستگی دارد و نسخهی از پیش نوشتهشدهای برای همه وجود ندارد. عملکرد قدرتمند پردازندههای تک هستهای برای استفاده در برنامههای نرمافزاری که به چندین هسته احتیاجی ندارند یا نمیتوانند از چند هسته استفاده کنند، اهمیت دارد. داشتن هستههای بیشتر لزوماً به معنای سرعت بیشتر نیست، اما اگر برنامهای برای استفاده از چند هسته بهینهسازی شده باشد، با هستههای بیشتر سریعتر اجرا میشود. بهطور کلی، اگر از برنامههایی که برای پردازش تک هستهای بهینهسازی شدهاند، بیشتر استفاده میکنید، احتمالاً پردازندهای با تعداد هستههای زیاد منفعتی برایتان نخواهد داشت.
فرض کنید میخواهید ۲ نفر را از نقطه A به B ببرید، قطعاً یک لامبورگینی این کار را به خوبی تمام انجام میدهد، اما اگر بخواهید ۵۰ نفر را جابهجا کنید، اتوبوس میتواند راهحل سریعتری از چندین بار رفتوآمد لامبورگینی باشد. همین امر در مورد پردازش تکهستهای درمقابل چندهستهای نیز صدق میکند.
در سالهای اخیر و با پیشرفت تکنولوژی، هستههای پردازندهها بهطور فزایندهای کوچکتر شدهاند و درنتیجه میتوان هستههای بیشتری را روی یک تراشه پردازنده قرار داد و سیستمعامل و نرمافزار نیز باید برای استفاده از تعداد هستههای بیشتر بهینهسازی شوند تا دستورالعملها را تقسیم کرده و بهطور همزمان به هستههای مختلف تخصیص دهند. اگر این کار به درستی انجام شود، عملکردی چشمگیر را شاهد خواهیم بود.
در پردازندههای چند هستهای سنتی، تمام هستهها یکسان پیادهسازی میشدند و امتیاز عملکرد و قدرت یکسانی داشتند. مشکل این پردازندهها، این بود که وقتی پردازنده در حالت بیکار است یا پردازشی سبک انجام میدهد، امکان پایینتر آوردن مصرف انرژی از یک حدی بیشتر وجود ندارد. این مسئله در شرایط دسترسی نامحدود به منابع برق، دغدغه محسوب نمیشود، اما در شرایطی که سیستم برای پردازش به باتری یا منبع برق محدود متکی است، میتواند مشکلساز باشد.
اینجا بود که مفهوم طراحی نامتقارن پردازندهها شکل گرفت. اینتل برای گوشیهای هوشمند به سرعت راهحلی اتخاذ کرد که برخی هستهها پرقدرتتر باشند و عملکردی باکیفیتتری ارائه دهند و تعدادی هسته نیز به صورت کممصرف پیادهسازی شوند؛ این هستهها تنها برای اجرای وظایف پسزمینه یا اجرای برنامههای کاربردی اساسی مانند خواندن و نوشتن ایمیل یا وبگردی خوب عمل میکنند.
هستههای پرقدرت بهطور خودکار زمانی که ویدئو گیمی را راهاندازی میکنید یا زمانی که برنامهای سنگین برای انجام یک کار خاص به عملکرد بهتری نیاز دارد، وارد عمل میشوند.
با اینکه ترکیب هستههای پرقدرت و کممصرف در پردازندهها، ایدهی جدیدی نیست، اما به کار بردن این ترکیب در کامپیوترها، حداقل تا زمان عرضهی پردازندههای نسل دوازدهم آلدر لیک توسط اینتل، آنچنان رایج نبود.
در هر مدل از پردازندههای نسل دوازدهم اینتل، هستههای E (کممصرف) و هستههای P (قدرتمند) وجود دارند؛ نسبت بین این دو نوع هسته میتواند متفاوت باشد، اما برای مثال در پردازندههای سری Core i9 آلدر لیک، هشت هسته برای انجام پردازشهای سنگین و هشت هسته برای انجام پردازشهای سبک در نظر گفته شده است. سریهای i7 و i5 به ترتیب دارای طراحی ۸ / ۴ و ۶ / ۴ برای هستههای P و E هستند.
مزایای زیادی برای داشتن رویکرد معماری ترکیبی در هستههای پردازندهها وجود دارد و کاربران لپتاپها در این میان بیشترین سود را خواهند برد، چراکه اکثر کارهای روزمره مانند وبگردی و… به عملکرد فشردهای نیاز ندارند. اگر تنها هستههای کممصرف درگیر باشند، کامپیوتر یا لپتاپ داغ نمیکند و باتری آن مدت زمان بیشتری دوام میآورد.
تولید هستههای کممصرف ساده و کمهزینه است، بنابراین استفاده از آنها برای تقویت و آزادسازی هستههای قدرتمند و پیشرفته ایدهای هوشمندانه به نظر میرسد
حتی اگر سیستم خود را به منبع برقی متصل کرده باشید هم، وجود هستههای کممصرف کارآمد خواهد بود. برای مثال اگر مشغول گیمینگ باشید و این فرایند به تمام قدرت پردازنده نیاز داشته باشد، هستههای قدرتمند میتوانند این نیاز را برطرف کنند و هستههای کممصرف نیز همزمان مسئولیت اجرای فرایندهای پسزمینه یا برنامههایی مانند Skype و… را عهدهدار میشوند.
حداقل در مورد پردازندههای آلدر لیک اینتل، هستههای P و E به گونهای طراحی شدهاند که با یکدیگر تداخل نداشته باشند تا هر کدام بتوانند به صورت مستقل وظایفی را انجام دهند. متأسفانه، ازآنجاکه ترکیب پردازندههای مختلف، مفهومی نسبتاً جدید برای پردازندههای x86 محسوب میشود، این تغییر اساسی در معماری x86 با مشکلاتی همراه است.
توسعهدهندگان نرمافزارها قبل از مطرح شدن ایدهی هستههای هیبریدی (یا ترکیب هستههای قدرتمند یا P و کممصرف یا E) دلیلی برای توسعهی محصولات خود به شکل سازگار با این معماری نمیدیدند، بنابراین نرمافزار آنها از تفاوت بین هستههای کممصرف و پرمصرف آگاه نبوده و همین امر باعث میشود که در برخی موارد گزارشهایی مبنی بر خرابی یا رفتار عجیب برخی نرمافزارها (مانند Denuvo) مطرح شود.
رشته های پردازشی
رشتههای پردازشی یا Thread به رشتههایی از دستورالعملها گفته میشود که برای پردازش به پردازنده ارسال میشوند؛ هر پردازنده در حالت عادی قابلیت پردازش یک دستورالعمل را دارد که به آن دستورالعمل اصلی میگویند و در صورتی که دو دستورالعمل به پردازنده ارسال شود، دستورالعمل دوم بعد از اجرای دستورالعمل اول اجرا میشود. این روند میتواند به کند شدن سرعت و کارایی پردازنده منجر شود. در همین راستا تولیدکنندگان پردازندهها ، هر هستهی فیزیکی را به دو هستهی مجازی (Thread) تقسیمبندی میکنند که هر یک از این هستهها امکان اجرای یکرشته پردازش مجزا را دارد و هر هسته با داشتن دو ترد، میتواند دو رشتهی پردازشی را بهطور همزمان اجرا کند.
پردازش فعال درمقابل پردازش غیرفعال
پردازش فعال به فرایندی اطلاق میشود که کاربر برای تکمیل یک دستورالعمل نیاز دارد تا دادهها را به صورت دستی تنظیم کند؛ از نمونههای رایج پردازشهای فعال میتوان به طراحی حرکت، مدلسازی سهبعدی، ویرایش ویدئو یا بازی اشاره کرد. در این نوع از پردازش، عملکرد تکهستهای و سرعت بالای هسته اهمیت زیادی دارد، بنابراین در اجرای چنین پردازشهایی برای بهرهمدی از عملکردی روان به تعداد هستههای کمتر، اما قدرتمندتر نیاز داریم.
از سوی دیگر، پردازش غیرفعال، دستورالعملهایی هستند که معمولاً بهراحتی میتوان آنها را به صورت موازی اجرا و به حال خود رها کرد، مانند رندرهای سهبعدی و ویدئوها؛ چنین پردازشهایی به پردازندههایی با تعداد هستههای زیاد و فرکانس پایهی بالاتری، مانند پردازندههای سری Threadripper ایامدی نیاز دارند.
یکی از عواملی تأثیرگذار در انجام پردازشهای غیرفعال، تعداد بالای رشتهها و قابلیت بهکارگیری آنها است. به زبان ساده، رشته مجموعهای از دادهها است که برای پردازش از یک برنامه کاربردی به پردازنده ارسال میشود و امکان انجام چندین کار همزمان را به شکلی کارآمد و سریع برای پردازنده فراهم میکند؛ درواقع به دلیل وجود رشتهها در سیستم است که میتوان همزمان با وبگردی به موسیقی هم گوش دهید.
رشتهها اجزای فیزیکی پردازنده نیستند، بلکه میزان پردازشهایی را که هستههای پردازنده میتوانند انجام دهند، نشان میدهند و برای اجرای چندین دستورالعمل بسیار فشرده بهطور همزمان، به پردازندهای با تعداد زیادی رشته نیاز خواهید داشت.
تعداد رشتههای هر پردازنده، با تعداد هستههای آن ارتباط مستقیمی دارد؛ در واقع هر هسته معمولاً میتواند دو رشته داشته باشد و همه پردازندهها رشتههای فعالی دارند که برای انجام هر فرایند، حداقل یک رشته را به آن اختصاص میدهند.
هایپرتردینگ یا SMT چیست؟
هایپرتردینگ (Hyperthreading) در پردازندههای اینتل و مولتیتردینگ همزمان (SMT) در پردازندههای AMD مفهومهایی برای نشان دادن فرایند تقسیم هستههای فیزیکی به هستههای مجازی هستند؛ در واقع این دو قابلیت، راهکاری برای زمانبندی و اجرای دستورالعملهایی است که بدون وقفه به پردازنده ارسال میشوند.
امروزه اکثر پردازندهها به قابلیت هایپرتردینگ یا SMT مجهز هستند و دو رشته را در هر هسته اجرا میکنند. بااینحال، برخی از پردازندههای پایینرده، مانند سری Celeron اینتل یا سری Ryzen 3 ایامدی از این قابلیت پشتیبانی نمیکنند و تنها یک رشته در هر هسته دارند. حتی برخی از پردازندههای بالاهردهی اینتل نیز به دلایل مختلف مانند تقسیمبندی بازار، با هایپرتردینگ غیرفعال عرضه میشوند، بنابراین بهطور کلی بهتر است قبل از خرید هر پردازنده، برای اطلاع از این موضوع، حتماً بخش توضیحات هستهها و رشتههای (Cores & Threads) آن را بررسی کنید.
قابلیت هایپرتردینگ یا مولتیتردینگ همزمان به برنامهریزی مؤثرتر برای اجرای دستورالعملها کمک میکنند و بخشهایی از هسته را به کار میگیرند که در لحظه غیرفعال هستند. در بهترین حالت، رشتهها در مقایسه با هستههای فیزیکی حدود ۵۰ درصد عملکرد بیشتری ارائه میدهند.
بهطور کلی، اگر در طول روز تنها پردازشهای فعالی مانند مدلسازی سهبعدی را اجرا میکنید، به احتمال زیاد از تمام هستههای پردازندهی خود استفاده نخواهید کرد؛ چراکه این نوع پردازش معمولاً فقط روی یک یا دو هسته اجرا میشود، اما برای انجام پردازشهایی مانند رندرینگ که به تمام توان هستههای پردازنده و رشتههای موجود نیاز دارد، بهرهمندی از قابلیت هایپرتردینگ یا SMT میتواند تفاوت قابلتوجهی در عملکرد ایجاد کند.
پردازنده در گیمینگ
تا قبل از عرضهی پردازندههای چندهستهای، بازیهای کامپیوتری برای سیستمهای تکهستهای توسعه داده میشدند، اما بعد از معرفی اولین پردازندهی دوهستهای در سال ۲۰۰۵ توسط AMD و عرضهی پردازندههای چهار، شش و هشت هستهای بعد از آن، دیگر محدودیتی برای کمک گرفتن از هستههای بیشتر وجود نداشت؛ چراکه قابلیت اجرای چندین عملیات مختلف به صورت همزمان برای پردازندهها فراهم شده بود.
هر گیمر برای داشتن تجربهای رضایتبخش از سیستم گیمینگ، باید پردازنده و پردازندهی گرافیکی (پردازندهی گرافیکی و کارکرد آن را در مقالهای جداگانه به صورت کامل بررسی خواهیم کرد) سیستم خود را به شکلی متعادل انتخاب کند. اگر پردازنده عملکرد ضعیف یا کُندی داشته باشد و نتواند دستورها را بهاندازهی کافی سریع اجرا کند، گرافیک سیستم نیز نمیتواند از حداکثر توان خود بهره ببرد؛ البته برعکس این قضیه هم صادق است. در چنین شرایطی به اصطلاح میگوییم که گرافیک باتِلنِک (Bottleneck) شده است.
Bottleneck چیست؟
در زمینهی کامپیوترها، باتلنک (یا گلوگاه) به محدود شدن عملکرد مؤلفهای درنتیجهی تفاوت در حداکثر قابلیتهای دو مؤلفهی سختافزاری گفته میشود. به زبان ساده اگر واحد گرافیکی دستورالعملها را سریعتر از توان پردازنده برای ارسال آنها، دریافت کند، این واحد تا زمان آماده شدن مجموعهی بعدی دستورالعملها، بیکار میماند و فریمهای کمتری را در ثانیه رندر میکند؛ در این شرایط سطح عملکرد گرافیک به دلیل محدودیتهای پردازنده محدود میشود.
همین امر ممکن است در جهت مخالف نیز اتفاق بیفتد. اگر پردازندهای قدرتمند دستورها را سریعتر از توان دریافتی واحد گرافیک به آن ارسال کند، تواناییهای پردازنده به دلیل عملکرد ضعیف گرافیک محدود میشود.
در واقع سیستمی که از پردازنده و گرافیک متناسب و همرده تشکیل شده باشد، عملکرد بهتر و روانتری را دراختیار کاربر قرار میدهد. به چنین سیستمی، سیستم متعادل گفته میشود. بهطور کلی سیستم متعادل، سیستمی است که سختافزار در آن برای پردازشهای موردنظر و دلخواه کاربر باعث ایجاد باتلنک (یا گلوگاهها) نشود و بدون استفاده نامتناسب (بیش از حد زیاد یا کم) از اجزای سیستم، تجربهی کاربری بهتری ارائه دهد.
بهتر است برای راهاندازی سیستمی متعادل به چند نکته توجه داشته باشید:
- تنها با خرید گرانترین پردازنده و گرافیک موجود در بازار، نمیتوانید سیستمی متعادل برای تجربهی گیمینگ ایدئال راهاندازی کنید.
- باتلنک لزوماً بهخاطر کیفیت یا قدیمی بودن اجزا، ایجاد نمیشود و مستقیماً به عملکرد سختافزارهای سیستم مرتبط است.
- باتلنک شدن گرافیک، مختص سیستمهای پیشرفته نیست و تعادل در سیستمهایی که سختافزار پایینرده دارند نیز از اهمیت بسیار بالایی برخوردار است.
- ایجاد شدن باتلنکها منحصر به پردازنده و گرافیک نیست، اما تعامل بین این دو مؤلفه تا حد زیادی از بروز این معضل جلوگیری میکند.
راهاندازی سیستمی متعادل
در کاربری گیمینگ یا پردازشهای گرافیکی، وقتی گرافیکی از حداکثر توان خود بهره نبرد، تأثیر قدرت پردازنده بر ارتقای کیفیت تجربهی گیمینگ کاربر در صورتی محسوس خواهد بود که هماهنگی بالایی بین واحد گرافیکی و پردازنده وجود داشته باشد؛ علاوهبراین، نوع و مدل بازی نیز دو عامل مهم در انتخاب سختافزار هستند. درحالحاضر، هنوز میتوان از پردازندههای چهار هستهای برای اجرای بازیهای مختلف استفاده کرد، اما قطعاً پردازندههای شش هستهای یا با تعداد هستههای بیشتر، عملکردی روانتر را برای شما به ارمغان میآورند. امروزه پردازندههای چندهستهای برای بازیهایی مانند شوترهای اول شخص (FPS) یا بازیهای چند نفرهی آنلاین، از ملزومات هر سیستم گیمینگی به حساب میآیند.
نظرات