Re: поиск
- From
- Vladislav Gusev (2:5059/9.75)
- To
- akrivosheev@utc.ru
- Date
- 2002-09-10T18:22:49Z
- Area
- RU.ALGORITHMS
Приветствую тебя akrivosheev@utc.ru !!!
Было это [09 сентября 2002]. akrivosheev@utc.ru писал к Valentin Davydov.
>> >> 4 байт в регистр процессора и последущего сравнения просто
>> >> сдвигом на 8 разрядов.
>> > А смысл? Раз уж загрузили 4 байта, так и сранивать надо 4 байта.
>> > ;)
>>
>> А смысл? Всё равно на побайтное сравнение 4х байт тратися меньше времени,
>> чем на один цикл чтения четырёхбайтного слова из памяти.
Ну, не из памяти ,а скорее всего из кэша, строки все таки...
на PI/PII это 1 такт/1 m.
a> Посмотрел как реализованна StrPos в Delphi. Написано на ассемблере и
Delphi ;))))
a> использует при поиске
a> REPNE SCASB. - инструкция процессора выполняется примерно за 8 тактов.
по одному байту это конечно очень эффективно, на грани фантастики ;)
a> (одно сравнение+загрузка и пр...) Для сравнения команда JMP - выполняется
a> минимум за 7 тактов. Видимо с точки зрения быстродействия StrPos в Delphi
А мы что под 386 пишем ? Там как раз JMP 7 тактов было ,только тогда
REPNE SCASB никак не 8.
PI/PII тратят 1 такт на правильно предсказанный выполненный переход.
a> наиболее оптимален для Интел процессора, потому как если мы напишем свой
Наиболее оптимальный код можно получить используя Intel C++ с векторизацией
и оптимизацией под MMX/SSE(ни всякий профи так напишет).
А делать с оглядкой на дельфи это просто глупо.
a> алгоритм поиска при каждом сравнении потребуется как минимум одна команда
a> перехода - 7 тактов, а ещё + загрузка, сравнение , сдвиг... выйдет как
a> минимум больше 10 тактов процессора.
a> Так что вообще-то компиляторы не дураки пишут и стоит использовать их
Смотря какие компиляторы ;)
a> команды... А то что файл в память не помещается весь, так это... его
a> можно
a> кусками считывать, сколько в память влезет, хоть по килобайту - всё
a> быстрее чем посимвольно. ;)
С уважением Vlad.
[C++] [Rock] [I`ll be back]
--- GoldED+/386 1.1.4.5
* Origin: DEL * . * - 100 % сжатие !!! (2:5059/9.75)