Created
July 6, 2019 00:03
-
-
Save ChadSki/3a05de70cbcfe5df8d8247fe19af880f to your computer and use it in GitHub Desktop.
allocation test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
open System | |
// returns: median value of a list | |
let inline median input = | |
let sorted = input |> Seq.toArray |> Array.sort | |
let m1,m2 = | |
let len = sorted.Length-1 |> float | |
len/2. |> floor |> int, len/2. |> ceil |> int | |
(sorted.[m1] + sorted.[m2] |> float)/2. | |
// n: allocate a (n * n) array at once | |
// x: fill the array with this | |
// returns: milliseconds to do all allocations | |
let medianAllocateTime numTrials numTimes n x = | |
let mutable results = [] | |
for attempt in 1 .. numTrials do | |
printf "." | |
let stopWatch = System.Diagnostics.Stopwatch.StartNew() | |
for i in 1 .. numTimes do | |
Array2D.init n n (fun x y -> x) |> ignore | |
stopWatch.Stop() | |
results <- stopWatch.Elapsed.TotalMilliseconds::results | |
median results | |
[<EntryPoint>] | |
let main argv = | |
let numTrials = 100 | |
let numTimes = 1000 | |
let blank = String.replicate (numTrials - 20) " " | |
let banner = String.replicate numTrials "=" | |
printfn "Testing with %d allocations..." numTimes | |
printfn "%s" banner | |
printfn "\r 1KiB (16*16 * 4) = %.2fms%s" (medianAllocateTime numTrials numTimes 16 0s) blank | |
printfn "\r 2KiB (16*16 * 8) = %.2fms%s" (medianAllocateTime numTrials numTimes 16 0) blank | |
printfn "\r 4KiB (16*16 * 16) = %.2fms%s" (medianAllocateTime numTrials numTimes 16 0L) blank | |
printfn "%s" banner | |
printfn "\r 4KiB (32*32 * 4) = %.2fms%s" (medianAllocateTime numTrials numTimes 32 0s) blank | |
printfn "\r 8KiB (32*32 * 8) = %.2fms%s" (medianAllocateTime numTrials numTimes 32 0) blank | |
printfn "\r 16KiB (32*32 * 16) = %.2fms%s" (medianAllocateTime numTrials numTimes 32 0L) blank | |
printfn "%s" banner | |
printfn "\r 16KiB (64*64 * 4) = %.2fms%s" (medianAllocateTime numTrials numTimes 64 0s) blank | |
printfn "\r 32KiB (64*64 * 8) = %.2fms%s" (medianAllocateTime numTrials numTimes 64 0) blank | |
printfn "\r 64KiB (64*64 * 16) = %.2fms%s" (medianAllocateTime numTrials numTimes 64 0L) blank | |
printfn "%s" banner | |
printfn "\r 64KiB (128*128 * 4) = %.2fms%s" (medianAllocateTime numTrials numTimes 128 0s) blank | |
printfn "\r 128KiB (128*128 * 8) = %.2fms%s" (medianAllocateTime numTrials numTimes 128 0) blank | |
printfn "\r 256KiB (128*128 * 16) = %.2fms%s" (medianAllocateTime numTrials numTimes 128 0L) blank | |
printfn "%s" banner | |
printfn "\r 256KiB (128*128 * 4) = %.2fms%s" (medianAllocateTime numTrials numTimes 256 0s) blank | |
printfn "\r 512KiB (128*128 * 8) = %.2fms%s" (medianAllocateTime numTrials numTimes 256 0) blank | |
printfn "\r 1MiB (128*128 * 16) = %.2fms%s" (medianAllocateTime numTrials numTimes 256 0L) blank | |
printfn "Done." | |
Console.ReadKey() |> ignore | |
0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Testing with 1000 allocations... | |
==================================================================================================== | |
1KiB (16*16 * 4) = 4.42ms | |
2KiB (16*16 * 8) = 4.10ms | |
4KiB (16*16 * 16) = 3.65ms | |
==================================================================================================== | |
4KiB (32*32 * 4) = 9.29ms | |
8KiB (32*32 * 8) = 9.98ms | |
16KiB (32*32 * 16) = 10.39ms | |
==================================================================================================== | |
16KiB (64*64 * 4) = 33.32ms | |
32KiB (64*64 * 8) = 33.28ms | |
64KiB (64*64 * 16) = 33.20ms | |
==================================================================================================== | |
64KiB (128*128 * 4) = 130.49ms | |
128KiB (128*128 * 8) = 131.86ms | |
256KiB (128*128 * 16) = 130.49ms | |
==================================================================================================== | |
256KiB (128*128 * 4) = 523.45ms | |
512KiB (128*128 * 8) = 517.18ms | |
1MiB (128*128 * 16) = 517.35ms | |
Done. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment