Index: benchmark/plot.py
===================================================================
--- benchmark/plot.py	(revision e5e23349fb2ed547808db9735a26d1e9333423f6)
+++ benchmark/plot.py	(revision 41a6a787c1e668b26236802b7bf394e9d19c8b68)
@@ -18,7 +18,17 @@
 import statistics
 import sys
-
+import time
+
+import matplotlib
 import matplotlib.pyplot as plt
-from matplotlib.ticker import EngFormatter
+from matplotlib.ticker import EngFormatter, ScalarFormatter
+
+def fmtDur( duration ):
+	if duration :
+		hours, rem = divmod(duration, 3600)
+		minutes, rem = divmod(rem, 60)
+		seconds, millis = divmod(rem, 1)
+		return "%2d:%02d.%03d" % (minutes, seconds, millis * 1000)
+	return " n/a"
 
 class Field:
@@ -32,8 +42,8 @@
 field_names = {
 	"ns per ops"            : Field('ns'    , 0, False),
-	"Number of processors"  : Field(''      , 1, False),
+	"Number of processors"  : Field(''      , 1, "exact"),
 	"Ops per procs"         : Field('Ops'   , 0, False),
 	"Ops per threads"       : Field('Ops'   , 0, False),
-	"ns per ops/procs"      : Field(''      , 0, False, _name = "Latency ((ns $/$ Operation) $\\times$ Processor)" ),
+	"ns per ops/procs"      : Field(''      , 0, False, _name = "ns $\\times$ (Processor $/$ Total Ops)" ),
 	"Number of threads"     : Field(''      , 1, False),
 	"Total Operations(ops)" : Field('Ops'   , 0, False),
@@ -67,4 +77,7 @@
 	for entry in in_data:
 		name = entry[0]
+		if options.filter and not name.startswith(options.filter):
+			continue
+
 		if not name in series:
 			series[name] = {'x':[], 'y':[]}
@@ -124,4 +137,11 @@
 	elif field_names[x].log:
 		ax.set_xscale('log')
+		if field_names[x].log == "exact":
+			xvals = set()
+			for s in series.values():
+				xvals |= set(s['x'])
+			ax.set_xticks(sorted(xvals))
+			ax.get_xaxis().set_major_formatter(ScalarFormatter())
+			plt.xticks(rotation = 45)
 	else:
 		plt.xlim(field_names[x].min, mx + 0.25)
@@ -139,8 +159,11 @@
 
 	print("Results Ready")
+	start = time.time()
 	if options.out:
 		plt.savefig(options.out, bbox_inches='tight')
 	else:
 		plt.show()
+	end = time.time()
+	print("Took {}".format(fmtDur(end - start)))
 
 
@@ -156,6 +179,10 @@
 	parser.add_argument('--logy', action='store_true', help="if set, makes the y-axis logscale")
 	parser.add_argument('--MaxY', nargs='?', type=int, help="maximum value of the y-axis")
+	parser.add_argument('--filter', nargs='?', type=str, default="", help="if not empty, only print series that start with specified filter")
 
 	options =  parser.parse_args()
+
+	# if not options.out:
+	# 	matplotlib.use('SVG')
 
 	# ================================================================================
@@ -179,5 +206,9 @@
 			fields.add(label)
 
-	# find the common prefix on series for removal
+	# filter out the series if needed
+	if options.filter:
+		series = set(filter(lambda elem: elem.startswith(options.filter), series))
+
+	# find the common prefix on series for removal (only if no filter)
 	prefix = os.path.commonprefix(list(series))
 
