-
Notifications
You must be signed in to change notification settings - Fork 6
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
zstd #16
Comments
Ah, and it requires goblint/analyzer#557 again |
It works non-incrementally, but when I try to run it (on
@stilscher said she'd take a look. May be related to goblint/analyzer#574 |
The stacktrace looks very similar to the issue I accidentally happened upon indeed: goblint/analyzer#542 (comment). Although actually it doesn't stem from there being a different number of statements, but rather locals: List.iter2 (fun l o_l -> l.vid <- o_l.vid) f.slocals old_f.slocals; |
We managed to get the incremental analysis to work with the additional option The problem were multiple functions with the name But there are also duplicate global variables in the CIL file at which one needs to look. |
A not too rigorous configuration that worked well for an analysis (took 5-6min for the non-incremental run) is:
Additionally adding intervals led to a steadily increasing number of contexts and I aborted after ~30min. |
You might also want to use If we want to get the runtime a bit higher, we could also try:
|
Also, instead of deleting the contents of |
After bumping goblint-cil, we now have zero CIL warnings when working with this repo 💪 |
For the incremental run on zstd even on a program without any changes, the Yesterday we, @stilscher @michael-schwarz and I, looked further into this. It turns out that most of this incremental solving time, around >2,7 seconds, was spent on the hascons-relifting. If one disables hashconsing, the overall runtime for a non-incremental run is somewhat degraded, but not too much (roughly from 131 seconds to 138 seconds). There was some significant on memory usage though, IIRC. @stilscher has the precise numbers. There is no easy fix to get rid of the relifting in the non-server incremental mode, as weak hashtables used for hashconsing cannot be marshaled (at least not directly). For the server mode, one could probably get away with skipping the relifting in the solver, but having to run experiments in server mode might make things more complicated. One might just prefer to use the incremental analysis without hash-consing. |
Here are the numbers that we collected for a non-incremental run with hashconsing:
and without hashconsing
|
I tried adding |
If inlines merging is enabled again, aren't all the "is used for two distinct globals" warnings just due to the silly way zstd Makefile uses relative paths? If you read the warnings, they're all about
|
Yesterday I looked into the data races Goblint finds in zstd. Besides the valid data race on
Unfortunately, also enabling var_eq causes the analysis to not terminate in at least 40 minutes:
With just symb_locks, it terminates in just 5 minutes:
Notably, var_eq causes an extreme number of contexts to appear compared to without it, so that's probably the source of non-termination. I haven't yet tried looking into what variable equalities end up collecting into those contexts. |
The issue is avoided using |
By the way, the bigger-benchmarks confs don't declare |
Using goblint/analyzer#690, it's actually possible to get rid of all the spurious races now. |
After all the unsoundness saga and subsequent precision improvement attempt, it's revealed that zstd has some intricate race-freedom reasons, which Goblint is far from being able to handle: goblint/analyzer#707 (comment). |
I am getting this error when trying to run with efficiency.py: Am I missing some kind of config option? |
The most likely culprit would be that the compilation database is not generated correctly. Have you checked the contents of the |
Compile commands is empty: [] |
You probably need to do |
This cannot be the case, because the script efficency.py clones zstd from git on every execution. Therefore make is executed every time on a fresh zstd folder. |
I think @stilscher is the one best equipped to help you here, she did the benchmarking for zstd for our last submission. |
I was not able to reconstruct the problem. I ran |
Perhaps I am using the wrong compiledb. I installed mine through pip. The version is 0.10.1. Is there another compiledb tool? |
Not that I know of. I am using the same version, also installed through pip. |
Are you sure you are on the correct branch? I dont get this make error. Perhaps we also have differen opam switch configurations? |
7543085013db1a20a848d166e5931edc49e3cc2f
compiledb
succeedsxmmintrin.h
:/usr/lib/gcc/x86_64-linux-gnu/7/include/xmmintrin.h:120: Unimplemented: doInit: unexpected NEXT_INIT for float __attribute__((__vector_size__(16),__may_alias__))
make zstd
includes/assert.h
of Goblint for the parsing to succeed?So parsing and everything is also non-horrible here. The program does contain threads.
With
./goblint zstd.cil.c --disable ana.base.context.non-ptr --disable sem.unknown_function.spawn --set ana.thread.domain plain --enable exp.earlyglobs --set ana.base.privatization none --enable dbg.print_dead_code &> zstd.cil.out -v
The text was updated successfully, but these errors were encountered: