-
Notifications
You must be signed in to change notification settings - Fork 1
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
Documentation #22
Documentation #22
Conversation
One issue that was brought up in earlier discussions comes from the use of a halo or zeros in the Gauss-Seidel example. IIUC, this is currently implemented by using a modified version of OTOH, an other approach would consist in making the matrix itself unaware of the halo. The algorithm itself should therefore take care of iterating only on valid indices. In terms of documentation, this would have the added benefit that boundary tiles have less than 4 neighbors, so that the number of data dependencies is not always the same. It would be interesting to see whether this can be handled in a friendly way by DataFlowTasks and, if so, to use Gauss Seidel as an example to show how to. A first idea that comes to mind to declare dependencies that don't always exist would be something along those lines:
But I'm not sure whether this already works out of the box from a syntax viewpoint. Maybe it also requires implementing new methods like
|
Codecov Report
@@ Coverage Diff @@
## main #22 +/- ##
==========================================
- Coverage 83.33% 81.56% -1.77%
==========================================
Files 10 10
Lines 660 678 +18
==========================================
+ Hits 550 553 +3
- Misses 110 125 +15
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. |
I am lost here, can you guys give me a reference to what you are calling the Gauss-Seidel algorithm? I can't reconcile what I have in mind, which is the iterative method, to this five-point stencil description that I found on the docs 😕 |
Yes, I couldn't agree more. I should have mentioned that this is also a question I asked Vincent yesterday. @Vincent-Sivadon seems to have found this terminology in a paper on dataflow parallelism that I haven't seen yet... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this write-up!
Here are my comments on the brand-new README.
README.md
Outdated
|
||
We'll cover in details the usage and possibilities of the visualization in the documentation. | ||
|
||
Note that the visualization tools are not loaded by default, it requires a `Makie` backend and/or `GraphViz` loaded in the REPL. It's meant to be used in development, so it won't pollute the environment you want to use DFT in. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep! If/when #26 (or something like it) gets merged, we'll have to update the doc here accordingly.
A global comment on this branch is: is there a reason why we need to have generated documentation files (such as |
This allows testing whether all code in the README is runnable. Literate.jl also brings collateral benefits, such as the automatic generation of Jupyter notebooks.
Commit 9085534 introduces a way to automatically generate the The new version of I'll now go ahead and try to resolve all remaining issues with More work is still needed to finalize the full Documenter docs, especially if we want to include all examples. But maybe we can reach pretty quickly a "presentable" state, where all features are documented. And from there we can add more tutorials/examples (maybe using |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the README is now in a state where it can be reviewed by anyone willing to.
I've commented on the few issues that still need to be discussed collectively IMO.
# Let's look at a simple example: | ||
|
||
using DataFlowTasks | ||
DataFlowTasks.reset!() #hide |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unresolved questions regarding reset
:
- do we want to keep it? (cf. DAG environnement not beeing cleaned #24)
- even if so, do we want to advertize its use?
OTOH: if we don't want to have/advertize it, make sure removing it doesn't affect the outcome of the examples shown here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, and if we want to keep reset()
, we'll have to add tests for it.
DataFlowTasks.reset!() | ||
DataFlowTasks.enable_log() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are these lines needed? Would resetlogger!
be enough?
err = norm(F.L*F.U-A,Inf)/max(norm(A),norm(F.L*F.U)) #hide | ||
@show err #hide | ||
@assert err < eps(Float64) #hide |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Naive question: why not something simpler, like
err = norm(F.L*F.U - A) / norm(A)
Also: I arbitrarily put the tolerance to machine precision, but this might not be the right thing to do.
Examples have been restructured, but are not ready yet.
For now it is used only on Cholesky
The documentation effort made by @Vincent-Sivadon is still under way, but I'm creating this WIP PR so that we have a space to discuss issues related to it.