-
Forum: FreePascal
by Ginko,
9. Jun 2013
Das gute abschneiden der Standard PosEx Funktion bei dir wundert mich schon sehr.
Also bei Post 42.
Meine Daten zum Test:
CPU Typ DualCore Intel Core 2 Duo E6400, 1600 MHz (6 x 267) (StandardMax 2400 Mhz, auf 1600 festgelegt über Energieoptionen)
2 GB Speicher
Win 7 32Bit
Lazarus 1.0.8
@Furtbichler ich hatte auch schon mal einen QS nach Sunday drinnen, der hat aber nicht gut...
-
Forum: FreePascal
by Ginko,
9. Jun 2013
Moin,
Bei mir sieht das ganz anders aus ?! Ich hab mal noch hier den dazu genommen http://www.delphipraxis.net/711182-post1.html, der schlägt sich bei mir bis jetzt am besten (Alles im Anhang).
"Taxi"
BMH Count: 100000 in 503ms
SP Search Count: 100000 in 785ms
Asm AmatProf: 100000 in 743ms
QSSearch Count: 100000 in 396ms <---
Asm himitsu: 100000 in 1463ms
Std PosEx...
-
Forum: FreePascal
by Ginko,
8. Jun 2013
Ahh ja jetzt läufts, Danke euch! Sehr schön. Besonders bei sehr langen Strings und bei einem Buchstaben liegt die ASM Version bei meinen Tests vorne. Teilweise nochmal doppelt so schnell wie der BMH :shock:. Im Mittelfeld allerdings ist der BMH noch vorne.
-
Forum: FreePascal
by Ginko,
8. Jun 2013
Ja klar.
-
Forum: FreePascal
by Ginko,
8. Jun 2013
Bei meinem letzen Testprogramm (Anhang 5) ist der BMH nur bei einem Buchstaben etwas langsamer als die Standard Funktion. Ansonsten ist er meistens 2 bis 3 mal schneller. Der letzte Test hat das ganze Alphabet und auch längere Wörter. Das entspricht eher der Anwendung für die ich den Algorithmus brauche.
Die Assembler Suche bringt immer noch 0 Funde in Lazarus schade...
Mfg
-
Forum: FreePascal
by Ginko,
7. Jun 2013
Bei der Version des BMH mit dem Record tritt bei mir noch ein merkwürdiger Fehler auf. Gibt man als Suchwort "Franz jagt im komplett verwahrlosten Taxi quer durch Bayer" findet er nur die Hälfte der Ergebnisse. Der Ursprüngliche BMH ohne Record findet alle. Aber der Fehler war bis jetzt nur bei dieser speziellen Wortfolge...
: Im Anhang ist nochmal der Test, der ohne Fehler läuft. Außerdem...
-
Forum: FreePascal
by Ginko,
7. Jun 2013
Hmm bei mir in Lazarus auch 0 Funde, aber ich musste ein paar Sachen ändern, denn der Lazarus Inline Assembler hat so seine Eigenarten. Der übernimmt einiges nicht, was in Delphi klappt...
-
Forum: FreePascal
by Ginko,
7. Jun 2013
Das habe ich bereits gemacht im Anhang 4, Horst_ hat es noch etwas angepasst und eine überflüssige Varible (von mir) rausgeschmissen.
function Search_BMH_Count(const SuchText,SuchWort:string):integer;
var
n, k, j: integer;
Large: integer;
begin
BC := PreProcess_BMH_BC(SuchWort);
with BC do
begin
n := Length(SuchText);
-
Forum: FreePascal
by Ginko,
6. Jun 2013
So jetzt läufts, ab 2 oder 3 Zeichen wird der BMH deutlich schneller.
Ab einer gewissen Länge des Suchwortes wird die Standard Funktion bei mir aber wieder schneller, ist das normal ?
Hier nochmal der der Angepasste Code mit Test:
-
Forum: FreePascal
by Ginko,
6. Jun 2013
Danke für den Hinweis das werde ich mal versuchen, hört sich plausibel an.
-
Forum: FreePascal
by Ginko,
6. Jun 2013
Hi und Danke für die Antworten.
Im Anhang ist ein Projekt welches eine Testdatei erstellen kann (Zeilenlänge nach Wahl) und die Zeit mit dem QueryPerformanceCounter misst.
Zum testen habe ich den Code von Furtbichler genommen, allerdings musste ich ihn noch etwas anpassen, damit das mit dem Offset klappt.
Gezählt wird jetzt jedenfalls absolut korrekt. Aber BMH ist bis zu 5 mal langsamer....
-
Forum: FreePascal
by Ginko,
5. Jun 2013
Hier ist mal mein Versuchsaufbau:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, BMH, strutils;
type
-
Forum: FreePascal
by Ginko,
5. Jun 2013
Zur Sicherheit habe ich mal nicht meine NextPos geholt, sondern hier diese http://www.swissdelphicenter.ch/de/showcode.php?id=474. Wenn ich hier Pos mit Search_BMH_Unrolled ersetze fehlen immer ein haufen Wörter.
function NextPosSwiss(SearchStr, Str: string; Position: Integer): Integer;
begin
Delete(Str, 1, Position - 1);
Result := Search_BMH_Unrolled(Str,SearchStr); //Pos(SearchStr,...
-
Forum: FreePascal
by Ginko,
5. Jun 2013
Danke, den hatte ich auch grad gefunden nur etwas weniger ausführlich. Beim testen fehlen aber fast die Hälfte der Wörter. Vielleicht habe ich auch einen Fehler in der NextPos Funktion, muss mal schauen.
-
Forum: FreePascal
by Ginko,
5. Jun 2013
Danke für die Antwort. Schade das die fehlerhaft sind...
So eine ähnliche Implementierung hatte ich schon. Ich werde das ganze mal noch hier mit versuchen http://www.delphipraxis.net/712289-post42.html. Allerdings meckert hier Lazarus bei einigen Assemblerbefehelen.
Z.B. hier:
@FillSkip: movzx edx, // SearchFor
FastPosUnit.pas(85,30) Error: Asm: invalid combination of opcode and...
-
Forum: FreePascal
by Ginko,
4. Jun 2013
Hallo, hier diese Klasse http://www.delphipraxis.net/108604-post5.html, zum durchsuchen von Textdateinen, teste ich gerade. Allerdings gehen ab und zu ein paar Wörter verloren...
Ich weiß jetzt nicht ob es an Lazarus liegt oder ob ich sonst ein Fehler eingebaut habe.
Den Code, den ich aus dem oben verlinkten Projekt übernommen habe und unter Lazarus zum laufen gebracht habe, ist im Anhang....