-
Notifications
You must be signed in to change notification settings - Fork 63
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
FilterBank benchmark in C++ has cycles #1031
Comments
There is no dependency cycle in FilterBank (otherwise it should have been reported by the C++ runtime). This is actually a bug in the dependency analysis or in the instance graph. In the
Admittedly these connection statements are a bit complex and might be unintuitive, but I wanted to explore the possibilities of our connection syntax to compactly create a pipeline. Note that there are no backedges here. Both connection statements form a pipeline where the output of one stage is forwarded to the next (delay0 -> fir0 -> sample -> delay1 -> fir1). This uses the same principle as in the Pipeline example, only here we don't use N times the same stage but combine different stages. But indeed the corresponding diagram shows cycles: When I manually unroll the connection statements like so
then the diagram shows the pipeline without back-edges and there is no cycle detected. |
Some investigation revealed a bug in the compiler (as well as an opportunity for optimization of the generated code). A minimal test that illustrates the problem can be found here in the |
This should be fixed by #1037. But one observation is that using this style of ganged connections may be much less efficient, at least in the C target. |
In the reaction-self-loop branch, we fix a bug where causality loops were not detected when a reaction triggers itself. This exposed a bug in the FilterBanks C++ benchmarks. It has causality loops. These may actually interfere with the validity of the benchmark results...
The text was updated successfully, but these errors were encountered: