
زیرساخت ارتباطات و فناوری اطلاعات
تبدیل یک برنامه C به چیزی که سیستمعامل واقعاً بتواند اجرا کند شامل چندین مرحله ترجمه مجزاست، که هرکدام یک فایل میانی متفاوت تولید میکنند. این مقاله کل این خط لوله را از کامپایلر تا loader مرور میکند، سپس مفاهیم این فصل را روی یک مثال کامل و واقعی بهکار میبرد: ترجمه گامبهگام یک روال مرتبسازی C به اسمبلی RISC-V.
در C، آرایهها و اشارهگرها اغلب قابلتعویض بهنظر میرسند، و بسیاری از برنامهنویسان با آنها بهعنوان یک چیز واحد رفتار میکنند. با این حال در سطح سختافزار، آنها به توالیهای دستوری قابلتوجهی متفاوت با ویژگیهای کارایی متفاوت کامپایل میشوند. این مقاله این دو رویکرد را با استفاده از اسمبلی RISC-V مقایسه میکند تا دقیقاً نشان دهد چرا کد مبتنی بر اشارهگر اغلب سریعتر است.
پس از پوشش عملیاتها، عملوندها، کدگذاری و کنترل جریان، ارزش دارد لحظهای مکث کنیم تا چند تصور غلط پایدار درباره مجموعه دستورات که حتی برنامهنویسان باتجربه هم گاهی به آنها دارند را اصلاح کنیم. این مقاله فصل مجموعه دستورات را با پرداختن مستقیم به این مغالطات به پایان میرساند و خلاصه میکند چرا درک دستورات ماشین فراتر از کنجکاوی آکادمیک اهمیت دارد.
سختافزار چگونه جمع و تفریق انجام میدهد و سرریز را تشخیص میدهد
ضرب بسیار سختافزارطلبتر از جمع است، چون اساساً شامل جمع تکراری و شیفت است. این مقاله الگوریتم مفهومی که سختافزار برای ضرب اعداد باینری استفاده میکند را مرور میکند، توضیح میدهد چرا نتیجه به دو برابر عرض بیتی ورودیها نیاز دارد، و نحوه تفاوت ضرب علامتدار با حالت بدونعلامت را پوشش میدهد.
تقسیم سختافزارطلبترین عملیات محاسباتی پایه است، که شامل تفریق و مقایسه تکراری است نه یک مدار تکمرحلهای. این مقاله الگوریتم مفهومی تقسیم طولانی که سختافزار دنبال میکند را توضیح میدهد، خارجقسمت و باقیمانده چگونه با هم تولید میشوند را شرح میدهد، و موارد خاصی مانند تقسیم بر صفر که سختافزار باید صراحتاً مدیریت کند را پوشش میدهد.
اعداد صحیح نمیتوانند مقادیر اعشاری یا بازه عظیم بزرگیهایی که محاسبات علمی و مالی نیاز دارند را نمایش دهند. این مقاله توضیح میدهد اعداد ممیز شناور چگونه یک علامت، توان و کسر را در تعداد ثابتی بیت مطابق با استاندارد IEEE 754 کدگذاری میکنند، و مبادلات دقت و مسائل گرد کردن که با این روش نمایش اعداد حقیقی همراه است را پوشش میدهد.
پردازندههای امروزی اغلب نیاز دارند یک عملیات ساده یکسان را بهطور همزمان روی دادههای کوچک زیادی اعمال کنند، مانند تنظیم روشنایی میلیونها پیکسل یک تصویر. این مقاله موازیسازی زیرکلمهای، نحوه تقسیم یک رجیستر پهن به چند لِین کوچکتر که در یک دستور واحد پردازش میشوند، و چگونگی کاربرد این ایده در سختافزار تجاری از طریق افزونههای واقعی مانند SIMD و AVX را توضیح میدهد.
ضرب ماتریس یکی از رایجترین و حساسترین عملیات از نظر کارایی در محاسبات علمی و یادگیری ماشین است. این مقاله نشان میدهد موازیسازی زیرکلمهای چگونه این عملیات را در عمل تسریع میکند، سپس فصل محاسبات را با پرداختن به تصورات غلط رایج درباره محاسبات کامپیوتری و جمعبندی درسهای اصلی از جمع تا ممیز شناور به پایان میرساند.
پیش از آنکه یک پردازنده بتواند ساخته شود، طراحان آن باید روی مجموعهای مشترک از قوانین برای نحوه رفتار مدارهای دیجیتال در طول زمان توافق کنند. این مقاله توضیح میدهد ساخت یک پردازنده واقعاً چه چیزی را شامل میشود، دو دسته گسترده پیادهسازی که در این فصل پوشش داده میشود، و قراردادهای بنیادین طراحی منطقی که رفتار مدار را قابلپیشبینی میکنند.
یک datapath مدار فیزیکی است که داده را در طول اجرای یک دستور از میان پردازنده حرکت میدهد. این مقاله بلوکهای سازنده اساسی سختافزاری مورد نیاز برای fetch، decode، و اجرای دستورات را تجزیه میکند، و نشان میدهد آنها چگونه بههم سیمکشی میشوند تا یک datapath پردازنده کارآمد، هرچند سادهشده، تشکیل دهند.
یک datapath بهتنهایی بدون سیگنالهای کنترلی که به آن بگویند برای هر دستور چه کاری انجام دهد، هیچ کاری نمیکند. این مقاله توضیح میدهد منطق کنترلی چگونه فیلدهای opcode و function یک دستور را میخواند تا سیگنالهای دقیق مورد نیاز برای مسیریابی درست داده را تولید کند، و مرور میکند یک پیادهسازی کامل تکسیکلی چگونه انواع مختلف دستورات را اجرا میکند.