Great question. What I found in my own internet "research" is that the vast majority of claims about poker hand evaluators are vague and/or false. There's only one correct and final answer to your question:
Quote:
Originally Posted by Andrew Prock
If people want to make comparisons, it's useful to agree on what you're comparing.
- Andrew
Some yes/no questions you need to consider:
1. Is the input to your function an array of length 7 of ints between 0 and 52 (exclusive)?
2. Can you see from the return value what is the type of hand made? (high-card, pair, etc.).
3. Does your algorithm use a single thread?
4. Is every subsequent input random?
5. Does your algorithm break ties and keep actual ties?
6. Does your algorithm return which cards are the 5 of the "made hand"?
And less important:
A. How much memory does your program use?
B. How much time does it take to set up the lookup tables?
C. Which programming language does your program use?
The hardest case is when all of the 6 answers are "yes". But that doesn't need to be the most useful case: that depends on the application that uses it.
There's a lot of information scattered on the internet. The famous "THE 2+2 thread" where the "seven array lookups algorithm" was born is where the above quote was posted. It is included in a benchmark here:
https://github.com/christophschmalho...ter/XPokerEval. On my laptop it does 600 MH/s, but that only makes sense when including the answers to my questions:
1. Yes
2. Yes
3. Yes
4. No (Subsequent hands of the benchmark are sequential with usually only 1 card difference and that reduces the time immensely. Computations are literally reused).
5. Yes
6. No (It can not be derived which are the 5 cards)
And furthermore:
A. ~130 MB
B. Don't know, the lookup table is supplied as a file that's read into memory.
C. C++
I'm writing a GTO solver and found that the 7-card evaluation is not the performance bottleneck. I think that's why attention to 7-card evaluators decreased the past decade. My Java 7-card evaluator (with answers 1:No, 2:Yes, 3:Yes, 4:No, 5:Yes, 6:No; A: 100MB, B: 2s, C: Java) does 60 MH/s (which is already an achievement) on my laptop when run with Java 17:
https://github.com/alberthendriks/lpokerbot