Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос знатокам ассемблера X86 / 25 сообщений из 31, страница 1 из 2
21.04.2005, 14:39
    #33027849
Alois
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Какой набор команд выполнится быстрее на Pentium 4?
Набор 1
Код: plaintext
1.
2.
3.
mov ecx, [eax]
mov ebx, [edx]
mov [eax], ebx
mov [edx], ecx
Набор 2
Код: plaintext
1.
2.
3.
4.
5.
mov ecx, [eax]
xor [edx], ecx
mov ecx, [edx]
xor [eax], ecx
mov eax, [eax]
xor [edx], eax
Мне этот код мало что говорит про реальное перемещение и обработку информации в камне.
...
Рейтинг: 0 / 0
21.04.2005, 16:09
    #33028274
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Наверное 1-ый набор выполнится быстрее, т.к. там команд меньше :)
...
Рейтинг: 0 / 0
21.04.2005, 16:36
    #33028378
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mov ecx, [eax]
mov ebx, [edx]
mov [eax], ebx
mov [edx], ecx

 4  mov'а

mov ecx, [eax]
xor [edx], ecx
mov ecx, [edx]
xor [eax], ecx
mov eax, [eax]
xor [edx], eax

3 mov'а +  3  xor'a

Теперь надо открыть справочник по П4 и посмотреть сколько тактов тратиться на XOR, т.е. равен ли 1 mov 3 xor'aм.

А вообще есть команда xche которая меняет местами два операнда. Вот только не помню, умеет ли она работать сразу с адресами или только с регистрами.
...
Рейтинг: 0 / 0
21.04.2005, 16:52
    #33028445
Alois
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
авторТеперь надо открыть справочник по П4
У меня такого нет. И потом нельзя складывать длительности. У П4 куча всяких конвейеров, префетчей и пр.

авторА вообще есть команда xche
Этот код я взял из отладчика Delphi, а не писал сам.
...
Рейтинг: 0 / 0
21.04.2005, 18:51
    #33028797
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Alois
Вообще-то это проще проверить - прогнать то и другое миллиард раз и замерять время. Если процессор умеет параллелить вход - в смысле, загнать общий аргумент на вход обоим конвеерам - второй вроде как будет побыстрее, если нет - наоборот. На пальцах это действительно к спецам по железу.
...
Рейтинг: 0 / 0
21.04.2005, 22:41
    #33028991
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Зачем справочник: и команда mov и xor требуют 1 такт.
xchg не умеет работать с двумя адресами памяти.

Формально, если повезет, все команды из варианта 1 будут выполены за 2 такта.
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
22.04.2005, 09:27
    #33029206
Alois
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
SoftwarerВообще-то это проще проверить - прогнать то и другое миллиард раз и замерять время.
Сомневаюсь, что код цикла не повлияет на загрузку конвейера.

Если честно - эта задача почти синтетическая. В одном из моих модулей есть своп двух переменных. Выполняется довольно часто. Грубо говоря, на одно нажатие кнопки - 300-400 раз. Вот я и подумал уменьшить время малость, в целях общего развития.
...
Рейтинг: 0 / 0
22.04.2005, 10:47
    #33029370
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
AloisСомневаюсь, что код цикла не повлияет на загрузку конвейера.
Ну так не обязательно же заворачивать в цикл один-единственный шаг :)

AloisЕсли честно - эта задача почти синтетическая. В одном из моих модулей есть своп двух переменных. Выполняется довольно часто. Грубо говоря, на одно нажатие кнопки - 300-400 раз.
Хм. Сомневаюсь, что пользователи программы за счет эффективности сэкономят хотя бы на три порядка меньше времени, нежели мы потратили на обсуждение :)
...
Рейтинг: 0 / 0
22.04.2005, 10:49
    #33029377
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
насколько я помню у xor-a тактов было меньше даже на 286 ?
или я ошибаюсь .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
22.04.2005, 11:15
    #33029464
synapse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
JibSkeartнасколько я помню у xor-a тактов было меньше даже на 286 ?
или я ошибаюсь .


ш
(';')
(V),(V),,
Код: plaintext
 JS 


да ты ошибаешься у xor 1 такт.
...
Рейтинг: 0 / 0
22.04.2005, 11:19
    #33029484
synapse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Серж
А вообще есть команда xche которая меняет местами два операнда. Вот только не помню, умеет ли она работать сразу с адресами или только с регистрами.

Да комманда ни одна команда ассемблера не может обратится одновременгно к двум блокам памяти.
И вообще не рекомендуется применять команду xchg т.к она выполняется за 3 такта, я ни разу не видел чтобы уважающий себя компилятор использовал xchg.
...
Рейтинг: 0 / 0
22.04.2005, 13:31
    #33029958
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
... И вообще не рекомендуется применять команду xchg т.к она выполняется за 3 такта, я ни разу не видел чтобы уважающий себя компилятор использовал xchg.
А ты можешь поменять два операнда местами за меньшее кол-во тактов чем 3-и?
...
Рейтинг: 0 / 0
22.04.2005, 16:21
    #33030648
Alexey Rovdo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Есть еще такое понятие "парабельность команд". Так вот некоторые команды могут выполняться одновременно. И это зависит как от команд, так и от их расположения относительно друг друга. Практически надо лезть в документацию Intel и смотреть кучу информации об этих командах, чтобы понять, какова точная скорость их исполнения.
...
Рейтинг: 0 / 0
22.04.2005, 18:16
    #33031058
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
synapse Серж
А вообще есть команда xche которая меняет местами два операнда. Вот только не помню, умеет ли она работать сразу с адресами или только с регистрами.

Да комманда ни одна команда ассемблера не может обратится одновременгно к двум блокам памяти.
И вообще не рекомендуется применять команду xchg т.к она выполняется за 3 такта, я ни разу не видел чтобы уважающий себя компилятор использовал xchg.

Можно, современные процы просто производят переименование внутренних регистров. См. например http://www.wasm.ru/article.php?article=inspr03
...
Рейтинг: 0 / 0
25.04.2005, 10:33
    #33032723
Alois
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Alexey RovdoПрактически надо лезть в документацию Intel и смотреть кучу информации об этих командах
Softwarer прав. Не стОит задача таких усилий. Наткнулся на красивое решение свопа переменных. Просто стало интересно, выиграю я чего-нибудь на этом или нет.
ЗЫ. Прогнав цикл, я вообще ничего не понял. То первый вариант быстрее, то второй. Наверное, сервисы на моем компе все подсчеты портят. Тремя порядками здесь не пахнет.
...
Рейтинг: 0 / 0
01.05.2005, 16:26
    #33044488
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
AloisЕсли честно - эта задача почти синтетическая. В одном из моих модулей есть своп двух переменных. Выполняется довольно часто. Грубо говоря, на одно нажатие кнопки - 300-400 раз. Вот я и подумал уменьшить время малость, в целях общего развития.

Не знаю, сказано ли где-то, то что сейчас скажу, но на собственом опыте пришел к следующему выводу:

При оптимизации приложений по любому из параметров в первую очередь важно принципиальное изменение алгоритма, а затем уже оптимизация отдельных участков - inline-функции, asm и пр.

Т.е. если пузырьковая сортировка проигрывает по скорости быстрой сортировке, то можно хоть все на асме написать - результат нулевой будет.
А вот качественно новый алгоритм способен дать значительный прирост скорости даже без асма.
...
Рейтинг: 0 / 0
02.05.2005, 12:01
    #33044738
Несчастный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
СержА вот качественно новый алгоритм способен дать значительный прирост скорости даже без асма.

Истина, которая тупо игнорируется любителями армагеддонов Цэ версус Пасквиль.
...
Рейтинг: 0 / 0
02.05.2005, 15:56
    #33044911
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Этими любителями игнорируются все истины! :)
...
Рейтинг: 0 / 0
05.05.2005, 15:00
    #33050727
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
2 Alois

Сомнительно, что оптимизация обмена двух регистров даст существенный прирост для производительности кода в целом. ИМХО если Алоиз опубликует код процедуры (хотя-бы на Delphi) уже будет очевидно что мы смотрим "не туда" и оптимизируем "не то".

Если-бы я занялся оптимизацией то сначала бы выбрал быстрый алгоритм или численный метод. Потом выбрал хороший компиллер с профайлером. Потом потестировал бы с использованием разных технологий (SSE, 3Dnow). Вот так вот.

Способ "замера тактов" (о котором говорит Серж) - не годится. Он был удобен для старых ЭВМ. Для современного камня с его многоуровневыми кешами и конвейерами я бы поискал другие пути оптимизации. Кроме того штучный запуск фрагмента кода и массовый запуск не всегда дают результаты адекватные оценочным.

Неплохие примеры оптимизации кода на ассемблере можно найти в исходниках видеокодеков (MPEG2 и т.п). Поищите в гугле. Их всегда можно найти на свободном доступе.
...
Рейтинг: 0 / 0
31.05.2005, 14:00
    #33092677
Yaroslav Gaponov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
я бы сделал так

push [eax]
push [edx]
pop [eax]
pop [edx]

хотя дело вкуса...
...
Рейтинг: 0 / 0
31.05.2005, 16:01
    #33093001
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Yaroslav Gaponovя бы сделал так
С точки зрения скорости стековых операций следует избегать всеми силами.
...
Рейтинг: 0 / 0
31.05.2005, 16:18
    #33093053
SLab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Код: plaintext
1.
2.
3.
4.
5.
6.
push [eax]
push [edx]
pop [eax]
pop [edx]


на P6 минимум 4 такта
...
Рейтинг: 0 / 0
31.05.2005, 20:23
    #33093582
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Alexey RovdoЕсть еще такое понятие "парабельность команд". Так вот некоторые команды могут выполняться одновременно. И это зависит как от команд, так и от их расположения относительно друг друга. Практически надо лезть в документацию Intel и смотреть кучу информации об этих командах, чтобы понять, какова точная скорость их исполнения.разве это сильно зависит от проца? Если одна команда читает из памяти , а следующая пишет в память , они могут выполняться одновременно?
...
Рейтинг: 0 / 0
01.06.2005, 13:02
    #33094674
Alexey Rovdo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Вот вы тут быстродействие все анализируете, а банальной вещи не видите.

Компилятор выбрал второй вариант не с бухты-барахты, а потому, что в нем целый регистр экономится (ebx). А в этом регистре может храниться что-то нужное, что в противном случае пришлось бы временно сбрасывать в память (а это уже замедляет код гораздо сильнее, чем включение в него XOR-ов, которые выполняются за пол такта).
...
Рейтинг: 0 / 0
03.06.2005, 09:06
    #33098713
SLab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос знатокам ассемблера X86
Alexey Rovdo
которые выполняются за пол такта

интересно как это команда может выполнится на пол такта
P.S.я понимаю что, может на такт выполнится несколько команд
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос знатокам ассемблера X86 / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]