Skip to content

Replace System.Random with Xorshift RNG.#13

Merged
jlao merged 3 commits intomasterfrom
optimize-rng
Mar 12, 2019
Merged

Replace System.Random with Xorshift RNG.#13
jlao merged 3 commits intomasterfrom
optimize-rng

Conversation

@jlao
Copy link
Copy Markdown
Owner

@jlao jlao commented Mar 11, 2019

A good chunk of time was spent in System.Random when we had to do evictions. Swapping out System.Random with a Xorshift RNG.

https://en.wikipedia.org/wiki/Xorshift

RngPerf benchmark shows Xorshift is quite a bit faster.

BenchmarkDotNet=v0.11.4, OS=Windows 10.0.17763.316 (1809/October2018Update/Redstone5)
Intel Core i9-9900K CPU 3.60GHz, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=2.1.504
  [Host] : .NET Core 2.1.8 (CoreCLR 4.6.27317.03, CoreFX 4.6.27317.03), 64bit RyuJIT
  Core   : .NET Core 2.1.8 (CoreCLR 4.6.27317.03, CoreFX 4.6.27317.03), 64bit RyuJIT

Job=Core  Runtime=Core  
Method Mean Error StdDev Ratio Rank
Random 8.779 ns 0.1190 ns 0.1113 ns 1.00 2
XortShiftRandom 1.116 ns 0.0069 ns 0.0064 ns 0.13 1

Also better performance in HashCollision benchmark which forces evictions.

Before

Method N Mean Error StdDev Rank
CacheTable 32 950.3 ns 2.011 ns 1.570 ns 1
CacheTable 64 1,876.8 ns 4.252 ns 3.769 ns 2

After

Method N Mean Error StdDev Rank
CacheTable 32 883.7 ns 2.390 ns 2.235 ns 1
CacheTable 64 1,740.6 ns 8.394 ns 7.852 ns 2

@jlao jlao merged commit c760c7b into master Mar 12, 2019
@jlao jlao deleted the optimize-rng branch March 12, 2019 05:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant