powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос знатокам ассемблера X86
31 сообщений из 31, показаны все 2 страниц
Вопрос знатокам ассемблера X86
    #33027849
Alois
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой набор команд выполнится быстрее на 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
Вопрос знатокам ассемблера X86
    #33028274
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное 1-ый набор выполнится быстрее, т.к. там команд меньше :)
...
Рейтинг: 0 / 0
Вопрос знатокам ассемблера X86
    #33028378
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Вопрос знатокам ассемблера X86
    #33028445
Alois
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторТеперь надо открыть справочник по П4
У меня такого нет. И потом нельзя складывать длительности. У П4 куча всяких конвейеров, префетчей и пр.

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

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

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

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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

интересно как это команда может выполнится на пол такта
P.S.я понимаю что, может на такт выполнится несколько команд
...
Рейтинг: 0 / 0
Вопрос знатокам ассемблера X86
    #33099399
Alexey Rovdo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SLab
интересно как это команда может выполнится на пол такта

В P4 вычислительное ядро (ALU) работает на удвоенной частоте. Вот и получается, что такт процессора порождает внутри ALU два такта, и за один такт процессора ALU может выполнить две команды. Это не следует путать с параллельным выполнением команд, которое может иметь место при наличии в процессоре нескольких ALU или параллельном исполнении команд в других (кроме ALU) структурных модулях процессора.
...
Рейтинг: 0 / 0
Вопрос знатокам ассемблера X86
    #33099645
SLab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Rovdo
В P4 вычислительное ядро (ALU) работает на удвоенной частоте. Вот и получается, что такт процессора порождает внутри ALU два такта, и за один такт процессора ALU может выполнить две команды. Это не следует путать с параллельным выполнением команд, которое может иметь место при наличии в процессоре нескольких ALU или параллельном исполнении команд в других (кроме ALU) структурных модулях процессора.

отстал от жизни ....
не могли бы вы поделится ссылками на доку по пенька 4
заранее спасибо
...
Рейтинг: 0 / 0
Вопрос знатокам ассемблера X86
    #33099904
Alexey Rovdo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вопрос знатокам ассемблера X86
    #34724683
giskar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите пожалуста как вывести значение переменной на экран
...
Рейтинг: 0 / 0
Вопрос знатокам ассемблера X86
    #34724868
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глупо мерять производительность огрызка кода. Ведь скорость выполнения команд современных CPU зависит от некого состояния (X1) АЛУ, конвейера и кешей команд.
...
Рейтинг: 0 / 0
Вопрос знатокам ассемблера X86
    #34724987
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не заметил что боян.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос знатокам ассемблера X86
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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