Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming > #2050
| From | "aminer" <aminer@videotron.ca> |
|---|---|
| Newsgroups | comp.programming.threads, comp.programming |
| Subject | Re: Parallel Hashlist was updated to version 1.43 |
| Date | 2012-08-10 12:36 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <k03dah$349$1@dont-email.me> (permalink) |
| References | <k01m6q$a3u$5@dont-email.me> <k031tr$qrh$8@dont-email.me> |
Cross-posted to 2 groups.
Hello, I have updated parallelhashlist to version 1.44 What have changed in version 1.44 ? I have corrected a bug in the constructor, Before, it was: if (AHashSize mod size2) <> 0 then size2:=size2+1; In version 1.44 i have corrected the bug by changing size2 to size1: if (AHashSize mod size1) <> 0 then size2:=size2+1; And after that i am setting correctly the array fcount1(the independant counters , that count the number of entries , for each segment of the hashtable) and the array mrew((multiple-readers-exclusive-writer locks) like this: setlength(fcount1,size2); for i:=0 to size2-1 do fcount1[i]:=0; for i:=0 to size2-1 do mrew[i]:=TOmniMREW.create; Sincerely, Amine Moulay Ramdane Sincerely, Amine Moulay Ramdane. "aminer" <aminer@videotron.ca> wrote in message news:k031tr$qrh$8@dont-email.me... > > > Hello, > > Parallel Hashlist was updated to version 1.44 > > > You can download parallelhashlist from: > > > http://pages.videotron.com/aminer/ > > > > Sincerely, > Amine Moulay Ramdane. > > > > "aminer" <aminer@videotron.ca> wrote in message > news:k01m6q$a3u$5@dont-email.me... >> >> Hello all, >> >> >> Parallel Hashlist was updated to version 1.43 >> >> In the previous version i have set the number of lightweight >> MREWs(multiple-readers-exclusive-writer) >> to 128 but i have decided to change that in version 1.43 so that you can >> give a variable >> number of MREWS, this will scale better and now the constructor will look >> like this: >> >> hash1:=TParallelHashList.create(trait, Hashnize, number_of_MREWS); >> >> and the number_of_MREWS must be less or equal to the Hashsize >> >> also i have given you two examples inside the zipfile, but please note >> that >> the IntToStr() that i am using insode the test files don't scale well, >> but in reality >> and in fact parallel hashlist does scale very well if you don't use >> IntToStr().. >> >> Description: >> >> A parallel HashList with O(1) best case and O(log(n)) worst case access >> that >> uses lock striping and lightweight >> MREWs(multiple-readers-exclusive-writer) , >> this allows multiple threads to write and read concurently. also >> parallelhashlist >> maintains an independant counter , that counts the number of entries , >> for each >> segment of the hashtable and uses a lock for each counter, this is also >> for better scalability. >> >> Note: When i have done those benchmarks , there was not enough/much items >> organized as a self-balancing tree in the individual chains of the >> hashtable, so , >> almost all the items was found and inserted in O(1) , so the parallel >> part in the >> Amdahl equation was not much bigger compared to to the serial part. But >> you >> will notice in pratice that as soon as you will have more items on the >> chains of >> the Hash table , organized as self-balancing tree, with a worst case >> log(n) , the >> parallel part will become bigger in the Amdahl equation and you will have >> better >> performance and scalability than the numbers in the graph of the >> benchmarks ... >> Please pass a hashsize and the number of mrews in power of 2 to the >> constructor >> by using the shl operation for example like this >> >> trait:=TCaseinsensitiveTraits.create;; >> hash1:=TParallelHashList.create(trait,1 shl 25,1 shl 25); >> >> Why do you have to use a power of 2 ? >> >> Please read this: >> >> "Power-of-Two Hash Table Size >> >> Any data structures 101 book will say choose a prime for the number of >> buckets, >> so that the bucket's index can easily be computed by h(k) = k mod m, >> where k is >> the key value and m is the bucket size. While this approach is >> straight-forward, >> there are a number of issues with it, including slow modulo performance. >> ConcurrentHashMap instead uses a power-of-two rule >> >> http://work.tinou.com/2008/09/performance-optimization-in-concurrenthashmap.html " >> >> I am using modulo functions inside parallelhashlist, and using a number >> of locks in power of 2, >> so you have to use hashsize in power of 2 , this will make the modulo >> function of the delphi >> and freepascal compilers 10X faster. >> >> >> You can download parallel hashlist from: >> >> >> http://pages.videotron.com/aminer/ >> >> >> >> Sincerely, >> Amine Moulay Ramdane. >> >> >> >> > >
Back to comp.programming | Previous | Next — Previous in thread | Find similar | Unroll thread
Parallel Hashlist was updated to version 1.43 "aminer" <aminer@videotron.ca> - 2012-08-09 19:55 -0500
Re: Parallel Hashlist was updated to version 1.43 "aminer" <aminer@videotron.ca> - 2012-08-10 09:21 -0500
Re: Parallel Hashlist was updated to version 1.43 "aminer" <aminer@videotron.ca> - 2012-08-10 12:36 -0500
csiph-web