ДСв19_08-оптимизация (1238942), страница 3
Текст из файла (страница 3)
.404685:repz retqПродолжениеисполнения52Предсказание перехода в цикле401029:40102d:401031:401034:vmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdxi = 98401029Положимдлину вектора = 100Предсказание успешно401029:40102d:401031:401034:vmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdxi = 99401029401029:40102d:401031:401034:vmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdxi = 100401029401029:40102d:401031:401034:vmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdxi = 101401029Предсказание ошибочноЧтение из ИсполнениеошибочногоместаВыборка53Отмена ошибки предсказания401029:40102d:401031:401034:401029:40102d:401031:401034:vmulsdaddcmpjnevmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdxi = 98401029(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdx401029i = 99Положимдлину вектора = 100Предсказание успешноПредсказание ошибочно401029:40102d:401031:401034:vmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdx401029i = 100Отмена401029:40102d:401031:401034:vmulsdaddcmpjne(%rdx),%xmm0,%xmm0$0x8,%rdx%rax,%rdxi = 101i = 10140102954Исправление ошибки предсказания401029:40102d:401031:401034:401036:.
. .401040:¢vmulsdaddcmpjnejmp(%rdx),%xmm0,%xmm0$0x8,%rdxi=%rax,%rdx401029401040vmovsd %xmm0,(%r12)99перехода нет совсемперезагрузкаконвейераПотери быстродействия§ Много тактов на современных процессорах§ Может быть основным ограничителем быстродействия55Достижение высокого быстродействия¢¢Хороший компилятор и флагиНе делайте глупостей§ Следите за скрытыми алгоритмическими неэффективностями§ Пишите дружелюбный к компилятору кодСледите за помехами оптимизации:обращениями к процедурам и в память§ Тщательно анализируйте самые внутренние циклы (где делаетсябольшая часть работы)§¢Подстраивайте код под машину§ Используйте параллелизм команд§ Избегайте непредсказуемых переходов§ Пишите код дружелюбный к кэшу (продолжение следует…)56.