change hash function gives up to 22% speedup #14
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "unknown repository"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wow! Is the 22% speedup affects the entire library when executing JS code?
not always. 3%-10% speedup when executing JS code.
Maybe you rewrite my hash function in assembler?
bottlenecks is copy functions, .Name = .Name + and balansed tree not too fast.
I also change BESENANSIPos to Pos, BESENANSIPosChar to Pos, BESENANSIUpperCase to UpperCase and BESENANSITrim to Trim. It give me -500 bytes in exe ;-)
Look at my last commit.
.Name = .Name +can be changed to add widechars to array and then fast copy to .Name at finish of cycle
@tigrazone
Why just assembler? :)
Try this: (taken from awesome blog (in russian))
Well, and assembler :)
CRC32 parallel calculation
CRC64 parallel calculation
A few words about Aleksandr Sharahov. See Fastcode Winner's List Overview
my hash function is simpler and faster
function thrHashKey(const Key:TBESENString):TBESENHash;
var i,h:longword;
begin
if length(key)<1 then
begin
result:=0;
exit;
end;
h:=ord(Key[1]);
for i:=2 to length(Key) do begin
h:=(h shl 5) - h + ord(Key[i]);
end;
result:=h;
end;
@tigrazone
Why do you call it your function?
It is called X31Hash and it was invented by Karl Nelson more than 17 years ago.
yes! it's X31Hash. same function used in TFPHashList
Function FPHash(const s:shortstring):LongWord;
var
p,pmax : PChar;
begin
{$push}
{$Q-}
Result:=0;
p:=@s[1];
pmax:=@s[length(s)+1];
while (p<pmax) do
begin
Result:=LongWord(LongInt(Result shl 5) - LongInt(Result)) xor LongWord(P^);
Inc(p);
end;
{$pop}
end;
Well, then the FP developers also do not respect the merits and work of other people.
This is not accepted in the open source community.
Honest people are not accepted that way.
And you had impudence to name a function by your name.
@BeRo1985 don't merge this PR, please.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.