Your requested changes. I think removing the dds.set() commands removed the underflow problem but the 1000 * ms delay is still present. The first block represents break_realtime() + 1 ms delay. The second block represents 1100 ms without break_realtime(). The third block represents 1 ms without break_realtime().
from artiq.experiment import *
import numpy as np
import time
class Speedtest(EnvExperiment):
def build(self):
self.setattr_device("core")
self.setattr_device("urukul0_cpld")
self.dds = self.get_device("urukul0_ch3")
def run(self):
self.kernel_init()
t = time.monotonic()
kernel_time = self.kernel_run()
print("pc time (ms)", (time.monotonic() - t)*1000)
print("kernel time (ms)",kernel_time*1000)
@kernel
def kernel_init(self):
self.core.reset()
self.urukul0_cpld.init()
self.dds.init()
delay(1*ms)
@kernel
def kernel_run(self):
t = self.core.get_rtio_counter_mu()
self.core.break_realtime()
delay(1*ms)
self.dds.set(frequency = 50*MHz, amplitude = 0.777) # Adds 750ms
self.dds.set_att(0.0) # Adds 120ms
self.dds.sw.on()
kernel_time = self.core.mu_to_seconds((self.core.get_rtio_counter_mu() - t))
return kernel_time
yields
INFO:dashboard:artiq.dashboard.experiments:Submitted 'repo:Speedtest', RID is 19683
INFO:worker(19683,speedtest.py):print:pc time (ms) 1078.9999999979045
INFO:worker(19683,speedtest.py):print:kernel time (ms) 0.14468
and
from artiq.experiment import *
import numpy as np
import time
class Speedtest(EnvExperiment):
def build(self):
self.setattr_device("core")
self.setattr_device("urukul0_cpld")
self.dds = self.get_device("urukul0_ch3")
def run(self):
self.kernel_init()
t = time.monotonic()
kernel_time = self.kernel_run()
print("pc time (ms)", (time.monotonic() - t)*1000)
print("kernel time (ms)",kernel_time*1000)
@kernel
def kernel_init(self):
self.core.reset()
self.urukul0_cpld.init()
self.dds.init()
delay(1*ms)
@kernel
def kernel_run(self):
t = self.core.get_rtio_counter_mu()
# self.core.break_realtime()
delay(1100*ms)
self.dds.set(frequency = 50*MHz, amplitude = 0.777) # Adds 750ms
self.dds.set_att(0.0) # Adds 120ms
self.dds.sw.on()
kernel_time = self.core.mu_to_seconds((self.core.get_rtio_counter_mu() - t))
return kernel_time
yields
INFO:dashboard:artiq.dashboard.experiments:Submitted 'repo:Speedtest', RID is 19684
INFO:worker(19684,speedtest.py):print:pc time (ms) 1061.9999999980791
INFO:worker(19684,speedtest.py):print:kernel time (ms) 0.147608
and
from artiq.experiment import *
import numpy as np
import time
class Speedtest(EnvExperiment):
def build(self):
self.setattr_device("core")
self.setattr_device("urukul0_cpld")
self.dds = self.get_device("urukul0_ch3")
def run(self):
self.kernel_init()
t = time.monotonic()
kernel_time = self.kernel_run()
print("pc time (ms)", (time.monotonic() - t)*1000)
print("kernel time (ms)",kernel_time*1000)
@kernel
def kernel_init(self):
self.core.reset()
self.urukul0_cpld.init()
self.dds.init()
delay(1*ms)
@kernel
def kernel_run(self):
t = self.core.get_rtio_counter_mu()
# self.core.break_realtime()
delay(1*ms)
self.dds.set(frequency = 50*MHz, amplitude = 0.777) # Adds 750ms
self.dds.set_att(0.0) # Adds 120ms
self.dds.sw.on()
kernel_time = self.core.mu_to_seconds((self.core.get_rtio_counter_mu() - t))
return kernel_time
yields
INFO:dashboard:artiq.dashboard.experiments:Submitted 'repo:Speedtest', RID is 19686
ERROR:worker(19686,speedtest.py):root:Terminating with exception (RTIOUnderflow: RTIO underflow at 192374553848 mu, channel 2, slack -1086875216 mu)
Core Device Traceback (most recent call last):
File "C:\Users\hoodl\Documents\GitHub\Artiq\Experiments\repository/speedtest.py", line 31, in artiq_worker_speedtest.Speedtest.kernel_run(..., ...) (RA=+0x9f4)
self.dds.set(frequency = 50*MHz, amplitude = 0.777) # Adds 750ms
File "<artiq>\coredevice/ad9910.py", line 717, in ... artiq.coredevice.ad9910.AD9910.set<artiq.coredevice.ad9910.AD9910>(...) (inlined)
return self.pow_to_turns(self.set_mu(
File "<artiq>\coredevice/ad9910.py", line 524, in ... artiq.coredevice.ad9910.AD9910.set_mu<artiq.coredevice.ad9910.AD9910>(...) (inlined)
self.write64(_AD9910_REG_PROFILE0 + profile,
File "<artiq>\coredevice/ad9910.py", line 314, in ... artiq.coredevice.ad9910.AD9910.write64<artiq.coredevice.ad9910.AD9910>(...) (inlined)
self.bus.set_config_mu(urukul.SPI_CONFIG, 8,
File "<artiq>\coredevice/spi2.py", line 169, in ... artiq.coredevice.spi2.SPIMaster.set_config_mu<artiq.coredevice.spi2.SPIMaster>(...) (inlined)
rtio_output((self.channel << 8) | SPI_CONFIG_ADDR, flags |
File "ksupport/rtio.rs", line 67, column 14, in (Rust function)
<unknown>
^
artiq.coredevice.exceptions.RTIOUnderflow(0): RTIO underflow at 192374553848 mu, channel 2, slack -1086875216 mu
Traceback (most recent call last):
File "C:\Users\hoodl\.conda\envs\artiq-6\lib\site-packages\artiq\master\worker_impl.py", line 300, in main
exp_inst.run()
File "C:\Users\hoodl\Documents\GitHub\Artiq\Experiments\repository\speedtest.py", line 15, in run
kernel_time = self.kernel_run()
File "C:\Users\hoodl\.conda\envs\artiq-6\lib\site-packages\artiq\language\core.py", line 54, in run_on_core
return getattr(self, arg).run(run_on_core, ((self,) + k_args), k_kwargs)
File "C:\Users\hoodl\.conda\envs\artiq-6\lib\site-packages\artiq\coredevice\core.py", line 137, in run
self.comm.serve(embedding_map, symbolizer, demangler)
File "C:\Users\hoodl\.conda\envs\artiq-6\lib\site-packages\artiq\coredevice\comm_kernel.py", line 644, in serve
self._serve_exception(embedding_map, symbolizer, demangler)
File "C:\Users\hoodl\.conda\envs\artiq-6\lib\site-packages\artiq\coredevice\comm_kernel.py", line 636, in _serve_exception
raise python_exn
artiq.coredevice.exceptions.RTIOUnderflow: RTIO underflow at 192374553848 mu, channel 2, slack -1086875216 mu
ERROR:master:artiq.master.scheduler:got worker exception in run stage, deleting RID 19686