مغالطه: پایپلاین عمیقتر همیشه یعنی کارایی بهتر
وسوسهانگیز است فرض کنیم افزودن مراحل بیشتر به پایپلاین همیشه کارایی را بهبود میبخشد، چون هر مرحله سادهتر میشود و ساعت میتواند سریعتر اجرا شود. در واقعیت، همانطور که پیشتر هنگام مقایسه ARM Cortex-A53 و Intel Core i7 بحث شد، یک پایپلاین عمیقتر جریمه شاخه را در یک پیشبینی اشتباه، که پیشتر درباره خطرهای کنترلی بحث شد، افزایش میدهد، و مصرف توان را افزایش میدهد، که به دیوار توان که پیشتر در این مجموعه پوشش داده شد مرتبط است. عمق پایپلاین یک مبادله است، نه یک برد ساده و مستقیم.
مغالطه: پایپلاینینگ زمان اجرای یک دستور منفرد را کاهش میدهد
همانطور که پیشتر در این مجموعه تأکید شد، پایپلاینینگ توان عملیاتی را بهبود میبخشد، نه تأخیر هیچ دستور منفردی. یک دستور منفرد همچنان به همان تعداد مرحله، و اغلب کمی زمان کلی بیشتری، برای تکمیل نیاز دارد؛ آنچه تغییر میکند این است که چند دستور میتوانند بهطور همزمان در حال پیشرفت باشند.
مغالطه: اسلاتهای صدور بیشتر همیشه به بهبود متناسب تبدیل میشوند
همانطور که پیشتر درباره موازیسازی سطح دستور بحث شد، دو برابر کردن تعداد اسلاتهای صدور، کارایی واقعی برنامه را دو برابر نمیکند مگر اینکه برنامه بهاندازه کافی دستور مستقل برای پر کردن آن اسلاتها داشته باشد. برنامههایی که با زنجیرههای وابستگی طولانی سلطه یافتهاند، بهره کمی از عرض صدور اضافی میبینند، صرفنظر از اینکه چقدر سختافزار تکرار شود.
دام: فرض اینکه همه خطرها هزینه یکسانی دارند
هر خطری همان تعداد سیکل هزینه ندارد. همانطور که پیشتر پوشش داده شد، بیشتر خطرهای داده با forwarding و بدون هیچ هزینهای حل میشوند، در حالی که یک خطر load-use بهطور خاص یک سیکل توقف هزینه دارد، و هزینه یک خطر کنترلی مستقیماً به این بستگی دارد که نتیجه شاخه چقدر زود در پایپلاین قابلحل باشد. رفتار با همه خطرها بهعنوان بهطور یکسان گران، به استدلال نادرست درباره کارایی منجر میشود.
جمعبندی فصل: از یک Datapath ساده تا یک هسته سوپراسکالر مدرن
این فصل یک پردازنده را از پایه ساخت: با شروع از قراردادهای پایه طراحی منطقی، ساخت یک datapath تکسیکلی و منطق کنترلی آن، سپس تبدیل آن datapath به یک طرح پایپلاینشده برای همپوشانی اجرای دستور. در طول مسیر، این فصل به پیچیدگیهای واقعی که همپوشانی معرفی میکند پرداخت — خطرهای داده حلشده از طریق forwarding و stalling، خطرهای کنترلی مدیریتشده از طریق پیشبینی، و استثناهای مدیریتشده با امنیت بدون خراب کردن وضعیت برنامه — پیش از اینکه در نهایت این ایدهها را به موازیسازی سطح دستور گسترش دهد و مقایسه کند پردازندههای تجاری واقعی چگونه آنها را متفاوت بر اساس اهداف طراحی خود اعمال میکنند.
هر مفهومی در این فصل برای پاسخ به یک پرسش مرکزی وجود دارد: چگونه یک مجموعه ثابت از دستورات ساده، که در فصل قبل تعریف شد، میتواند تا حد ممکن سریع و کارآمد از نظر فیزیکی اجرا شود بدون تولید نتایج نادرست.