-
Notifications
You must be signed in to change notification settings - Fork 57
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
Joining operation throws overflow exception for small coefficients/dimensions #39
Comments
Hi Yiyun, The join operator tries to convert the constraint representation of polyhedron to the generator representation using the standard Chernikova algorithm. This algorithm involves multiplying coefficients in the constraints with each other multiple times. As a result, depending on the polyhedron, the coefficients can grow arbitrarily large starting from small coefficients (I have seen constraints with coefficients <=5 causing overflow). Cheers, |
Hi Gagan. Your answer seems to suggest that you think there's nothing to do. Even if the algorithm is "standard," isn't it a problem if its use can easily produce an overflow in the way you are using it? A related question is: Would this situation come up in PPL, or is it specific to ELINA because of the conversion you are doing? If the latter, it seems that ELINA has a (potentially severe) limitation compared to PPL, despite ELINA's better performance. What are your thoughts? Thanks, |
Hello again, We're looking at this stuff again and I'm wondering if you can help us understand the line between where overflows are sound (i.e. where you can convert that decomposed piece to In particular we'd like to be able to silence any The way I'm seeing it now is that the overflow detection happens in However, I'm not seeing where it actually checks for To be as concrete as possible:
|
Hi Jose, The exceptions for ELINA are defined here: ELINA/elina_auxiliary/elina_manager.h Line 125 in 4fb9be0
We check for an exception by checking if opk->exn is not zero (both in the meetjoin and resize files). The flag at line 571 sets opk->exn to a non zero value. I can add an option for silencing the printing shortly and let you know when it is added (alternatively, feel free to send a pull request in case if you already implemented this feature). Cheers, |
I'm happy to make a pull-request. Just so that I'm super clear:
So silencing the warning won't mean we miss any warnings of unsoundness, correct? |
Hi Jose, Thanks let me know when you have the request ready. Yes removing the printing of warning will have no effect on the soundness of the analysis as long as the flag is set before the print statement. Cheers, |
This addresses part of the concerns in issue eth-sri#39. If we know the overflow is sound, then we can choose to skip printing to `stderr` when the sound overflow occurs. The implementation is straightforward: * We added an option to `./configure`: `-no-warn-overflow` * When enabled, this adds `-DNO_WARN_OVERFLOW` to `extra_elina_options` * The printing to `stderr` in `elina_poly/opt_pk/vector.c:570` is now under a CPP macro that checks whether `-DNO_WARN_OVERFLOW` is defined.
This addresses part of the concerns in issue eth-sri#39. If we know the overflow is sound, then we can choose to skip printing to `stderr` when the sound overflow occurs. The implementation is straightforward: * We added an option to `./configure`: `-no-warn-overflow` * When enabled, this adds `-DNO_WARN_OVERFLOW` to `extra_elina_options` * The printing to `stderr` in `elina_poly/opt_pk/vector.c:570` is now under a CPP macro that checks whether `-DNO_WARN_OVERFLOW` is defined.
More fixes for geometric parameters
Hi,
The code here joins two 6-dimension boxes. For each dimension, the width is no more than 100. Despite the coefficients, constants, dimensions being relatively small, ELINA throws overflow exception when joining is performed.
Running gdb shows there indeed is an overflow, but what could possibly cause that?
Thanks,
Yiyun
The text was updated successfully, but these errors were encountered: