Skip to content

Commit

Permalink
Improve benchmark scripts
Browse files Browse the repository at this point in the history
- Split cpsm benchmarking off from input data so that input data can be
  reused for other matchers.

- Add --iterations and --threads to bench_cpsm.py.
  • Loading branch information
nixprime committed Jun 2, 2015
1 parent a93c768 commit 54c497d
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 14 deletions.
18 changes: 4 additions & 14 deletions python/bench.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@

from __future__ import print_function

import time

import cpsm
import linuxclock

Expand Down Expand Up @@ -48755,18 +48753,10 @@
"firmware/mts_cdma.fw.ihex",
]

ITERATIONS = 30
QUERIES = ("", "s", "si", "sig", "sign", "signa", "signal")

LIMIT = 10

if __name__ == "__main__":
for query in ("", "s", "si", "sig", "sign", "signa", "signal"):
times = []
for _ in xrange(ITERATIONS):
start = linuxclock.monotonic()
results = cpsm.ctrlp_match(ITEMS, query, limit=LIMIT, ispath=True)
finish = linuxclock.monotonic()
times.append(finish - start)
print("Query '%s': avg time %fs, min time %fs, results: [%s]" % (
query, sum(times) / len(times), min(times),
", ".join("'%s'" % r for r in results)))
MATCH_MODE = "full-line"

DEFAULT_ITERATIONS = 30
44 changes: 44 additions & 0 deletions python/bench_cpsm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env python

# cpsm - fuzzy path matcher
# Copyright (C) 2015 Jamie Liu
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import print_function

import argparse

import bench
import cpsm
import linuxclock

if __name__ == "__main__":
argp = argparse.ArgumentParser()
argp.add_argument("-n", "--iterations", nargs="?", type=int,
default=bench.DEFAULT_ITERATIONS,
help="number of iterations per query")
argp.add_argument("-t", "--threads", nargs="?", type=int, default=0,
help="number of matcher threads")
args = argp.parse_args()
for query in bench.QUERIES:
times = []
for _ in xrange(args.iterations):
start = linuxclock.monotonic()
results = cpsm.ctrlp_match(bench.ITEMS, query, limit=bench.LIMIT,
ispath=True, nr_threads=args.threads)
finish = linuxclock.monotonic()
times.append(finish - start)
print("Query '%s': avg time %fs, results: [%s]" % (
query, sum(times) / len(times),
", ".join("'%s'" % r for r in results)))

0 comments on commit 54c497d

Please sign in to comment.