forked from M-Labs/artiq
add speed benchmark
This commit is contained in:
parent
86fef7b53b
commit
1ddb19277f
|
@ -0,0 +1,142 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
from artiq import *
|
||||||
|
|
||||||
|
|
||||||
|
class _PayloadNOP(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class _PayloadCoreNOP(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.attr_device("core")
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def run(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class _PayloadCoreSend100Ints(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.attr_device("core")
|
||||||
|
|
||||||
|
def devnull(self, d):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def run(self):
|
||||||
|
for i in range(100):
|
||||||
|
self.devnull(42)
|
||||||
|
|
||||||
|
|
||||||
|
class _PayloadCoreSend1MB(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.attr_device("core")
|
||||||
|
|
||||||
|
def devnull(self, d):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def run(self):
|
||||||
|
# FIXME: make this a single list
|
||||||
|
# affected by issue #82 at the moment
|
||||||
|
data = [0 for _ in range(20000//4)]
|
||||||
|
for i in range(50):
|
||||||
|
self.devnull(data)
|
||||||
|
|
||||||
|
|
||||||
|
class _PayloadCorePrimes(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.attr_device("core")
|
||||||
|
|
||||||
|
def devnull(self, d):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def run(self):
|
||||||
|
for x in range(1, 1000):
|
||||||
|
d = 2
|
||||||
|
prime = True
|
||||||
|
while d*d <= x:
|
||||||
|
if x % d == 0:
|
||||||
|
prime = False
|
||||||
|
break
|
||||||
|
d += 1
|
||||||
|
if prime:
|
||||||
|
self.devnull(x)
|
||||||
|
|
||||||
|
|
||||||
|
class SpeedBenchmark(EnvExperiment):
|
||||||
|
"""Speed benchmark"""
|
||||||
|
def build(self):
|
||||||
|
self.attr_argument("mode", EnumerationValue(["Single experiment",
|
||||||
|
"With pause",
|
||||||
|
"With scheduler"]))
|
||||||
|
self.attr_argument("payload", EnumerationValue(["NOP",
|
||||||
|
"CoreNOP",
|
||||||
|
"CoreSend100Ints",
|
||||||
|
"CoreSend1MB",
|
||||||
|
"CorePrimes"]))
|
||||||
|
self.attr_argument("nruns", NumberValue(10, min=1, max=1000))
|
||||||
|
self.attr_device("core")
|
||||||
|
self.attr_device("scheduler")
|
||||||
|
|
||||||
|
def run_with_scheduler(self):
|
||||||
|
nruns = int(self.nruns)
|
||||||
|
|
||||||
|
donop_expid = dict(self.scheduler.expid)
|
||||||
|
donop_expid["class_name"] = "_Payload" + self.payload
|
||||||
|
donop_expid["arguments"] = {}
|
||||||
|
for i in range(nruns):
|
||||||
|
self.scheduler.submit(self.scheduler.pipeline_name, donop_expid,
|
||||||
|
self.scheduler.priority, None, False)
|
||||||
|
|
||||||
|
report_expid = dict(self.scheduler.expid)
|
||||||
|
report_expid["class_name"] = "_Report"
|
||||||
|
report_expid["arguments"] = {
|
||||||
|
"start_time": time.monotonic(),
|
||||||
|
"nruns": nruns}
|
||||||
|
self.scheduler.submit(self.scheduler.pipeline_name, report_expid,
|
||||||
|
self.scheduler.priority, None, False)
|
||||||
|
|
||||||
|
def run_without_scheduler(self, pause):
|
||||||
|
payload = globals()["_Payload" + self.payload](*self.dbs())
|
||||||
|
|
||||||
|
start_time = time.monotonic()
|
||||||
|
for i in range(int(self.nruns)):
|
||||||
|
payload.run()
|
||||||
|
if pause:
|
||||||
|
self.core.comm.close()
|
||||||
|
self.scheduler.pause()
|
||||||
|
end_time = time.monotonic()
|
||||||
|
|
||||||
|
self.set_result("benchmark_run_time",
|
||||||
|
(end_time-start_time)/self.nruns,
|
||||||
|
realtime=True)
|
||||||
|
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
if self.mode == "Single experiment":
|
||||||
|
self.run_without_scheduler(False)
|
||||||
|
elif self.mode == "With pause":
|
||||||
|
self.run_without_scheduler(True)
|
||||||
|
elif self.mode == "With scheduler":
|
||||||
|
self.run_with_scheduler()
|
||||||
|
else:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
|
||||||
|
class _Report(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.attr_argument("start_time")
|
||||||
|
self.attr_argument("nruns")
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
end_time = time.monotonic()
|
||||||
|
self.set_result("benchmark_run_time",
|
||||||
|
(end_time-self.start_time)/self.nruns,
|
||||||
|
realtime=True)
|
Loading…
Reference in New Issue