Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26200
Рейтинг: 2137
#61: 2010-04-22 00:26:09 ЛС | профиль | цитата
Tad писал(а):
И даже быстрее всех

А размер, в сравнении со штатным
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#62: 2010-04-22 00:27:45 ЛС | профиль | цитата
Добавил тестовую прогу
Размер еще не смотрел - это нужно отдельно компилировать. Но раз быстрее, то не важно.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1testposex.sha [8.2KB] [170]
Разработчик
Ответов: 26200
Рейтинг: 2137
#63: 2010-04-22 00:29:19 ЛС | профиль | цитата
Tad, но... Ассемблерный пример не хочет компилится под FPC. Ravilr не поймет
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#64: 2010-04-22 00:40:32 ЛС | профиль | цитата


function PosEx2(const S, SubStr: string; Offset: integer = 1): integer;
begin
asm
PUSH EDI
PUSH ESI
PUSH EBX
PUSH EAX
OR EAX,EAX
JE @@2
OR EDX,EDX
JE @@2
DEC ECX
JS @@2
MOV EBX,[EAX-4]
SUB EBX,ECX
JLE @@2
SUB EBX,[EDX-4]
JL @@2
INC EBX
ADD EAX,ECX
MOV ECX,EBX
MOV EBX,[EDX-4]
DEC EBX
MOV EDI,EAX

@@1: MOV ESI,EDX
LODSB
REPNE SCASB
JNE @@2
MOV EAX,ECX
PUSH EDI
MOV ECX,EBX
REPE CMPSB
POP EDI
MOV ECX,EAX
JNE @@1
LEA EAX,[EDI-1]
POP EDX
SUB EAX,EDX
INC EAX
JMP @@3

@@2: POP EAX
XOR EAX,EAX

@@3: POP EBX
POP ESI
POP EDI
end;
end;


заключи asm коды в begin end
и FPC нормально полюбит.
Это Delphi умный сделал паскалевские скобки за тебя.
------------ Дoбавленo в 00.40:
С begin end FPC -нормально считает, а Delphi врет
Смотреть надо.

Кто там силён в АSМе ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:nesco
Разработчик
Ответов: 26200
Рейтинг: 2137
#65: 2010-04-22 00:46:06 ЛС | профиль | цитата
Tad писал(а):
Это Delphi умный сделал паскалевские скобки за тебя

Странно, а в Kol совсем по-другому, но как там -- не прокатывает, значит, еще чего-то забыл прописать в качестве инструкций
------------ Дoбавленo в 00.46:
Tad писал(а):
Кто там силён в АSМе ?

Ага, Галков, Wolfik, tsdima и Кладов, ищи их Насчет Dilm-ы -- не знаю, ничего сказать не могу
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#66: 2010-04-22 00:52:59 ЛС | профиль | цитата
nesco, а условия поставь на Begin и End

function PosEx2(const S, SubStr: string; Offset: integer = 1): integer;
{$IFDEF F_P} begin {$ENDIF}
asm
PUSH EDI
PUSH ESI
PUSH EBX
PUSH EAX
OR EAX,EAX
JE @@2
OR EDX,EDX
JE @@2
DEC ECX
JS @@2
MOV EBX,[EAX-4]
SUB EBX,ECX
JLE @@2
SUB EBX,[EDX-4]
JL @@2
INC EBX
ADD EAX,ECX
MOV ECX,EBX
MOV EBX,[EDX-4]
DEC EBX
MOV EDI,EAX

@@1: MOV ESI,EDX
LODSB
REPNE SCASB
JNE @@2
MOV EAX,ECX
PUSH EDI
MOV ECX,EBX
REPE CMPSB
POP EDI
MOV ECX,EAX
JNE @@1
LEA EAX,[EDI-1]
POP EDX
SUB EAX,EDX
INC EAX
JMP @@3

@@2: POP EAX
XOR EAX,EAX

@@3: POP EBX
POP ESI
POP EDI
{$IFDEF F_P} end;{$ENDIF}

end;

помогло
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26200
Рейтинг: 2137
#67: 2010-04-22 00:56:11 ЛС | профиль | цитата
Tad писал(а):
а условия поставь на Begin и End

А зачем, оно и так прекрасно работает в обоих компиляторах. У меня этот код чуть медленнее работает, чем штатный на твоем примере, на коротком примере -- быстрее, процентов на 10
карма: 22

0
Разработчик
Ответов: 26200
Рейтинг: 2137
#68: 2010-04-22 01:04:07 ЛС | профиль | цитата
Tad, я так и думал, что ты черте что проверяешь, а не мой последний код Boyer-Moore, который я для тебя выложил с заключительной редакцией. Он дает нещадную фору всем, у меня, по крайней мере. Это действительно -- самый быстрый код, а если его на Asm реализовать...



карма: 22

0
файлы: 2testposex_1.sha [8.3KB] [174], test_001.png [12KB] [415]
Ответов: 16884
Рейтинг: 1239
#69: 2010-04-22 01:08:37 ЛС | профиль | цитата
nesco писал(а):
А зачем, оно и так прекрасно работает в обоих компиляторах.

nesco писал(а):
я так и думал, что ты черте что проверяешь
А что я должен проверять ? Ткни пальчиком.
ASM проверяю. Последний код что я выложил с условием - прекрасно и правильно работает с обоими компиляторами.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26200
Рейтинг: 2137
#70: 2010-04-22 01:12:08 ЛС | профиль | цитата
Tad писал(а):
А что я должен проверять ? Ткни пальчиком

Млин, а для кого я выкладывал последнюю редакцию кода Boyer-Moore в посте от 21 Apr 2010 22:11 77.106.254.232
------------ Дoбавленo в 01.12:
Tad писал(а):
Последний код что я выложил с условием - прекрасно и правильно работает с обоими компиляторами

Забить на него надо, он слабее Boyer-Moore
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#71: 2010-04-22 01:13:41 ЛС | профиль | цитата
Без условия в Delphi врет

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 2anew.png [19.1KB] [287], abm.png [19.3KB] [280]
Разработчик
Ответов: 26200
Рейтинг: 2137
#72: 2010-04-22 01:23:01 ЛС | профиль | цитата
Tad, ты чего мне тут втираешь, почему исключил из проверки Boyer-Moore, я тебе исправленную версию тестовой проги выложил
Че ты прицепился к этому NewPosEx
------------ Дoбавленo в 01.23:
Tad писал(а):
Без условия в Delphi врет

Где врет, не вижу
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#73: 2010-04-22 01:29:58 ЛС | профиль | цитата
Смотри выше.
nesco писал(а):
я тебе исправленную версию тестовой проги выложил

Проморгал. Сегодня одновременно на трёх компах работаю. Завал. Уже з....ца болит
------------ Дoбавленo в 01.29:
nesco писал(а):
Где врет, не вижу
Я про NewPosEx
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26200
Рейтинг: 2137
#74: 2010-04-22 01:33:12 ЛС | профиль | цитата
Ну и че, что лучше-то
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#75: 2010-04-22 13:38:07 ЛС | профиль | цитата
Завтра попробую сделать на ASM на чисто строковых командах процессора (если разгружусь).
По идее должно быть еще быстрее.
Т.е. продолжение следует.
Всё. Свои тесты запустил. Спокойной ночи.
------------ Дoбавленo в 13.38:
Алгоритм Бойера-Мура можно запускать (спасибо Alex2)
На длинных строках и длинных SubStr работает отлично.
На строках до 64 кб и SubStr до 255 байт - быстрее работает Asm-вариант.
Размеры
Штатный42936
Бойера-Мура 42920
ASM42888

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)