پیش‌بینی‌کننده پرش

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

در معماری کامپیوتر، پیش بینی پرش یک مدار دیجیتال است که تلاش می‌کند حدس بزند که یک پرش چه راهی (برای مثال ساختار if-then-else) می‌رود قبل از اینکه به طور قطعی شناخته شود. مقصود از پیش بینی پرش بهبود جریان در دستورات خط لوله است. پیش بینی‌های پرش نقش اساسی در دست یابی به کارایی مؤثر بالا در خیلی از معماری‌های ریزپردازنده‌های جدید مثل x86 ایفا می‌کند.

شکل ۱: نمونه‌ای از ۴-مرحله خط لوله است. جعبه‌های رنگی نشان دهنده دستورالعمل‌ها مستقل از یکدیگر

پرش دوراهه معمولاً با دستر پرش شرطی پیاده‌سازی می‌شود. شرط پرش می‌تواند هم "”not-taken باشد و اجرا را با اولین پرش کد بلافاصله بعد از پرش شرطی است ادامه دهد و یا می‌تواند "taken " شود و به مکان متفاوتی در حافظه برنامه پرش کند، جایی که دومین پرش کد ذخیره شده است. به طور دقیق مشخص نیست که آیا پرش شرطی taken یا not-taken خواهد شد تا وقتی که محاسبه شود و پرش شرطی از قسمت اجرا در خط لوله عبور می‌کند. (شکل یک)

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

زمانی که در رابطه با پیش بینی غلط به هدر می‌رود برابر است با تعدادی از مراحل در خط لوله. از مرحلهٔ fetch تا مرحلهٔ اجرا. ریزپردازنده‌های جدید تمایل دارند که خط لوله‌های نسبتاً طولانی داشته باشند به طوری که پیش بینی غلط تأخیر بین ۱۰ تا ۲۰ دوره ساعتی اتفاق می‌افتد. در نتیجه، درست کردن خط لوله طولانی‌تر، نیاز پیش بینی پرش پیشرفته تر را افزایش می‌دهد.

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

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

پیاده‌سازی[ویرایش]

پیش بینی ایستا[ویرایش]

پیش بینی ایستا ساده‌ترین تکنیک پیش بینی است به دلیل اینکه در مورد تاریخ دینامیکی اجرای کد بر روی اطلاعات تکیه نمی‌کند. در عوض پیش بینی می‌کند نتیجه یک پرش را تنها بر پایهٔ دستورالعمل پرش پیش بینی می‌کند.[۱]

پیاده‌سازی‌های اولیه SPARC و MIPS (دوتا از اولین معماری‌های RISC تجاری) از پیش بینی پرش ایستای جهتی استفاده می‌کند: آنها همیشه پیش بینی می‌کنند که پرش شرطی اتفاق نمی‌افتد بنابراین همیشه دستورالعمل سلسه وار بعدی را FETCH می‌کنند. تنها زمانی که پرش ارزیابی می‌شود و یا پیدا می‌شود taken می‌شود، اشاره گر دستورالعمل به غیر سری تنظیم می‌شود.

هردوی CPUها پرش‌ها را در مرحله decode کردن و دارا بودن دستورالعمل fetch تک چرخه‌ای ارزیابی می‌کنند. در نتیجه، هدف دوباره اتفاق افتادن پرش طول کشیدن دوتا چرخه است و ماشین همیشه دستورالعمل را فوراً بعد از هرگونه پرشی fetch می‌کند، هر دوی معماری‌ها تأخیر پرش را به منظور استفاده این دستورات fetch شده تعریف می‌کنند.

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

برخی پردازنده‌ها اجازه می‌دهند که پیش بینی پرش به قرار دادن در کد به منظور ایمکه مشخص شود که آیا پیش بینی ایستا باید taken یا not taken شود اشاره بکند. Pentium 4 تلاش می‌کند پیش بینی پرش اشاره بکند در حالی که این مشخصه در پردازنده‌های اخیر کمیاب است.[۲]

پیش بینی ایستا به عنوان تکنیک رو به عقب در برخی از پردازنده‌ها با پیش بینی پرشی دینامیکی استفاده می‌شود زمانی که هیچ اطلاعاتی از پیش بینی کننده‌های دینامیکی برای استفاده وجود ندارد. هر دوی MPC7450 و Pentium 4 از این تکنیک استفاده می‌کنند.[۳]

پیش بینی کننده خط بعدی[ویرایش]

برخی از پردازنده‌های فوق عددی MIPS , Alpha 21264, هر خطی از دستورالعمل را با یک اشاره کننده به خط بعدی fetch می‌کنند. این پیش بینی کننده خط بعدی، پیش بینی هدف پرش را، همچنین پیش بینی جهت پرش را مدیریت می‌کنند

زمانی که پیش بینی کننده خط بعدی به دستورات گروه ۲و۴ یا ۸ اشاره می‌کند، هدف پرش معمولاً اولین دستورالعمل fetch شده نخواهد بود، و بنابراین دستورالعمل‌های اولیهٔ fetch شده هدر می‌روند. با فرض اینکه برای سادگی یک توزیع یکنواخت از هدف‌های پرشی، به صورت ۰٫۵, ۱٫۵, ۳٫۵ دستورالعمل‌های fetch شده را در نظر نمی‌گیرند

به دلیل اینکه پرش به خودی خود آخرین دستورالعمل در یک گروه موازی نیست، دستورالعمل‌های بعد از پرش taken (یا تأخیر) نادیده گرفته می‌شوند. دوباره با فرض اینکه توزیع یکنواخت دستورالعمل پرشی ۰٫۵٬۱٫۵٬۳٫۵ دستورات fetch شده نادیده گرفته می‌شوند.

دستورات نادیده گرفته شده در یک پرش و خطوط مقصد تقریباً به چرخهٔ fetch کامل اضافه می‌شوند، حتی پیش بینی خط بعدی تک چرخه‌ای.

شمارنده اشباع[ویرایش]

یک شمارنده اشباع دو بیتی یک ماشین ایستا با چهار حالت است:

شکل ۲:

Strongly not taken

Weakly not taken
Weakly taken
Strongly taken

وقتی یک پرشی ارزیابی می‌شود ماشین ایستای متناظر میز به روزرسانی می‌شود. پرش‌ها به صورت not taken decrement به سمت strongly not taken ارزیابی می‌شوند، و پرش‌ها به صورت taken increment به سمت strongly taken ارزیابی می‌شوند. مزیت شمارندهٔ دو بیتی بر طرح وترهٔ یک بیتی پرش شرطی است که دو مرتبه آن را از آنچه در گذشته قبل از تغییرات پیش بینی شده انجام داده است منحرف می‌کند. برای مثال، یک پرش شرطی حلقهٔ بسته یکبار به جای دوبار به اشتباه پیش بینی می‌گردد.

پردازنده‌های Intel pentium غیر MMX اصلی یک شمارنده اشباع اگرچه با پیاده‌سازی ناقص مورد استفاده قرار می‌دهد.[۲]

در محک‌های SPEC89 هر زمان که هر یک از پرش‌ها به یک شمارندهٔ منحصر به فرد نگاشت می‌شود، پیش بینی کننده‌های bimodal بسیار بزرگ در وضعیت صحیح ۹۳٫۵٪ اشباع می‌شوند.[۴]

جدول پیش بینی کننده، با بیت‌های آدرس دستورالعمل شاخص بندی شده‌اند، به نحوی که پردازشگر می‌تواند یک پیش بینی را برای هر دستورالعمل قبل از آنکه دستورالعمل decode گردد، fetch می‌کند.

پیش بینی کنند ی انطباقی دو ترازه[ویرایش]

شکل 3.[۵]

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

برای مثال n=۲ را در نظر بگیرید. به این معناست که دو رخداد آخر پرش در یک شیفت رجیستر دو بیتی ذخیره گردیده است. این ثبات تاریخچهی پرش می‌توانند ۴ مقدار دودویی داشته باشد: ۰۰و۰۱و۱۰و۱۱ که ۰ به معنای not taken و ۱ به معنای taken است. جدول تاریخچهٔ الگو شامل ۴ ورودی برای هر پرش است، یکی برای هر یک از دو به توان دو که چهار می‌شود تاریخچه‌های ممکن پرش، و هر یک از ورودی‌ها در جدول شامل یک شمارندهٔ دو بیتی مشابه آنچه در شکل ۲ نشان داده شده است برای هر پرش می‌باشد. ثبات تاریخچهٔ پرش برای انتخاب اینکه کدام یک از ۴ شمارندهٔ اشباع به کار روند مورد استفاده قرار می‌گیرند. اگر تاریخچه ۰۰ باشد، در این صورت اولین شمارنده به کار می‌رود، اگر تاریخچه ۱۱ باشد، در این صورت آخرین چهار شمارنده به کار می‌رود.

برای مثال فرض کنید که یک پرش شرطی در هر سه زمان اتفاق می‌افتد. پرش حاصله عبارت است از: …۰۰۱۰۰۱۰۰۱ در این مورد عدد ورودی ۰۰ در جدول تاریخچهٔ الگو معرف “strongly taken” است، که نشان‌دهندهٔ این است که بعد از دوتا صفر، ۱ می‌آید. عدد ورودی ۰۱ به معنای strongly not taken است که نشان‌دهندهٔ این است که پس از ۰۱، یک ۰ می‌آید. همین شرایط برای عدد ورودی ۱۰ صادق است در حالی که عدد ۱۱ هیچ وقت مورد استفاده قرار نمی‌گیرد زیرا دو عدد یک متوالی وجود ندارند.

قانون کلی برای یک پیش بینی کننده انطباقی دو ترازه با تاریخچهٔ n بیتی این است که می‌تواند هر ترتیب تکراری با هر تناوبی را، اگر همهٔ زیر توالی‌های n بیتی متفاوت باشند، پیش بینی کند.[۲]

مزیت پیش بینی کنندهٔ انطباقی دو ترازه این است که به سرعت می‌تواند یاد بگیرد تا هر الگوی تکراری دلخواهی را پیش بینی نماید. این روش توسط T.Y Yelho patt در دانشگاه میشیگان ابداع شد. از زمان چاپ اولیهٔ مقاله شان در سال ۱۹۹۱، این روش بسیار رایج گردیده است. واریانس این روش پیش بینی در بیشتر ریزپردازنده‌های مدرن استفاده می‌گردد.[نیازمند منبع]

پیش بینی کنندهٔ پرش محلی[ویرایش]

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

.[۶]

پیش بینی کننده پرش سراسری[ویرایش]

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

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

پیش بینی کنندهٔ انطباقی دو ترازه با بافر تقسیم شدهٔ سراسری و جدول پیش بینی کننده، "gshare" نامیده می‌شود اگر که پرش pc و تاریخچهٔ جهانی را xor کند، "gselect" نامیده می‌شود که آن‌ها را به هم می‌چسباند. پیش بینی کنندهٔ پرش سراسری در پردازنده‌های AMD استفاده می‌شود. همچنین در intel Pentium M, Core , Core 2, Silvermont کاربرد دارد .[۷]

پیش بینی کنندهٔ پرش Alloyed[ویرایش]

یک پیش بینی کنندهٔ پرش Alloyed اصول پیش بینی محلی و جهانی را از طریق الحاق تاریخچه‌های پرش‌های محلی و جهانی با یکدیگر ترکیب می‌کند، احتمالاً با چند بیت از شمارنده برنامه همچنین. آزمایش نشان داده است که پردازنده VIA Nano ممکن است از این تکنولوژی استفاده کند.[۲]

پیش بینی کننده توافقی[ویرایش]

پیش بینی کنندهٔ توافقی یک پیش بینی کنندهٔ انطباقی دو ترازه با حافظهٔ تاریخی اشتراکی جهانی و الگوی تاریخچه به صورت جدول و یک شمارندهٔ محلی اشباع است. خروجی‌های پیش بینی کننده‌های محلی و جهانی XORed هستند که هریک پیش بینی نهایی را می‌دهند. هدف کاهش مشاجره در جدول تاریخچهٔ الگو است که دو پرش با پیش بینی مخالف برای تسهیم ورودی مشابه در جدول تاریخچه الگو اتفاق می‌افتد.[۸]

پیش بینی توافقی در اولین نسخهٔ Pentium 4 استفاده شد. اما بعداً دیگر استفاده نشد.

پیش بینی Hybrid[ویرایش]

پیش بینی کنندهٔ Hybrid که پیش بینی کنندهٔ ترکیبی نیز نامیده می‌شود بیش از یک مکانیزم پیش بینی را پیاده‌سازی می‌کند. پیش بینی نهایی یا بر اساس meta predictor است که به خاطر می‌سپارد کدام یک از پیش بینی کننده‌ها بهترین پیش بینی‌ها را در گذشته انجام داده‌اند، یا یک تابع رای اکثریت بر اساس عدد فرد پیش بینی‌های مختلف..

در ارزیاب SPEC89 چنین پیش بینی کننده‌ای به خوبیه پیش بینی کننده محلی است.[نیازمند منبع]

پیش بینی کننده‌هایی مثل gshare از چندین ورودی جدول برای ردیابی رفتار هر پرش بخصوصی استفاده می‌کنند. این تکثیر ورودی‌ها باعث شده است که احتمال اینکه دو پرش به یک جدول (که این موقعیت aliasing نامیده می‌شود) یکسان نگاشت شود زیاد شود، که به نوبهٔ خود، احتمال اینکه دقت پیش بینی برای آن پرش‌ها رنج برد را بالا می‌برد. وقتی که شما چندین پیش بینی کننده دارید، سودمند است که هر پیش بینی کننده‌ای که الگوی aliasing متفاوتی دارد منظم شود، بنابراین حداقل یک پیش بینی کننده هیچ aliasing نداشته باشد بالا می‌رود. پیش بینی کننده‌های ترکیبی با توابع فهرست کننده متفاوت برای پیش بینی کننده‌های متفاوت. پیش بینی کننده gskew نامیده می‌شود و مشابه skewd associative cachesهای استفاده شده برای کش داده و دستورالعمل است.

پیش بینی حلقه‌ای[ویرایش]

یک پرش مشروط که حلقه‌ای را کنترل می‌کند با یک پیش بینی کنندهٔ ویژه به بهترین نحو پیش بینی می‌گردد. پرش مشروط در کف حلقه که N مرتبه تکرار می‌گردد، N-1 مرتبه taken می‌شود و یک مرتبه not taken می‌گردد. اگر پرش مشروط در بالای حلقه قرار گیرد و N-1 مرتبه not taken و یک مرتبه taken می‌گردد. پرش مشروطی که مرتبه‌های زیادی در یک مسیر و تنها یک مرتبه در مسیر دیگر آشکار سازی می‌گردد، رفتار حلقه‌ای از خود نشان می‌دهد. مانند پرش شرطی که می‌تواند به آسانی با یک شمارنده ساده پیش بینی شود. پیش بینی کنندهٔ حلقه‌ای یک قسمتی از پیش بینی کنندهٔ Hybrid آیت که meta-perdictor کشف می‌کند که آیا پرش شرطی رفتار حلقه‌ای دارد.

خیلی از پردازنده‌ها امروزه پیش بینی کنندهٔ حلقه‌ای دارند.[۲]

پیش بینی پرش‌های غیر مستقیم[ویرایش]

دستورالعمل یک پرش غیر مستقیم می‌تواند بین دو پرش انتخاب نماید. پردازنده‌های جدیدتر Intel و AMD می‌تواند پرش‌های غیر مستقیم را با استفاده از پیش بینی کنندهٔ انطباقی دو ترازه پیش بینی نماید. این نوع دستور بیشتر از یک بیت در تاریخچهٔ بافر شرکت دارد[۹][۱۰]

پردازنده‌ها بدون این مکانیزم به آسانی پرش غیر مستقیم برای رفتن به هدف مشابه را پیش بینی می‌کنند همان‌طور که آخرین بار انجام داد.[۲]

پیش بینی بازگشت‌های تابع[ویرایش]

یک تابع معمولاً به جایی که فراخوانده شده است بازمی‌گردد. دستورالعمل بازگشت یک پرش غیر مستقیم است که آدرس هدف خود را از call stack می‌خواند. بسیاری از ریزپردازنده‌ها مکانیزم‌های پیش بینی جداگانه‌ای برای دستورالعمل‌های بازگشتی دارند. این مکانیزم بر اساس return stack buffer است که آیینه محلی از call stack است. سایز پشته بافر بازگشتی معمولاً بین ۴ تا ۱۶ ورودی است.[۲]

پیش بینی overriding[ویرایش]

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

ریزپردازنده‌های Alpha 21264 , Alpha EV8 از پیش بینی کنندهٔ خط بعدی تک چرخه‌ای سریع برای ادارهٔ بازگشت هدف پرش و تهیهٔ پیش بینی سریع و ساده استفاده می‌کنند. به دلیل اینکه پیش بینی کنندهٔ خط بعدی غیر دقیق است، و بازگشت کیفیت پرش خیلی طول می‌کشد، هر دو هسته دو پیش بینی کنندهٔ پرش ثانوی دو چرخه‌ای دارند که می‌توانند پیش بینی پیش بینی کنندهٔ خط بعدی را در هزینهٔ یک چرخه fetch باطل کنند.

Core i7 دو بافر هدف پرش دارد و ممکن است دو یا بیشتر پیش بینی کننده داشته باشد.[۱۱]

پیش بینی پرش عصبی[ویرایش]

یادگیری ماشین برای پیش بینی پرش با استفاده از LVQ و multi-layer perceptrons پیش بینی پرش عصبی نامیده می‌شود که توسط پروفسور Vintan و سپس پروفسور jimenez در سال ۲۰۰۱ گسترش پیدا کرد. مزیت اصلی پیش بینی کنندهٔ عصبی در توانایی آن برای شناسایی تاریخچه‌های بلند مدت است در حالی که تمها رشد خطی منبع را لازم دارد. پیش بینی کننده‌های کلاسیک رشد منبع نمایی را لازم داشتند. نقطه ضعف عمدهٔ پیش بینی کننده‌های perceptrons تأخیر بالای آن است.[نیازمند منبع][نیازمند منبع]

تاریخچه[ویرایش]

پیش بینی کننده‌های دو بیتی توسط Tom McWilliams و curt middoes در سال ۱۹۷۷ و به طور جداگانه توسط jim smith معرفی شدند. پردازنده‌های ریز برنامه که از دههٔ ۱۹۶۰ تا دههٔ ۱۹۸۰ و پس از آن رایج بودند چندین چرخه برای هر دستورالعمل به کار می‌برند؛ و به تدریج در نسخه‌های جدیدتر نیاز به پیش بینی نداشتند.

The Burroughs B4900 ماشین ریزبرنامهٔ کوبل که در سال ۱۹۸۲ ابداع شد از خط لوله پیش بینی پرش استفاده نمود. وضعیت تاریخچهٔ پرش B4900 در دستورالعمل‌های حافظهٔ آن در طول اجرای برنامه ذخیره می‌گردد.

VAX9000 که در سال ۱۹۸۹ ابداع شد، هم ریزبرنامه و هم خط لوله شده است و پیش بینی پرشی را اجرا می‌کند.[۱۲]

از دیگر موارد ابداع شده می‌توان به MIPS-R2000 و R3000و R4000 اشاره نمود. سپس پیش بینی پرشی نظیر Intel Pentium, Alpha,R8000,IBM POWER با معرفی پردازشگرهای Superscalar خط لوله اهمیت بیشتری پیدا کرد و این پردازشگرها با پیش بینی کننده‌های bimodal یک بیتی یا ساده اعتماد می‌کند.

منابع[ویرایش]

  1. P. Shen, John; Lipasti, Mikko (2005). Modern processor design: fundamentals of superscalar processors. Boston: McGraw-Hill Higher Education. p. 455. ISBN 0-07-057064-7. 
  2. ۲٫۰ ۲٫۱ ۲٫۲ ۲٫۳ ۲٫۴ ۲٫۵ ۲٫۶ Fog, Agner (2009). "The microarchitecture of Intel, AMD and VIA CPUs". Retrieved 2009-10-01. 
  3. The Pentium 4 and the G4e: an Architectural Comparison, Ars Technica
  4. S. McFarling Combining Branch Predictors Digital Western Research Lab (WRL) Technical Report, TN-36, 1993
  5. "New Algorithm Improves Branch Prediction: 3/27/95" (PDF). Carnegie Mellon University. Retrieved February 2, 2016. 
  6. S. McFarling Combining Branch Predictors Digital Western Research Lab (WRL) Technical Report, TN-36, 1993:8
  7. "Silvermont, Intel’s Low Power Architecture (page 2)". Real World Technologies. 
  8. Empty citation (help) 
  9. "z/Architecture Principles of Operation". IBM. March 2015. pp. 7–40 – 7–43. SA22-7832-10. 
  10. "IBM zEnterprise BC12 Technical Guide". IBM. February 2014. p. 78. 
  11. WO 2000/014628, Yeh, Tse-Yu & H P Sharangpani, "A method and apparatus for branch prediction using a second level branch prediction table", published 16.03.2000 
  12. Micro-architecture of the VAX 9000