-
Notifications
You must be signed in to change notification settings - Fork 2
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
New communication strategy: AllToAll #260
Conversation
…to feature/alltoall
Pull Request Test Coverage Report for Build 9411100570Details
💛 - Coveralls |
Benchmark resultJudge resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsA ratio greater than
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfoTarget
Baseline
Target resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Baseline resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Runtime information
Architecture: x86_64
Benchmark resultJudge resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsA ratio greater than
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfoTarget
Baseline
Target resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Baseline resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Runtime information
Architecture: x86_64
Benchmark resultJudge resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsA ratio greater than
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfoTarget
Baseline
Target resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Baseline resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Runtime information
Architecture: x86_64
Benchmark resultJudge resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsA ratio greater than
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfoTarget
Baseline
Target resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Baseline resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Runtime information
Architecture: x86_64
Benchmark resultJudge resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsA ratio greater than
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfoTarget
Baseline
Target resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Baseline resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Runtime information
Architecture: x86_64
Benchmark resultJudge resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsA ratio greater than
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfoTarget
Baseline
Target resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Baseline resultBenchmark Report for /home/runner/work/Rimu.jl/Rimu.jlJob Properties
ResultsBelow is a table of this job's results, obtained by running the benchmarks.
Benchmark Group ListHere's a list of all the benchmark groups executed by this job:
Julia versioninfo
Runtime information
Architecture: x86_64 |
Pull Request Test Coverage Report for Build 9688534414Details
💛 - Coveralls |
Pull Request Test Coverage Report for Build 9689023607Details
💛 - Coveralls |
Pull Request Test Coverage Report for Build 9689659963Details
💛 - Coveralls |
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 left a few comments. Looks all right although I cannot say that I have fully grokked how AllToAll
works.
|
||
```julia | ||
julia> using Rimu.DictVectors: SegmentedBuffer | ||
|
||
julia> buf = SegmentedBuffer{Int}() | ||
0-element SegmentedBuffer{Int64} | ||
|
||
julia> Rimu.DictVectors.replace_collections!(buf, [[1,2,3], [4,5]]) | ||
2-element SegmentedBuffer{Int64}: | ||
[1, 2, 3] | ||
[4, 5] | ||
|
||
julia> Rimu.DictVectors.replace_collections!(buf, [[1], [2,3], [4]]) | ||
3-element SegmentedBuffer{Int64}: | ||
[1] | ||
[2, 3] | ||
[4] | ||
``` | ||
""" |
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.
Maybe add a link to SegmentedBuffer
?
src/DictVectors/communicators.jl
Outdated
""" | ||
SegmentedBuffer | ||
SegmentedBuffer{T} <: AbstractVector{AbstractVector{T}} | ||
|
||
Multiple vectors stored in a single buffer with MPI communication support. Used in the | ||
[`PointToPoint`](@ref) communication strategy. | ||
|
||
Multiple vectors stored in a simple buffer with MPI communication. | ||
# Supported operations | ||
|
||
See [`replace_collections!`](@ref), [`mpi_send`](@ref), [`mpi_recv_any!`](@ref). | ||
* [`replace_collections!`](@ref): insert data into the buffers | ||
* [`mpi_send`](@ref): send the contents of a buffer to a given rank | ||
* [`mpi_recv_any!`](@ref): receive a message sent by [`mpi_send`](@ref) from any rank, | ||
storing the contents in this buffer | ||
|
||
See also: [`NestedSegmentedBuffer`](@ref). | ||
""" |
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.
This is a bit abstract. Maybe adding a link to replace_collections!
, where an example is shown, might be helpful.
@@ -269,18 +304,25 @@ mpi_size(ptp::PointToPoint) = ptp.mpi_size | |||
mpi_comm(ptp::PointToPoint) = ptp.mpi_comm | |||
|
|||
function synchronize_remote!(ptp::PointToPoint, w) |
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 find the docstrings of synchronize_remote!
, collect_local!
, local_segments
, and remote_segments
rather confusing. What does synchronize_remote!
actually do?
It also seems that they have to be called in the correct order. Would it make sense to link to all in each of the docstrings? It should also be mentioned in local_segments
, and remote_segments
that collect_local!
needs to be called first.
src/DictVectors/communicators.jl
Outdated
Matrix of vectors stored in a single buffer with collective MPI communication support. The | ||
number of rows in the matrix `nrows`. Used in the [`AllToAll`](@ref) communication strategy. |
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.
Matrix of vectors stored in a single buffer with collective MPI communication support. The | |
number of rows in the matrix `nrows`. Used in the [`AllToAll`](@ref) communication strategy. | |
Matrix of vectors stored in a single buffer with collective MPI communication support. `nrows` is the | |
number of rows in the matrix. Used in the [`AllToAll`](@ref) communication strategy. |
Should it be explained what the rows and columns mean in the context of AllToAll
?
""" | ||
struct SegmentedBuffer{T} <: AbstractVector{SubArray{T,1,Vector{T},Tuple{UnitRange{Int64}},true}} | ||
struct SegmentedBuffer{T} <: AbstractVector{SubVector{T}} |
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.
Why is this an AbstractVector
? It should probably support the interface (size
, getindex
).
src/DictVectors/communicators.jl
Outdated
AllToAll{K,V} <: Communicator | ||
|
||
[`Communicator`](@ref) that uses collective communication using `MPI.Alltoall!`. |
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.
It would be great to document the constructor with all accepted keyword arguments.
Pull Request Test Coverage Report for Build 9754098047Details
💛 - Coveralls |
Pull Request Test Coverage Report for Build 9768912173Details
💛 - Coveralls |
Pull Request Test Coverage Report for Build 9800167899Details
💛 - Coveralls |
Pull Request Test Coverage Report for Build 9831054698Details
💛 - Coveralls |
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.
Much clearer, thanks!
changes
AllToAll
which is more efficient with large numbers of nodes. This is now the default.AllToAll
andPointToPoint
now take an optional argumentreport
which reports communication timings if set.