پردازنده چیست؟
برای آشنایی با واحد پردازش مرکزی (CPU)، ابتدا بخشی از کامپیوتر به نام SoC را خیلی مختصر معرفی میکنیم. SoC یا سیستم روی یک تراشه، بخشی از سیستم است که تمام اجزای مورد نیاز کامپیوتر را برای پردازش در تراشهای سیلیکونی ادغام میکند. SoC ماژولهای مختلفی دارد که واحد پردازش مرکزی (به اختصار پردازنده) جزئی اصلی از آن و پردازندهی گرافیکی، حافظه، کنترلر USB، مدارهای مدیریت انرژی و رادیوهای بیسیم (WiFi، 3G، 4G LTE، و غیره) اجزایی متفرقه هستند که ممکن است لزوماً روی SoC وجود نداشته باشند. واحد پردازندهی مرکزی که از این به بعد و در این مقاله آن را به اختصار پردازنده خطاب میکنیم، نمیتواند مستقل از تراشههای دیگر، دستورالعملها را پردازش کند؛ اما ساخت کامپیوتری کامل تنها با SoC امکانپذیر است.
SoC از پردازنده کمی بزرگتر است و در عین حال عملکردهای بسیار بیشتری نیز ارائه میدهد. در واقع با وجود تأکید زیادی که روی فناوری و عملکرد پردازنده میشود، این بخش از کامپیوتر، به خودی خود کامپیوتر نیست و میتوان آن را در نهایت، ماشینحسابی بسیار سریع معرفی کرد که جزئی از سیستم روی تراشه یا SoC است؛ دادهها را از حافظه فراخوانی میکند و سپس نوعی عملیات حسابی (جمع، ضرب) یا منطقی (و، یا، نه) روی آنها انجام میدهد.
عملکرد پردازنده ها
مقایسه CPU اینتل با AMD
- مقایسه سی پی یو های Intel و AMD؛ تمام مشخصات فنی و ویژگی ها
فرایند پردازش دستورها در پردازنده شامل چهار مرحلهی اصلی است که به ترتیب اجرا میشوند:
فراخوانی یا واکشی دستورالعملها از حافظه (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 هستند.
مقالههای مرتبط:
- آرم دربرابر x86؛ آیا اپل میتواند AMD و اینتل را شکست دهد؟
فرض کنید که پردازندههای مختلف، هر کدام مجموعه دستورالعملهای مختلفی داشته باشند، در این صورت برای اجرای برنامههای مختلف، هر کدام باید جداگانه برای هر پردازنده کامپایل شوند. برای مثال برای هر پردازنده از خانوادهی 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 اینتل را میتوان به شرح زیر مقایسه کرد: