تصورات غلط رایج درباره طراحی پردازنده و تصویر کلی فصل چهارم

پس از پوشش datapath ها، پایپ‌لاینینگ، خطرها، و مقایسه‌های پردازنده دنیای واقعی، وقت آن است چند تصور غلط پایدار درباره نحوه رفتار واقعی پردازنده‌ها را اصلاح کنیم. این مقاله به مغالطات رایج درباره پایپ‌لاینینگ و کارایی می‌پردازد، سپس مسیر کامل از datapath های ساده تا اجرای سوپراسکالر که در سراسر این فصل پوشش داده شد را به هم پیوند می‌دهد.

مغالطات طراحی پردازندهتصورات غلط پایپ‌لاینینگجمع‌بندی فصل چهارم

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

مغالطه: پایپ‌لاین عمیق‌تر همیشه یعنی کارایی بهتر

وسوسه‌انگیز است فرض کنیم افزودن مراحل بیشتر به پایپ‌لاین همیشه کارایی را بهبود می‌بخشد، چون هر مرحله ساده‌تر می‌شود و ساعت می‌تواند سریع‌تر اجرا شود. در واقعیت، همان‌طور که پیش‌تر هنگام مقایسه ARM Cortex-A53 و Intel Core i7 بحث شد، یک پایپ‌لاین عمیق‌تر جریمه شاخه را در یک پیش‌بینی اشتباه، که پیش‌تر درباره خطرهای کنترلی بحث شد، افزایش می‌دهد، و مصرف توان را افزایش می‌دهد، که به دیوار توان که پیش‌تر در این مجموعه پوشش داده شد مرتبط است. عمق پایپ‌لاین یک مبادله است، نه یک برد ساده و مستقیم.

مغالطه: پایپ‌لاینینگ زمان اجرای یک دستور منفرد را کاهش می‌دهد

همان‌طور که پیش‌تر در این مجموعه تأکید شد، پایپ‌لاینینگ توان عملیاتی را بهبود می‌بخشد، نه تأخیر هیچ دستور منفردی. یک دستور منفرد همچنان به همان تعداد مرحله، و اغلب کمی زمان کلی بیشتری، برای تکمیل نیاز دارد؛ آنچه تغییر می‌کند این است که چند دستور می‌توانند به‌طور هم‌زمان در حال پیشرفت باشند.

مغالطه: اسلات‌های صدور بیشتر همیشه به بهبود متناسب تبدیل می‌شوند

همان‌طور که پیش‌تر درباره موازی‌سازی سطح دستور بحث شد، دو برابر کردن تعداد اسلات‌های صدور، کارایی واقعی برنامه را دو برابر نمی‌کند مگر اینکه برنامه به‌اندازه کافی دستور مستقل برای پر کردن آن اسلات‌ها داشته باشد. برنامه‌هایی که با زنجیره‌های وابستگی طولانی سلطه یافته‌اند، بهره کمی از عرض صدور اضافی می‌بینند، صرف‌نظر از اینکه چقدر سخت‌افزار تکرار شود.

دام: فرض اینکه همه خطرها هزینه یکسانی دارند

هر خطری همان تعداد سیکل هزینه ندارد. همان‌طور که پیش‌تر پوشش داده شد، بیشتر خطرهای داده با forwarding و بدون هیچ هزینه‌ای حل می‌شوند، در حالی که یک خطر load-use به‌طور خاص یک سیکل توقف هزینه دارد، و هزینه یک خطر کنترلی مستقیماً به این بستگی دارد که نتیجه شاخه چقدر زود در پایپ‌لاین قابل‌حل باشد. رفتار با همه خطرها به‌عنوان به‌طور یکسان گران، به استدلال نادرست درباره کارایی منجر می‌شود.

جمع‌بندی فصل: از یک Datapath ساده تا یک هسته سوپراسکالر مدرن

این فصل یک پردازنده را از پایه ساخت: با شروع از قراردادهای پایه طراحی منطقی، ساخت یک datapath تک‌سیکلی و منطق کنترلی آن، سپس تبدیل آن datapath به یک طرح پایپ‌لاین‌شده برای هم‌پوشانی اجرای دستور. در طول مسیر، این فصل به پیچیدگی‌های واقعی که هم‌پوشانی معرفی می‌کند پرداخت — خطرهای داده حل‌شده از طریق forwarding و stalling، خطرهای کنترلی مدیریت‌شده از طریق پیش‌بینی، و استثناهای مدیریت‌شده با امنیت بدون خراب کردن وضعیت برنامه — پیش از اینکه در نهایت این ایده‌ها را به موازی‌سازی سطح دستور گسترش دهد و مقایسه کند پردازنده‌های تجاری واقعی چگونه آن‌ها را متفاوت بر اساس اهداف طراحی خود اعمال می‌کنند.

هر مفهومی در این فصل برای پاسخ به یک پرسش مرکزی وجود دارد: چگونه یک مجموعه ثابت از دستورات ساده، که در فصل قبل تعریف شد، می‌تواند تا حد ممکن سریع و کارآمد از نظر فیزیکی اجرا شود بدون تولید نتایج نادرست.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

اصول کش: حافظه کوچک و سریع چگونه پیش‌بینی می‌کند بعداً چه چیزی نیاز است

یک کش فقط به این دلیل کار می‌کند که برنامه‌ها تمایل دارند داده یکسان یا نزدیک به هم را به‌طور تکراری دسترسی کنند نه به‌صورت تصادفی. این مقاله اصل محلیت که کش را مؤثر می‌کند را توضیح می‌دهد، یک کش مستقیم‌نگاشت‌شده چگونه داده را با استفاده از یک آدرس مکان‌یابی می‌کند، و در یک hit کش در مقابل یک miss کش چه اتفاقی می‌افتد.

ادامه

سلسله‌مراتب حافظه: چرا کامپیوترها از چند نوع حافظه استفاده می‌کنند

هیچ فناوری حافظه واحدی هم‌زمان سریع، بزرگ، و ارزان نیست. این مقاله مفهوم سلسله‌مراتب حافظه که چند فناوری حافظه مختلف را ترکیب می‌کند تا به سرعت سریع‌ترین آن‌ها با هزینه ارزان‌ترین نزدیک شود را معرفی می‌کند، سپس فناوری‌های اصلی که هر سطح را می‌سازند مرور می‌کند.

ادامه

پایپ‌لاین‌های دنیای واقعی: مقایسه ARM و Intel، و تسریع ضرب ماتریس

مفاهیم نظری پایپ‌لاین در پردازنده‌های تجاری واقعی شکل مشخصی به خود می‌گیرند، که بسته به اهداف طراحی‌شان از نظر عمق پایپ‌لاین و عرض صدور به‌طور گسترده متفاوت‌اند. این مقاله مقایسه می‌کند ARM Cortex-A53 و Intel Core i7 چگونه پایپ‌لاینینگ را متفاوت برای کارایی توان در مقابل کارایی خام پیاده‌سازی می‌کنند، سپس نشان می‌دهد موازی‌سازی سطح دستور چگونه ضرب ماتریس را در عمل تسریع می‌کند.

ادامه

موازی‌سموازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمانازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

موازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

ادامه

یک پردازنده پایپ‌لاین‌شده چگونه استثناها را مدیریت می‌کند

هر دستوری آن‌طور که انتظار می‌رود اجرا نمی‌شود — برخی شرایط خطایی مانند یک opcode نامعتبر یا سرریز محاسباتی را فعال می‌کنند که پردازنده باید با امنیت به آن‌ها پاسخ دهد. این مقاله توضیح می‌دهد استثناها چه هستند، یک پردازنده پایپ‌لاین‌شده چگونه آن‌ها را بدون خراب کردن وضعیت برنامه تشخیص داده و مدیریت می‌کند، و چرا استثناها مشابه خطرهای کنترلی رفتار می‌شوند.

ادامه

خطرهای کنترلی: مدیریت شاخه‌ها در یک پردازنده پایپ‌لاین‌شده

شاخه‌ها یک مسئله منحصربه‌فرد برای پایپ‌لاینینگ ایجاد می‌کنند: پردازنده باید دستور بعدی را پیش از آنکه حتی بداند آیا یک شاخه گرفته خواهد شد یا نه، واکشی کند. این مقاله توضیح می‌دهد خطرهای کنترلی چه هستند، پیش‌بینی شاخه و حل زودهنگام چگونه تلاش می‌کنند هزینه آن‌ها را به حداقل برسانند، و وقتی یک پیش‌بینی نادرست از آب درمی‌آید چه اتفاقی می‌افتد.

ادامه