Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

Об оптимизации   Найти похожие ветки 

 
Anatoly Podgoretsky   (2003-08-16 10:07) [0]

Задачка из борландовской группы, сказать не измеряя данный код о времени выполнения двух идетничных кусков, в которых только переставлены местами команды, одинаковое время или разное, если разное, то какой код быстрее.

1.
sub eax,esi
add eax,$10

2.
add eax,$10
sub eax,esi


 
ZZ   (2003-08-16 10:27) [1]

2ой вариант быстрее однозначно :))


 
clickmaker   (2003-08-16 13:24) [2]

Но 1ый красивее :))


 
SergP   (2003-08-16 14:56) [3]


> clickmaker © (16.08.03 13:24) [2]
> Но 1ый красивее :))


Чем?


 
Calm   (2003-08-16 15:10) [4]


> одинаковое время или разное, если разное, то какой код быстрее

Может это шутка и время одинаковое?


 
Романов Р.В.   (2003-08-16 15:14) [5]

По моему одинаковое время


 
KSergey   (2003-08-16 15:17) [6]

Calm © (16.08.03 15:10)
Может это шутка и время одинаковое?


Я не знаю, но может с конвейером команд какая-нибудь хитрость?


 
Anatoly Podgoretsky   (2003-08-16 16:24) [7]

KSergey © (16.08.03 15:17) [6]
С ними


 
Calm   (2003-08-16 16:47) [8]

2 Anatoly Podgoretsky © (16.08.03 16:24) [7]
А вы знаете ответ?
Очень интересно. Если никто за неделю правильного ответа не даст, Вы уж скажите, пожалуйста.


 
app   (2003-08-16 17:05) [9]

Calm © (16.08.03 16:47) [8]
Мне самому было интерсно про это прочитать, ведь абсолютно одинаково, a-b+10 и a+10-b
Вот разъяснение от Дениса Христенсена

Оба этих примера имеют зависимость на EAX регистр.
Но пример 2 читает из esi позже чем в примере 1.
Если ESI бул загружен сразу перед этими строками, то пример номер 2 будет работать быстрее, чем пример номер 1 поскольку сложение add eax, constant бужет загружено в конвейер вместе с предыдущей загрузкой ESI.

Пример:


1: mov esi, something // зависимость на something, возможна задержки на загрузки из памяти
2: sub eax, esi // ожидание загрузки esi
3: add eax, 10 // ожидание до завершения eax


сравниваем с:

1: mov esi, something // зависимость на something, возможна задержки на загрузки из памяти
2: add eax, $10 // нет зависимости с предыдущей инструкцией, можно выполнить паралельно
3: sub eax, esi // зависимость до eax и esi завершения.


Тут мы видим в ответе еще одну инструкцию в обоих примерах, mov esi, something, без которой не объяснить почему и это также пример как не надо задавать вопросы, в первоначальном вопросе эта информация отсутствовала, но добавление не портит ответа, в обоих случаях код одинаковый, но поменяны местами две команды и это говорит о важности учета зависимойтей и возможного паралельного выполнения команд.


 
Skier   (2003-08-16 18:23) [10]

Классно. Весьма и весьма познавательно.
>app © (16.08.03 17:05) [9]
А нет ли какой поправки у Христенсена касающейся процессоров
с технологией HyperThreading ? Или в данном случае она [HyperThreading] не будет играть роли ?


 
Anatoly Podgoretsky   (2003-08-16 18:51) [11]

С HyperThreading пока ничего ясного.


 
Dionys   (2003-08-17 00:23) [12]

AGI

AGI — это ситуация, при которой регистр, используемый командой для генерации адреса как базовый или индексный, был приемником предыдущей команды. В этой ситуации процессор тратит один дополнительный такт. Последовательность команд

add edx,4
mov esi,[edx]

выполняется с AGI на любом процессоре.

Последовательность команд

add esi,4 ; U-конвейер - 1 такт (на Pentium)
pop ebx ; V-конвейер - 1 такт
inc ebx ; V-конвейер - 1 такт
mov edi,[esi] ; в U-конвейер - *AGI*, затем 1 такт

выполняется с AGI на Pentium за три такта процессора.

Кроме того, AGI может происходить неявно, например при изменении регистра ESP и обращении к стеку:

sub esp,24
push ebx ; *AGI*

или

mov esp,ebp
pop ebp ; *AGI*

но изменение ESP, производимое командами PUSH и POP, не приводит к AGI, если следующая команда тоже обращается к стеку.

Процессоры Pentium Pro и Pentium II не подвержены AGI.

(C) С.В.Зубков Ассемблер для DOS, Windows и Unix



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
3-10609
RDA
2003-08-13 12:27
2003.09.04
Текстовое сообщение с сервера для клиента


4-11023
Gefest
2003-07-04 09:46
2003.09.04
DBLCLICK в LISTBOX`е


14-10877
^Некто^
2003-08-13 19:16
2003.09.04
MSBlast


7-10987
DeadMeat
2003-06-20 18:41
2003.09.04
Хук на клаву...


9-10539
Sword-Fish
2002-10-19 01:23
2003.09.04
Создание 3D игр на GLScene





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский