Skip to content
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

Imprecision in XRA #622

Open
ThomasHaas opened this issue Feb 20, 2024 · 4 comments
Open

Imprecision in XRA #622

ThomasHaas opened this issue Feb 20, 2024 · 4 comments

Comments

@ThomasHaas
Copy link
Collaborator

ThomasHaas commented Feb 20, 2024

I noticed that on EBR, XRA under imm.cat produces a smaller may-set for rf than under other memory models.
After some debugging, I found the source of this discrepancy. After reducing it to its core, I found this

acyclic (po | rf | fr) // Original
// ---- The following all give smaller rf-sets but have the same semantics
acyclic ((po | rf)+ | fr) 
acyclic ((po | rf | fr)+)
acyclic ((po | fr)+ | rf)

There are only two conclusions: Either our XRA handling of acyclicity axioms is imprecise or propagation through transitive closures is somehow wrong.

EDIT: After quickly checking the code, I found that XRA for acyclicity axioms is indeed imprecise because it avoids the computation of the transitive must-closure. Now that we have must rf-edges between threads, it might be worth to compute the transitive closure.

@ThomasHaas ThomasHaas changed the title Imprecision or bug in XRA Imprecision in XRA Feb 21, 2024
@hernanponcedeleon
Copy link
Owner

I don't get the EDIT part of the comment. Where in the code we should compute the transitive closure?

@ThomasHaas
Copy link
Collaborator Author

In the Acyclicity axiom when doing top-down propagation.

@hernanponcedeleon
Copy link
Owner

method Acyclicity.transitivelyDerivableMustEdges()?

@ThomasHaas
Copy link
Collaborator Author

ThomasHaas commented Apr 26, 2024

No, that one is correct. I believe it only is called when doing the active set computation.
The issue is in both the knowledgeClosure functions, which use the must-set of the constrained relations without transitively closing it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants