· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Быстрый поиск в массиве

<< . 1 . 2 . 3 .

Посл.отвђт Сообщенiе


Дата: Сен 10, 2004 21:56:54 · Поправил: boozook

S_T_A_S_
"IMHO самым быстрым будет всёже такой поиск"
Честно говоря, сомнительно - не вникая в подробности, сразу видно, что основной цикл будет выполняться как минимум 5 тактов(ибо зависимости), т.е. скорость поиска меньше байта за такт(со scasb'ом наверное 1байт/такт). Можно попробовать и здесь "распараллелить", но тут и с регистрами напряг будет, да и вообще стремно как-то... но хуже от этого точно не станет ;)

Зачем 2мя? одного должно хватить
Имелось ввиду "одной парой команд" :)

(см. картинку)
CodeAnalyst. Качал как-то себе эту штуку... не найти, затерялась куда-то. А как она анализирует, только для АМД, основываясь на теории? или с любым процом может скорость меррить?


Дата: Сен 11, 2004 01:26:25

boozook > „со scasb'ом наверное 1байт/такт“

Это медленная команда как на intel так и на AMD (latency 4 такта)
Вообще, в том моём варианте возможно и ошибки есть :)
Но это самый быстрый способ поиска байта в больших объёмах памяти (+ prefetch конечно) по моим опытам.


CodeAnalyst - это симулятор, так что возможно будет работать и на не-AMD процах, но я не проверял.
Прога полезная, в графике показывает состояние пайпа, видно какие команды от чего зависят и какие тормозят.
Кстати, порой расходится с теорией (или я просто что-то не так понимаю).
Для intel есть VTune - она и по объёму больше, и не бесплатная, но я не смотрел даже..


Дата: Сен 11, 2004 06:44:35

хм пока меня не было стока случилось
люди прежде чем что то выкладывать проверяете - некоторые коды не находят 55AAh например в таком масиве
some_array db 12,35,55,55,AA,34,0A,99
и всё потоу что люди наивно пологают что заданное значение будет находится по четному смещению и потому сканируют по два слова сразу...


Дата: Сен 11, 2004 13:50:25

"Это медленная команда"
хм.. выходит строковые команды тормозят даже с префиксом повторения :(

"Но это самый быстрый способ поиска байта в больших объёмах памяти (+ prefetch конечно) по моим опытам"
Да, и по моим тоже быстрее выходит. Можно еще с MMX пробовать ускорить.

Same
Вообще-то тут люди не только код выкладывают... не мешало бы и комментарии к нему почитать


Дата: Сен 11, 2004 23:00:25

AFAIK на PIV строковое копирование ускоряется аппаратно - по-видимому осущствляетя без превлечения ядра (ALU и т.п.)
(на Athlon такого нет - там movs медленный, быстрее копировать просто "разложив эту команду на составляющие".)

scasb же влияет на флаги, поэтому тут без ядра не обойтись - приходится раскладывать команду на несколько микроопераций, и выполнять уже их.
Поэтому и получается, что "обычные" команды работают как правило быстрее.
Здесь под "обычными" я понимаю команды, которые состоят из 1-2 микроопераций и способны за счёт этого паралелиться с другими.
У AMD для таких команд применяется термин Direct Path (для первых Vector Path).
У intel подобного чёткого деления нет, но всё равно можно проследить деление команд на 2 подобные группы.

Всё идёт от того, что процессоры внутри имеют RISC архитектуру.
Direct Path команды - это похоже те, которые имеют непосредственные RISC аналоги,
а для выполнения Vector Path запускается "подпрограмма" в microcode ROM, таким образом все ресурсы процессора идут на выполнение этой одной команды, а остальные ждут.

<< . 1 . 2 . 3 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.258