-
-
Notifications
You must be signed in to change notification settings - Fork 87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Code coverage issues, performance and discrepancies #1151
Comments
No, it's a mistake. I've fixed it.
Well not really. The slow part is LLVM and in the JIT mode that only gets invoked when the code is executed frequently enough to be worthwhile. This simulation is so short that most of it can run just fine in the interpreter. |
Thanks for looking into this. Did you manage to reproduce the issue with logs ? |
Yes but it needs VUnit/vunit#1098. |
A follow-up of: #1150
I see that the run-time of simple test (the
device_id
as in the previous issue) differs a lot when coverageis enabled vs. the case when it is disabled (e.g. by factor of 4).
Majority of time is consumed due to the elaboration. When coverage is enabled, the code is always generated
AOT. E.g. progress bar with coverage:
vs without coverage:
In my case
DEFAULT_JIT=true
. I tried to modifynvc.c
not to enforce AOT generation when coverage is enabled,and with coverage and AOT not enforced, the elab time with coverage is more-less similar as without coverage.
Is there a reason why with coverage AOT is enforced ?
I am surprised by such huge difference, most of the code for the TB needs to be generated anyway for the TB.
Maybe the difference is the code for those huge constant arrays
reference_data_set_*
that are not used inthis test, so that is where the savings are from (we discussed this in VUnit/vunit#1036).
There is one other issue I get. When running without coverage (therefore with JIT), I get simulation log flooded
with:
at many simulation times. This is expected since I drive DUT inputs to X besides SETUP+HOLD around
the edge when DUT should sample them, so the metavalues do propagate to many places. I know I can disable this
with
--ieee-warnings
. What is strange is that I do not get these warnings fired when the coverage is enabled(and code is generated AOT). I would expect equal behavior regardless of the compilation mode.
The text was updated successfully, but these errors were encountered: