Skip to content

Instantly share code, notes, and snippets.

@nitely
Created August 26, 2019 17:30
Show Gist options
  • Save nitely/c7409d06f78cf0eefd16e74a9e049ad1 to your computer and use it in GitHub Desktop.
Save nitely/c7409d06f78cf0eefd16e74a9e049ad1 to your computer and use it in GitHub Desktop.
bench_unicodedb_ascii.nim
import nimbench
import unicodedb/properties
import unicodedb/types
import unicodedb/widths
import unicodedb/scripts
import unicodedb/decompositions
import unicode
template benchCode(
theProc: untyped,
data: untyped
) {.dirty.} =
var a = theProc(Rune(0))
for k in 0 ..< m:
for v in data:
a = theProc(v)
doNotOptimizeAway(a)
type
dataType = array[100_000, Rune]
proc genUniData(): dataType =
let foo = [
"Ϊ".runeAt(0),
"".runeAt(0),
"弢".runeAt(0),
]
for i in 0 .. result.len-1:
result[i] = foo[i mod foo.len]
const uniData = genUniData()
proc genUniAsciiData(): dataType =
let foo = [
"a".runeAt(0),
"Z".runeAt(0),
"Ϊ".runeAt(0),
"".runeAt(0),
"弢".runeAt(0),
]
for i in 0 .. result.len-1:
result[i] = foo[i mod foo.len]
const uniAsciiData = genUniAsciiData()
proc genAsciiData(): dataType =
let foo = [
Rune(0),
Rune(50),
Rune(127)
]
for i in 0 .. result.len-1:
result[i] = foo[i mod foo.len]
const asciiData = genAsciiData()
bench(uniUnicodeTypes, m):
benchCode(unicodeTypes, uniData)
benchRelative(uniAsciiUnicodeTypes, m):
benchCode(unicodeTypes, uniAsciiData)
benchRelative(asciiUnicodeTypes, m):
benchCode(unicodeTypes, asciiData)
bench(uniProperties, m):
benchCode(properties, uniData)
benchRelative(uniProperties, m):
benchCode(properties, uniAsciiData)
benchRelative(asciiProperties, m):
benchCode(properties, asciiData)
bench(uniUnicodeWidth, m):
benchCode(unicodeWidth, uniData)
benchRelative(uniUnicodeWidth, m):
benchCode(unicodeWidth, uniAsciiData)
benchRelative(asciiUnicodeWidth, m):
benchCode(unicodeWidth, asciiData)
bench(uniUnicodeScript, m):
benchCode(unicodeScript, uniData)
benchRelative(uniUnicodeScript, m):
benchCode(unicodeScript, uniAsciiData)
benchRelative(asciiUnicodeScript, m):
benchCode(unicodeScript, asciiData)
bench(uniDecomposition, m):
var a: Rune
for k in 0 ..< m:
for v in uniData:
for c in v.decomposition():
a = c
doNotOptimizeAway(a)
benchRelative(uniAsciiDecomposition, m):
var a: Rune
for k in 0 ..< m:
for v in uniAsciiData:
for c in v.decomposition():
a = c
doNotOptimizeAway(a)
benchRelative(asciiDecomposition, m):
var a: Rune
for k in 0 ..< m:
for v in asciiData:
for c in v.decomposition():
a = c
doNotOptimizeAway(a)
bench(justIter, m):
for k in 0 ..< m:
memoryClobber()
for v in asciiData:
memoryClobber()
bench(noOp, m):
for i in 0 ..< m:
memoryClobber()
runBenchmarks()
#[
============================================================================
GlobalBenchmark relative time/iter iters/s
============================================================================
GlobalBenchmark 334.15ps 2.99G
============================================================================
/home/esteban/AtomProjects/crap/crap.nim relative time/iter iters/s
============================================================================
uniUnicodeTypes 167.99us 5.95K
uniAsciiUnicodeTypes 89.61% 187.46us 5.33K
asciiUnicodeTypes 100.50% 167.15us 5.98K
uniProperties 234.41us 4.27K
uniProperties 92.28% 254.01us 3.94K
asciiProperties 99.99% 234.42us 4.27K
uniUnicodeWidth 233.99us 4.27K
uniUnicodeWidth 97.24% 240.63us 4.16K
asciiUnicodeWidth 100.01% 233.97us 4.27K
uniUnicodeScript 167.61us 5.97K
uniUnicodeScript 83.57% 200.56us 4.99K
asciiUnicodeScript 83.57% 200.56us 4.99K
uniDecomposition 345.68us 2.89K
uniAsciiDecomposition 156.33% 221.12us 4.52K
asciiDecomposition 775.40% 44.58us 22.43K
justIter 33.43us 29.92K
noOp 0.00fs inf
]#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment