Skip to content
Timo A edited this page Sep 5, 2016 · 6 revisions

Welcome to the OMPEval wiki!

Performance comparison of 7 card poker hand evaluators

The following tests were run on Intel 3770k @4.28Ghz using a single thread. Results are in millions of evaluations per second. Three different benchmarks were run:

Seq: Sequential evaluation (aka enumeration) performance.

Rand: Evaluation from a pregenerated array of random hands (7 x uint8_t per hand).

Rand2: Evaluation from an array of random Hand objects.

TDM-GCC 5.1 64bit
(-O3 -msse4.1)
TDM-GCC 5.1 32bit
(-O3 -msse4.1)
MSVC2013 64bit
(/O2 /GS- /Oy /GL /arch:AVX)
Seq Rand Rand2 Seq Rand Rand2 Seq Rand Rand2
OMPEval 775 272 520 724 234 471 691 262 529
OMPEval7 (*) 776 284 594 725 241 505 692 271 597
SKPokerEval 223 146 134 99 204 148
2+2 Evaluator 1588 19 (**) 1122 19 1544 19
Plexiq 290 156 232 43 38 46 183 131 174
ACE (decompr.) 80 43 87 75 38 62 69 39 72
HoldemShowdown 93 41 68 (***) 81 42 63
PokerSource 134 77 103 (***) 118 79 102
PokerStove 58 27 70 50 21 57 92 69 87
Senzee 7 card 31 21 32 29 13 23 24 20 27

(*) Compiled with lookup table that has no support for hands smaller than 7 cards.

(**) For 2+2 evaluator this benchmark is a bit meaningless because after 7 cards the partial "Hand object" becomes the final rank, so there's no work to be done.

(***) It is probably possible to build these but there are some linking problems with TDMGCC5.1.

OMPEval performance with different compiler settings

Seq Rand Rand2
TDM-GCC 5.1 64bit
(-O3 -msse4.1)
780 269 544
TDM-GCC 5.1 64bit
(-O3)
771 237 392
TDM-GCC 5.1 64bit
(-O3 -D OMP_SSE2=0)
781 199 567
TDM-GCC 5.1 32bit
(-O3 -msse4.1)
724 234 471
TDM-GCC 5.1 32bit
(-O3 -msse2)
647 192 343
TDM-GCC 5.1 32bit
(-O3 -D OMP_SSE2=0)
498 91 482
MSVC2013 64bit
(/O2 /GS- /Oy /GL /arch:AVX)
648 257 525
MSVC2013 32bit
(/O2 /GS- /Oy /GL /arch:AVX)
368 169 445
MSVC2013 32bit
(/O2 /GS- /Oy /GL /arch:SSE2)
320 174 381
MSVC2013 32bit
(/O2 /GS- /Oy /GL /arch:IA32)
235 107 422