|
|
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Какой набор команд выполнится быстрее на Pentium 4? Набор 1 Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 14:39 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Наверное 1-ый набор выполнится быстрее, т.к. там команд меньше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 16:09 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Теперь надо открыть справочник по П4 и посмотреть сколько тактов тратиться на XOR, т.е. равен ли 1 mov 3 xor'aм. А вообще есть команда xche которая меняет местами два операнда. Вот только не помню, умеет ли она работать сразу с адресами или только с регистрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 16:36 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
авторТеперь надо открыть справочник по П4 У меня такого нет. И потом нельзя складывать длительности. У П4 куча всяких конвейеров, префетчей и пр. авторА вообще есть команда xche Этот код я взял из отладчика Delphi, а не писал сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 16:52 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Alois Вообще-то это проще проверить - прогнать то и другое миллиард раз и замерять время. Если процессор умеет параллелить вход - в смысле, загнать общий аргумент на вход обоим конвеерам - второй вроде как будет побыстрее, если нет - наоборот. На пальцах это действительно к спецам по железу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 18:51 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Зачем справочник: и команда mov и xor требуют 1 такт. xchg не умеет работать с двумя адресами памяти. Формально, если повезет, все команды из варианта 1 будут выполены за 2 такта. ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 22:41 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
SoftwarerВообще-то это проще проверить - прогнать то и другое миллиард раз и замерять время. Сомневаюсь, что код цикла не повлияет на загрузку конвейера. Если честно - эта задача почти синтетическая. В одном из моих модулей есть своп двух переменных. Выполняется довольно часто. Грубо говоря, на одно нажатие кнопки - 300-400 раз. Вот я и подумал уменьшить время малость, в целях общего развития. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 09:27 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
AloisСомневаюсь, что код цикла не повлияет на загрузку конвейера. Ну так не обязательно же заворачивать в цикл один-единственный шаг :) AloisЕсли честно - эта задача почти синтетическая. В одном из моих модулей есть своп двух переменных. Выполняется довольно часто. Грубо говоря, на одно нажатие кнопки - 300-400 раз. Хм. Сомневаюсь, что пользователи программы за счет эффективности сэкономят хотя бы на три порядка меньше времени, нежели мы потратили на обсуждение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 10:47 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
насколько я помню у xor-a тактов было меньше даже на 286 ? или я ошибаюсь . ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 10:49 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
JibSkeartнасколько я помню у xor-a тактов было меньше даже на 286 ? или я ошибаюсь . ш (';') (V),(V),, Код: plaintext да ты ошибаешься у xor 1 такт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 11:15 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Серж А вообще есть команда xche которая меняет местами два операнда. Вот только не помню, умеет ли она работать сразу с адресами или только с регистрами. Да комманда ни одна команда ассемблера не может обратится одновременгно к двум блокам памяти. И вообще не рекомендуется применять команду xchg т.к она выполняется за 3 такта, я ни разу не видел чтобы уважающий себя компилятор использовал xchg. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 11:19 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
... И вообще не рекомендуется применять команду xchg т.к она выполняется за 3 такта, я ни разу не видел чтобы уважающий себя компилятор использовал xchg. А ты можешь поменять два операнда местами за меньшее кол-во тактов чем 3-и? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 13:31 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Есть еще такое понятие "парабельность команд". Так вот некоторые команды могут выполняться одновременно. И это зависит как от команд, так и от их расположения относительно друг друга. Практически надо лезть в документацию Intel и смотреть кучу информации об этих командах, чтобы понять, какова точная скорость их исполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 16:21 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
synapse Серж А вообще есть команда xche которая меняет местами два операнда. Вот только не помню, умеет ли она работать сразу с адресами или только с регистрами. Да комманда ни одна команда ассемблера не может обратится одновременгно к двум блокам памяти. И вообще не рекомендуется применять команду xchg т.к она выполняется за 3 такта, я ни разу не видел чтобы уважающий себя компилятор использовал xchg. Можно, современные процы просто производят переименование внутренних регистров. См. например http://www.wasm.ru/article.php?article=inspr03 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 18:16 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoПрактически надо лезть в документацию Intel и смотреть кучу информации об этих командах Softwarer прав. Не стОит задача таких усилий. Наткнулся на красивое решение свопа переменных. Просто стало интересно, выиграю я чего-нибудь на этом или нет. ЗЫ. Прогнав цикл, я вообще ничего не понял. То первый вариант быстрее, то второй. Наверное, сервисы на моем компе все подсчеты портят. Тремя порядками здесь не пахнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 10:33 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
AloisЕсли честно - эта задача почти синтетическая. В одном из моих модулей есть своп двух переменных. Выполняется довольно часто. Грубо говоря, на одно нажатие кнопки - 300-400 раз. Вот я и подумал уменьшить время малость, в целях общего развития. Не знаю, сказано ли где-то, то что сейчас скажу, но на собственом опыте пришел к следующему выводу: При оптимизации приложений по любому из параметров в первую очередь важно принципиальное изменение алгоритма, а затем уже оптимизация отдельных участков - inline-функции, asm и пр. Т.е. если пузырьковая сортировка проигрывает по скорости быстрой сортировке, то можно хоть все на асме написать - результат нулевой будет. А вот качественно новый алгоритм способен дать значительный прирост скорости даже без асма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2005, 16:26 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
СержА вот качественно новый алгоритм способен дать значительный прирост скорости даже без асма. Истина, которая тупо игнорируется любителями армагеддонов Цэ версус Пасквиль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2005, 12:01 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Этими любителями игнорируются все истины! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2005, 15:56 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
2 Alois Сомнительно, что оптимизация обмена двух регистров даст существенный прирост для производительности кода в целом. ИМХО если Алоиз опубликует код процедуры (хотя-бы на Delphi) уже будет очевидно что мы смотрим "не туда" и оптимизируем "не то". Если-бы я занялся оптимизацией то сначала бы выбрал быстрый алгоритм или численный метод. Потом выбрал хороший компиллер с профайлером. Потом потестировал бы с использованием разных технологий (SSE, 3Dnow). Вот так вот. Способ "замера тактов" (о котором говорит Серж) - не годится. Он был удобен для старых ЭВМ. Для современного камня с его многоуровневыми кешами и конвейерами я бы поискал другие пути оптимизации. Кроме того штучный запуск фрагмента кода и массовый запуск не всегда дают результаты адекватные оценочным. Неплохие примеры оптимизации кода на ассемблере можно найти в исходниках видеокодеков (MPEG2 и т.п). Поищите в гугле. Их всегда можно найти на свободном доступе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 15:00 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
я бы сделал так push [eax] push [edx] pop [eax] pop [edx] хотя дело вкуса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 14:00 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Yaroslav Gaponovя бы сделал так С точки зрения скорости стековых операций следует избегать всеми силами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 16:01 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 16:18 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoЕсть еще такое понятие "парабельность команд". Так вот некоторые команды могут выполняться одновременно. И это зависит как от команд, так и от их расположения относительно друг друга. Практически надо лезть в документацию Intel и смотреть кучу информации об этих командах, чтобы понять, какова точная скорость их исполнения.разве это сильно зависит от проца? Если одна команда читает из памяти , а следующая пишет в память , они могут выполняться одновременно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 20:23 |
|
||
|
Вопрос знатокам ассемблера X86
|
|||
|---|---|---|---|
|
#18+
Вот вы тут быстродействие все анализируете, а банальной вещи не видите. Компилятор выбрал второй вариант не с бухты-барахты, а потому, что в нем целый регистр экономится (ebx). А в этом регистре может храниться что-то нужное, что в противном случае пришлось бы временно сбрасывать в память (а это уже замедляет код гораздо сильнее, чем включение в него XOR-ов, которые выполняются за пол такта). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 13:02 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33094674&tid=1345899]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 278ms |
| total: | 561ms |

| 0 / 0 |
