$ sudo apt-get install doxygen
+ $ sudo apt-get install doxygen graphviz
diff --git a/_images/size_boundary_diagram.png b/_images/size_boundary_diagram.png
new file mode 100644
index 00000000..41e3a38c
Binary files /dev/null and b/_images/size_boundary_diagram.png differ
diff --git a/_sources/README.md.txt b/_sources/README.md.txt
index 6cf2cc92..80d80b16 100644
--- a/_sources/README.md.txt
+++ b/_sources/README.md.txt
@@ -3,7 +3,7 @@
1. Install `doxygen`.
```bash
- $ sudo apt-get install doxygen
+ $ sudo apt-get install doxygen graphviz
```
2. Install Python packages below. If you install them on the user's local, you need to include `~/.local/bin` to `$PATH` (to use `sphinx-build`).
diff --git a/_sources/design/nccl-over-mscclpp.md.txt b/_sources/design/nccl-over-mscclpp.md.txt
new file mode 100644
index 00000000..ca362e9b
--- /dev/null
+++ b/_sources/design/nccl-over-mscclpp.md.txt
@@ -0,0 +1,71 @@
+# NCCL Over MSCCL++
+
+(limitations)=
+## Limitations
+
+Current NCCL over MSCCL++ has a few limitations.
+
+* We do not cover all APIs yet. See the [API Support Table](#api-support-table) for details.
+* Multi-node communication is not supported yet.
+* Currently, collective communication functions may not work correctly if the buffer address is differed from that of previous function calls while sharing the same base address (returned by [cuMemGetAddressRange](https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__MEM.html#group__CUDA__MEM_1g64fee5711274a2a0573a789c94d8299b)) with the previous address. This is because the current implementation performs zero-copy communication over user buffers, and it is difficult to efficiently inform all ranks if the buffer address dynamically changes.
+
+(api-support-table)=
+## API Support Table
+
+The table below lists all NCCL APIs (v2.21). We may cover more APIs in the future.
+
+| API Name | Supported |
+| :----------------------- | :-------: |
+| ncclGetLastError | X |
+| ncclGetErrorString | O |
+| ncclGetVersion | O |
+| ncclGetUniqueId | O |
+| ncclCommInitRank | O |
+| ncclCommInitAll | X |
+| ncclCommInitRankConfig | X |
+| ncclCommSplit | X |
+| ncclCommFinalize | O |
+| ncclCommDestroy | O |
+| ncclCommAbort | X |
+| ncclCommGetAsyncError | O |
+| ncclCommCount | O |
+| ncclCommCuDevice | O |
+| ncclCommUserRank | O |
+| ncclCommRegister | X |
+| ncclCommDeregister | X |
+| ncclMemAlloc | X |
+| ncclMemFree | X |
+| ncclAllReduce | O |
+| ncclBroadcast | X |
+| ncclReduce | X |
+| ncclAllGather | O |
+| ncclReduceScatter | X |
+| ncclGroupStart | O |
+| ncclGroupEnd | O |
+| ncclSend | X |
+| ncclRecv | X |
+| ncclRedOpCreatePreMulSum | X |
+| ncclRedOpDestroy | X |
+
+## Executor Support
+
+The executor is a versatile tool designed to specify how mscclpp executes algorithms. Currently, only the allReduce operation allows for algorithm customization. The following environment variables can be managed:
+
+- ALLREDUCEPKT_IP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for small-sized, in-place operations.
+- ALLREDUCEPKT_OP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for small-sized, out-of-place operations.
+- ALLREDUCE_IP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for larger-sized, in-place operations.
+- ALLREDUCE_OP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for larger-sized, out-of-place operations.
+- ALLREDUCE_SMALL_MSG_BOUNDARY: Defines the size threshold at which the algorithm will switch between fallback code and the customized algorithm for small messages.
+- ALLREDUCE_LARGE_MSG_BOUNDARY: Defines the size threshold at which the algorithm will switch between the customized algorithm for small messages and that for larger messages.
+
+```{figure} ../figs/size_boundary_diagram.png
+:name: MMSCCL++ Abstractions
+:alt: MSCCL++ Abstractions
+:align: center
+
+Decision Flowchart for Message Size-Based Algorithm Execution
+```
+
+This is an example of executing the interface with the executor:
+``` bash
+mpirun -np 8 -x ALLREDUCEPKT_IP_JSON_FILE=/root/azure-mscclpp/nccl/test/execution-files/allreducepacket.json -x ALLREDUCE_IP_JSON_FILE=/root/azure-mscclpp/nccl/test/execution-files/allreducesm.json -x ALLREDUCE_SMALL_MSG_BOUNDARY=16K -x ALLREDUCE_LARGE_MSG_BOUNDARY=1M ./apps/nccl/test/nccl_api_test
diff --git a/_sources/getting-started/quickstart.md.txt b/_sources/getting-started/quickstart.md.txt
index 355d4824..8c0982e3 100644
--- a/_sources/getting-started/quickstart.md.txt
+++ b/_sources/getting-started/quickstart.md.txt
@@ -30,6 +30,7 @@ $ docker run -it --privileged --net=host --ipc=host --gpus all ghcr.io/microsoft
See all available images [here](https://github.com/microsoft/mscclpp/pkgs/container/mscclpp%2Fmscclpp).
+(build-from-source)=
## Build from Source
CMake 3.25 or later is required.
@@ -64,6 +65,7 @@ $ make -j mscclpp mscclpp_static
$ sudo make install/fast
```
+(install-from-source-python-module)=
## Install from Source (Python Module)
Python 3.8 or later is required.
@@ -173,4 +175,4 @@ mpirun -np 8 --bind-to numa --allow-run-as-root -x LD_PRELOAD=$MSCCLPP_BUILD/app
If MSCCL++ is built on AMD platforms, `libmscclpp_nccl.so` would replace the [RCCL](https://github.com/ROCm/rccl) library (i.e., `librccl.so`).
-See limitations of the current NCCL over MSCCL++ from [here](../apps/nccl/README.md#limitations).
+See limitations of the current NCCL over MSCCL++ from [here](../design/nccl-over-mscclpp.md#limitations).
diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
index e243d282..dc560436 100644
--- a/_sources/index.rst.txt
+++ b/_sources/index.rst.txt
@@ -24,6 +24,7 @@ Getting Started
Design
-------
- :doc:`Design ` doc for those who want to understand the internals of MSCCL++.
+- :doc:`NCCL over MSCCL++ ` doc for those who want to understand how to use NCCL over MSCCL++.
.. toctree::
:maxdepth: 1
@@ -31,6 +32,7 @@ Design
:hidden:
design/design
+ design/nccl-over-mscclpp
Performance
---------------
diff --git a/api/index.html b/api/index.html
index 73a2a847..295411c5 100644
--- a/api/index.html
+++ b/api/index.html
@@ -51,6 +51,7 @@
Design
Performance
diff --git a/design/design.html b/design/design.html
index 7a550c7e..505708d3 100644
--- a/design/design.html
+++ b/design/design.html
@@ -21,7 +21,7 @@
-
+
@@ -79,6 +79,7 @@
+NCCL Over MSCCL++
Performance
@@ -279,7 +280,7 @@ Implementing customized collective communication algorithms Previous
- Next
+ Next
diff --git a/design/nccl-over-mscclpp.html b/design/nccl-over-mscclpp.html
new file mode 100644
index 00000000..904f2045
--- /dev/null
+++ b/design/nccl-over-mscclpp.html
@@ -0,0 +1,264 @@
+
+
+
+
+
+
+
NCCL Over MSCCL++ — mscclpp v0.5.2 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mscclpp
+
+
+
+
+
+
+
+
+
+NCCL Over MSCCL++
+
+Limitations
+Current NCCL over MSCCL++ has a few limitations.
+
+We do not cover all APIs yet. See the API Support Table for details.
+Multi-node communication is not supported yet.
+Currently, collective communication functions may not work correctly if the buffer address is differed from that of previous function calls while sharing the same base address (returned by cuMemGetAddressRange ) with the previous address. This is because the current implementation performs zero-copy communication over user buffers, and it is difficult to efficiently inform all ranks if the buffer address dynamically changes.
+
+
+
+API Support Table
+The table below lists all NCCL APIs (v2.21). We may cover more APIs in the future.
+
+
+API Name
+Supported
+
+
+
+ncclGetLastError
+X
+
+ncclGetErrorString
+O
+
+ncclGetVersion
+O
+
+ncclGetUniqueId
+O
+
+ncclCommInitRank
+O
+
+ncclCommInitAll
+X
+
+ncclCommInitRankConfig
+X
+
+ncclCommSplit
+X
+
+ncclCommFinalize
+O
+
+ncclCommDestroy
+O
+
+ncclCommAbort
+X
+
+ncclCommGetAsyncError
+O
+
+ncclCommCount
+O
+
+ncclCommCuDevice
+O
+
+ncclCommUserRank
+O
+
+ncclCommRegister
+X
+
+ncclCommDeregister
+X
+
+ncclMemAlloc
+X
+
+ncclMemFree
+X
+
+ncclAllReduce
+O
+
+ncclBroadcast
+X
+
+ncclReduce
+X
+
+ncclAllGather
+O
+
+ncclReduceScatter
+X
+
+ncclGroupStart
+O
+
+ncclGroupEnd
+O
+
+ncclSend
+X
+
+ncclRecv
+X
+
+ncclRedOpCreatePreMulSum
+X
+
+ncclRedOpDestroy
+X
+
+
+
+
+
+Executor Support
+The executor is a versatile tool designed to specify how mscclpp executes algorithms. Currently, only the allReduce operation allows for algorithm customization. The following environment variables can be managed:
+
+ALLREDUCEPKT_IP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for small-sized, in-place operations.
+ALLREDUCEPKT_OP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for small-sized, out-of-place operations.
+ALLREDUCE_IP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for larger-sized, in-place operations.
+ALLREDUCE_OP_JSON_FILE: Specifies the path to the JSON file that defines the algorithm for larger-sized, out-of-place operations.
+ALLREDUCE_SMALL_MSG_BOUNDARY: Defines the size threshold at which the algorithm will switch between fallback code and the customized algorithm for small messages.
+ALLREDUCE_LARGE_MSG_BOUNDARY: Defines the size threshold at which the algorithm will switch between the customized algorithm for small messages and that for larger messages.
+
+
+
+
+Decision Flowchart for Message Size-Based Algorithm Execution
+
+
+This is an example of executing the interface with the executor:
+ mpirun -np 8 -x ALLREDUCEPKT_IP_JSON_FILE = /root/azure-mscclpp/nccl/test/execution-files/allreducepacket.json -x ALLREDUCE_IP_JSON_FILE = /root/azure-mscclpp/nccl/test/execution-files/allreducesm.json -x ALLREDUCE_SMALL_MSG_BOUNDARY = 16K -x ALLREDUCE_LARGE_MSG_BOUNDARY = 1M ./apps/nccl/test/nccl_api_test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/_build/doctrees/README.doctree b/docs/_build/doctrees/README.doctree
new file mode 100644
index 00000000..2d205aaf
Binary files /dev/null and b/docs/_build/doctrees/README.doctree differ
diff --git a/docs/_build/doctrees/api/index.doctree b/docs/_build/doctrees/api/index.doctree
new file mode 100644
index 00000000..e202d303
Binary files /dev/null and b/docs/_build/doctrees/api/index.doctree differ
diff --git a/docs/_build/doctrees/design/design.doctree b/docs/_build/doctrees/design/design.doctree
new file mode 100644
index 00000000..a19e2c80
Binary files /dev/null and b/docs/_build/doctrees/design/design.doctree differ
diff --git a/docs/_build/doctrees/design/nccl-over-mscclpp.doctree b/docs/_build/doctrees/design/nccl-over-mscclpp.doctree
new file mode 100644
index 00000000..57511a1f
Binary files /dev/null and b/docs/_build/doctrees/design/nccl-over-mscclpp.doctree differ
diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle
new file mode 100644
index 00000000..bf048231
Binary files /dev/null and b/docs/_build/doctrees/environment.pickle differ
diff --git a/docs/_build/doctrees/getting-started/quickstart.doctree b/docs/_build/doctrees/getting-started/quickstart.doctree
new file mode 100644
index 00000000..c386a8b7
Binary files /dev/null and b/docs/_build/doctrees/getting-started/quickstart.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/customized-proxy-service.doctree b/docs/_build/doctrees/getting-started/tutorials/customized-proxy-service.doctree
new file mode 100644
index 00000000..7f8dbf70
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/customized-proxy-service.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/index.doctree b/docs/_build/doctrees/getting-started/tutorials/index.doctree
new file mode 100644
index 00000000..a718b692
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/index.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/initialization.doctree b/docs/_build/doctrees/getting-started/tutorials/initialization.doctree
new file mode 100644
index 00000000..42612f9d
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/initialization.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/packet-api.doctree b/docs/_build/doctrees/getting-started/tutorials/packet-api.doctree
new file mode 100644
index 00000000..b7bc0748
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/packet-api.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/proxy-channel.doctree b/docs/_build/doctrees/getting-started/tutorials/proxy-channel.doctree
new file mode 100644
index 00000000..56fe1720
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/proxy-channel.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/python-api.doctree b/docs/_build/doctrees/getting-started/tutorials/python-api.doctree
new file mode 100644
index 00000000..c60b4be4
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/python-api.doctree differ
diff --git a/docs/_build/doctrees/getting-started/tutorials/sm-channel.doctree b/docs/_build/doctrees/getting-started/tutorials/sm-channel.doctree
new file mode 100644
index 00000000..10de1aa3
Binary files /dev/null and b/docs/_build/doctrees/getting-started/tutorials/sm-channel.doctree differ
diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree
new file mode 100644
index 00000000..dd580074
Binary files /dev/null and b/docs/_build/doctrees/index.doctree differ
diff --git a/docs/_build/doctrees/performance/performance-ndmv4.doctree b/docs/_build/doctrees/performance/performance-ndmv4.doctree
new file mode 100644
index 00000000..8d7c85d9
Binary files /dev/null and b/docs/_build/doctrees/performance/performance-ndmv4.doctree differ
diff --git a/docs/doxygen/html/README_8md.html b/docs/doxygen/html/README_8md.html
new file mode 100644
index 00000000..ccc927fa
--- /dev/null
+++ b/docs/doxygen/html/README_8md.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
MSCCL++: README.md File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/annotated.html b/docs/doxygen/html/annotated.html
new file mode 100644
index 00000000..27ae1ce9
--- /dev/null
+++ b/docs/doxygen/html/annotated.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
MSCCL++: Class List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+
+
+
+
diff --git a/docs/doxygen/html/atomic__device_8hpp.html b/docs/doxygen/html/atomic__device_8hpp.html
new file mode 100644
index 00000000..1e743c06
--- /dev/null
+++ b/docs/doxygen/html/atomic__device_8hpp.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
MSCCL++: atomic_device.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/atomic__device_8hpp__dep__incl.map b/docs/doxygen/html/atomic__device_8hpp__dep__incl.map
new file mode 100644
index 00000000..3ee5d5a6
--- /dev/null
+++ b/docs/doxygen/html/atomic__device_8hpp__dep__incl.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/atomic__device_8hpp__dep__incl.md5 b/docs/doxygen/html/atomic__device_8hpp__dep__incl.md5
new file mode 100644
index 00000000..8f13a597
--- /dev/null
+++ b/docs/doxygen/html/atomic__device_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+6cfc2034d7b43ddaa4bb852bb6b33299
\ No newline at end of file
diff --git a/docs/doxygen/html/atomic__device_8hpp__dep__incl.png b/docs/doxygen/html/atomic__device_8hpp__dep__incl.png
new file mode 100644
index 00000000..32ee12f8
Binary files /dev/null and b/docs/doxygen/html/atomic__device_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/atomic__device_8hpp__incl.map b/docs/doxygen/html/atomic__device_8hpp__incl.map
new file mode 100644
index 00000000..32a3f468
--- /dev/null
+++ b/docs/doxygen/html/atomic__device_8hpp__incl.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/atomic__device_8hpp__incl.md5 b/docs/doxygen/html/atomic__device_8hpp__incl.md5
new file mode 100644
index 00000000..c1e08536
--- /dev/null
+++ b/docs/doxygen/html/atomic__device_8hpp__incl.md5
@@ -0,0 +1 @@
+ebea3bfe618a1a6ac8224ac50285f5e4
\ No newline at end of file
diff --git a/docs/doxygen/html/atomic__device_8hpp__incl.png b/docs/doxygen/html/atomic__device_8hpp__incl.png
new file mode 100644
index 00000000..1b7306f9
Binary files /dev/null and b/docs/doxygen/html/atomic__device_8hpp__incl.png differ
diff --git a/docs/doxygen/html/atomic__device_8hpp_source.html b/docs/doxygen/html/atomic__device_8hpp_source.html
new file mode 100644
index 00000000..ddeeb38c
--- /dev/null
+++ b/docs/doxygen/html/atomic__device_8hpp_source.html
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
MSCCL++: atomic_device.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_ATOMIC_DEVICE_HPP_
+
5 #define MSCCLPP_ATOMIC_DEVICE_HPP_
+
+
+
+
9 #if defined(MSCCLPP_DEVICE_CUDA)
+
10 #include <cuda/atomic>
+
11 #endif // defined(MSCCLPP_DEVICE_CUDA)
+
+
+
+
15 #if defined(MSCCLPP_DEVICE_CUDA)
+
+
17 constexpr cuda::memory_order memoryOrderRelaxed = cuda::memory_order_relaxed;
+
18 constexpr cuda::memory_order memoryOrderAcquire = cuda::memory_order_acquire;
+
19 constexpr cuda::memory_order memoryOrderRelease = cuda::memory_order_release;
+
20 constexpr cuda::memory_order memoryOrderAcqRel = cuda::memory_order_acq_rel;
+
21 constexpr cuda::memory_order memoryOrderSeqCst = cuda::memory_order_seq_cst;
+
+
+
+
25 return cuda::atomic_ref<T, cuda::thread_scope_system>{*ptr}.load(memoryOrder);
+
+
+
+
+
30 cuda::atomic_ref<T, cuda::thread_scope_system>{*ptr}.store(val, memoryOrder);
+
+
+
+
+
35 return cuda::atomic_ref<T, cuda::thread_scope_system>{*ptr}.fetch_add(val, memoryOrder);
+
+
+
38 #elif defined(MSCCLPP_DEVICE_HIP)
+
+
40 constexpr
auto memoryOrderRelaxed = __ATOMIC_RELAXED;
+
41 constexpr
auto memoryOrderAcquire = __ATOMIC_ACQUIRE;
+
42 constexpr
auto memoryOrderRelease = __ATOMIC_RELEASE;
+
43 constexpr
auto memoryOrderAcqRel = __ATOMIC_ACQ_REL;
+
44 constexpr
auto memoryOrderSeqCst = __ATOMIC_SEQ_CST;
+
+
+
+
48 return __atomic_load_n(ptr, memoryOrder);
+
+
+
+
+
53 __atomic_store_n(ptr, val, memoryOrder);
+
+
+
+
+
58 return __atomic_fetch_add(ptr, val, memoryOrder);
+
+
+
61 #endif // defined(MSCCLPP_DEVICE_HIP)
+
+
+
+
65 #endif // MSCCLPP_ATOMIC_DEVICE_HPP_
+
+
+
#define MSCCLPP_HOST_DEVICE_INLINE
Definition: device.hpp:25
+
Definition: atomic_device.hpp:13
+
+
+
+
diff --git a/docs/doxygen/html/bc_s.png b/docs/doxygen/html/bc_s.png
new file mode 100644
index 00000000..224b29aa
Binary files /dev/null and b/docs/doxygen/html/bc_s.png differ
diff --git a/docs/doxygen/html/bdwn.png b/docs/doxygen/html/bdwn.png
new file mode 100644
index 00000000..940a0b95
Binary files /dev/null and b/docs/doxygen/html/bdwn.png differ
diff --git a/docs/doxygen/html/classNpKit-members.html b/docs/doxygen/html/classNpKit-members.html
new file mode 100644
index 00000000..58bc6333
--- /dev/null
+++ b/docs/doxygen/html/classNpKit-members.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for NpKit , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classNpKit.html b/docs/doxygen/html/classNpKit.html
new file mode 100644
index 00000000..37d192c8
--- /dev/null
+++ b/docs/doxygen/html/classNpKit.html
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
MSCCL++: NpKit Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <npkit.hpp >
+
+
+
+
◆ CollectCpuEvent()
+
+
+
+
+
+
+
+
+ static void NpKit::CollectCpuEvent
+ (
+ uint8_t
+ type ,
+
+
+
+
+ uint32_t
+ size ,
+
+
+
+
+ uint32_t
+ rsvd ,
+
+
+
+
+ uint64_t
+ timestamp ,
+
+
+
+
+ int
+ channel_id
+
+
+
+ )
+
+
+
+
+
+static
+
+
+
+
+
+
+
+
◆ Dump()
+
+
+
+
+
+
+
+
+ static void NpKit::Dump
+ (
+ const std::string &
+ dump_dir )
+
+
+
+
+
+static
+
+
+
+
+
+
+
+
◆ GetCpuTimestamp()
+
+
+
+
+
+
+
+
+ static uint64_t* NpKit::GetCpuTimestamp
+ (
+ )
+
+
+
+
+
+static
+
+
+
+
+
+
+
+
◆ GetGpuEventCollectContexts()
+
+
+
+
◆ Init()
+
+
+
+
+
+
+
+
+ static void NpKit::Init
+ (
+ int
+ rank )
+
+
+
+
+
+static
+
+
+
+
+
+
+
+
◆ Shutdown()
+
+
+
+
+
+
+
+
+ static void NpKit::Shutdown
+ (
+ )
+
+
+
+
+
+static
+
+
+
+
+
+
+
+
+
◆ kNumCpuEventBuffers
+
+
+
+
+
+
+
+
+ const uint64_t NpKit::kNumCpuEventBuffers = 64
+
+
+
+
+static
+
+
+
+
+
+
+
+
◆ kNumGpuEventBuffers
+
+
+
+
+
+
+
+
+ const uint64_t NpKit::kNumGpuEventBuffers = 1024
+
+
+
+
+static
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classes.html b/docs/doxygen/html/classes.html
new file mode 100644
index 00000000..e7736d61
--- /dev/null
+++ b/docs/doxygen/html/classes.html
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
MSCCL++: Class Index
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError-members.html b/docs/doxygen/html/classmscclpp_1_1BaseError-members.html
new file mode 100644
index 00000000..819dcceb
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseError-members.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::BaseError , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError.html b/docs/doxygen/html/classmscclpp_1_1BaseError.html
new file mode 100644
index 00000000..86419e38
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseError.html
@@ -0,0 +1,329 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::BaseError Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Base class for all errors thrown by MSCCL++.
+ More...
+
+
#include <errors.hpp >
+
+
+
+
+
+
+
+
+
+
+
+
+
[legend ]
+
+
+
+
+
Base class for all errors thrown by MSCCL++.
+
+
+
◆ BaseError() [1/2]
+
+
+
+
+
+ mscclpp::BaseError::BaseError
+ (
+ const std::string &
+ message ,
+
+
+
+
+ int
+ errorCode
+
+
+
+ )
+
+
+
+
+
Constructor for BaseError .
+
Parameters
+
+ message The error message.
+ errorCode The error code.
+
+
+
+
+
+
+
+
◆ BaseError() [2/2]
+
+
+
+
+
+
+
+
+ mscclpp::BaseError::BaseError
+ (
+ int
+ errorCode )
+
+
+
+
+
+explicit
+
+
+
+
Constructor for BaseError .
+
Parameters
+
+ errorCode The error code.
+
+
+
+
+
+
+
+
◆ ~BaseError()
+
+
+
+
+
+
+
+
+ virtual mscclpp::BaseError::~BaseError
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
◆ getErrorCode()
+
+
+
+
+
+ int mscclpp::BaseError::getErrorCode
+ (
+ )
+ const
+
+
+
+
Get the error code.
+
Returns The error code.
+
+
+
+
+
◆ what()
+
+
+
+
+
+
+
+
+ const char* mscclpp::BaseError::what
+ (
+ )
+ const
+
+
+
+
+override noexcept
+
+
+
+
Get the error message.
+
Returns The error message.
+
+
+
+
+
+
◆ errorCode_
+
+
+
+
+
+
+
+
+ int mscclpp::BaseError::errorCode_
+
+
+
+
+protected
+
+
+
+
+
+
+
+
◆ message_
+
+
+
+
+
+
+
+
+ std::string mscclpp::BaseError::message_
+
+
+
+
+protected
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.map
new file mode 100644
index 00000000..738cb161
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.md5
new file mode 100644
index 00000000..316ef9e3
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.md5
@@ -0,0 +1 @@
+8ecf4b92dddff5fc7f9bb48db73fe193
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.png
new file mode 100644
index 00000000..8601a7fd
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1BaseError__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.map
new file mode 100644
index 00000000..d9c524c0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.map
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.md5
new file mode 100644
index 00000000..b7336ac6
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.md5
@@ -0,0 +1 @@
+adbbef22463d3bf2af55cde518780d0f
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.png
new file mode 100644
index 00000000..daf09129
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1BaseError__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseProxyService-members.html b/docs/doxygen/html/classmscclpp_1_1BaseProxyService-members.html
new file mode 100644
index 00000000..0c157fbd
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseProxyService-members.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::BaseProxyService , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseProxyService.html b/docs/doxygen/html/classmscclpp_1_1BaseProxyService.html
new file mode 100644
index 00000000..b3e96ba3
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseProxyService.html
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::BaseProxyService Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Base class for proxy services. Proxy services are used to proxy data between devices.
+ More...
+
+
#include <proxy_channel.hpp >
+
+
+
+
+
Base class for proxy services. Proxy services are used to proxy data between devices.
+
+
+
◆ BaseProxyService()
+
+
+
+
+
+
+
+
+ mscclpp::BaseProxyService::BaseProxyService
+ (
+ )
+
+
+
+
+
+default
+
+
+
+
+
+
+
+
◆ ~BaseProxyService()
+
+
+
+
+
+
+
+
+ virtual mscclpp::BaseProxyService::~BaseProxyService
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
+
+
◆ startProxy()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::BaseProxyService::startProxy
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ stopProxy()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::BaseProxyService::stopProxy
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.map
new file mode 100644
index 00000000..ffde9c4c
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.md5
new file mode 100644
index 00000000..a43bdfc6
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.md5
@@ -0,0 +1 @@
+4ef4c65f33a475359490a5ded5af499c
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.png
new file mode 100644
index 00000000..003d1535
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1BaseProxyService__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseSemaphore-members.html b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore-members.html
new file mode 100644
index 00000000..29d04aa0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore-members.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > , including all inherited members.
+
+ BaseSemaphore (std::unique_ptr< uint64_t, InboundDeleter< uint64_t >> localInboundSemaphoreId, std::unique_ptr< uint64_t, InboundDeleter< uint64_t >> expectedInboundSemaphoreId, std::unique_ptr< uint64_t, OutboundDeleter< uint64_t >> outboundSemaphoreId)mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > inline
+ expectedInboundSemaphore_ mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > protected
+ localInboundSemaphore_ mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > protected
+ outboundSemaphore_ mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > protected
+ remoteInboundSemaphoreIdsRegMem_ mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > protected
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseSemaphore.html b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore.html
new file mode 100644
index 00000000..a8ff8aa6
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore.html
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter > Class Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <semaphore.hpp >
+
+
+
+
+ BaseSemaphore (std::unique_ptr< uint64_t, InboundDeleter< uint64_t >> localInboundSemaphoreId, std::unique_ptr< uint64_t, InboundDeleter< uint64_t >> expectedInboundSemaphoreId, std::unique_ptr< uint64_t, OutboundDeleter< uint64_t >> outboundSemaphoreId)
+
+
+
+
template<template< typename > typename InboundDeleter, template< typename > typename OutboundDeleter>
+class mscclpp::BaseSemaphore< InboundDeleter, OutboundDeleter >
+
+
A base class for semaphores.
+
An semaphore is a synchronization mechanism that allows the local peer to wait for the remote peer to complete a data transfer. The local peer signals the remote peer that it has completed a data transfer by incrementing the outbound semaphore ID. The incremented outbound semaphore ID is copied to the remote peer's inbound semaphore ID so that the remote peer can wait for the local peer to complete a data transfer. Vice versa, the remote peer signals the local peer that it has completed a data transfer by incrementing the remote peer's outbound semaphore ID and copying the incremented value to the local peer's inbound semaphore ID.
+
Template Parameters
+
+ InboundDeleter The deleter for inbound semaphore IDs. This is either std::default_delete
for host memory or CudaDeleter for device memory.
+ OutboundDeleter The deleter for outbound semaphore IDs. This is either std::default_delete
for host memory or CudaDeleter for device memory.
+
+
+
+
+
+
◆ BaseSemaphore()
+
+
+
+
+template<template< typename > typename InboundDeleter, template< typename > typename OutboundDeleter>
+
+
+
+
+
+ mscclpp::BaseSemaphore < InboundDeleter, OutboundDeleter >::BaseSemaphore
+ (
+ std::unique_ptr< uint64_t, InboundDeleter< uint64_t >>
+ localInboundSemaphoreId ,
+
+
+
+
+ std::unique_ptr< uint64_t, InboundDeleter< uint64_t >>
+ expectedInboundSemaphoreId ,
+
+
+
+
+ std::unique_ptr< uint64_t, OutboundDeleter< uint64_t >>
+ outboundSemaphoreId
+
+
+
+ )
+
+
+
+
+
+inline
+
+
+
+
Constructs a BaseSemaphore .
+
Parameters
+
+ localInboundSemaphoreId The inbound semaphore ID
+ expectedInboundSemaphoreId The expected inbound semaphore ID
+ outboundSemaphoreId The outbound semaphore ID
+
+
+
+
+
+
+
+
+
◆ expectedInboundSemaphore_
+
+
+
+
+template<template< typename > typename InboundDeleter, template< typename > typename OutboundDeleter>
+
+
+
+
+
+ std::unique_ptr<uint64_t, InboundDeleter<uint64_t> > mscclpp::BaseSemaphore < InboundDeleter, OutboundDeleter >::expectedInboundSemaphore_
+
+
+
+
+protected
+
+
+
+
+
+
◆ localInboundSemaphore_
+
+
+
+
+template<template< typename > typename InboundDeleter, template< typename > typename OutboundDeleter>
+
+
+
+
+
+ std::unique_ptr<uint64_t, InboundDeleter<uint64_t> > mscclpp::BaseSemaphore < InboundDeleter, OutboundDeleter >::localInboundSemaphore_
+
+
+
+
+protected
+
+
+
+
The inbound semaphore ID that is incremented by the remote peer and waited on by the local peer.
+
The location of localInboundSemaphore_ can be either on the host or on the device.
+
+
+
+
+
◆ outboundSemaphore_
+
+
+
+
+template<template< typename > typename InboundDeleter, template< typename > typename OutboundDeleter>
+
+
+
+
+
+ std::unique_ptr<uint64_t, OutboundDeleter<uint64_t> > mscclpp::BaseSemaphore < InboundDeleter, OutboundDeleter >::outboundSemaphore_
+
+
+
+
+protected
+
+
+
+
The outbound semaphore ID that is incremented by the local peer and copied to the remote peer's localInboundSemaphore_ .
+
The location of outboundSemaphore_ can be either on the host or on the device.
+
+
+
+
+
◆ remoteInboundSemaphoreIdsRegMem_
+
+
+
+
+template<template< typename > typename InboundDeleter, template< typename > typename OutboundDeleter>
+
+
+
+
The registered memory for the remote peer's inbound semaphore ID.
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.map
new file mode 100644
index 00000000..531d1487
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.md5
new file mode 100644
index 00000000..205a0eca
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.md5
@@ -0,0 +1 @@
+0f1e80aeb312966913206d9f0591a6e9
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.png
new file mode 100644
index 00000000..988cf5eb
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1BaseSemaphore__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Bootstrap-members.html b/docs/doxygen/html/classmscclpp_1_1Bootstrap-members.html
new file mode 100644
index 00000000..5ba8682c
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Bootstrap-members.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Bootstrap , including all inherited members.
+
+ allGather (void *allData, int size)=0mscclpp::Bootstrap pure virtual
+ barrier ()=0mscclpp::Bootstrap pure virtual
+ Bootstrap ()mscclpp::Bootstrap inline
+ getNranks ()=0mscclpp::Bootstrap pure virtual
+ getNranksPerNode ()=0mscclpp::Bootstrap pure virtual
+ getRank ()=0mscclpp::Bootstrap pure virtual
+ groupBarrier (const std::vector< int > &ranks)mscclpp::Bootstrap
+ recv (void *data, int size, int peer, int tag)=0mscclpp::Bootstrap pure virtual
+ recv (std::vector< char > &data, int peer, int tag)mscclpp::Bootstrap
+ send (void *data, int size, int peer, int tag)=0mscclpp::Bootstrap pure virtual
+ send (const std::vector< char > &data, int peer, int tag)mscclpp::Bootstrap
+ ~Bootstrap ()=defaultmscclpp::Bootstrap virtual
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Bootstrap.html b/docs/doxygen/html/classmscclpp_1_1Bootstrap.html
new file mode 100644
index 00000000..79736362
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Bootstrap.html
@@ -0,0 +1,515 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Bootstrap Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Base class for bootstraps.
+ More...
+
+
#include <core.hpp >
+
+
+
+
+ Bootstrap ()
+
+virtual ~Bootstrap ()=default
+
+virtual int getRank ()=0
+
+virtual int getNranks ()=0
+
+virtual int getNranksPerNode ()=0
+
+virtual void send (void *data, int size, int peer, int tag)=0
+
+virtual void recv (void *data, int size, int peer, int tag)=0
+
+virtual void allGather (void *allData, int size)=0
+
+virtual void barrier ()=0
+
+void groupBarrier (const std::vector< int > &ranks)
+
+void send (const std::vector< char > &data, int peer, int tag)
+
+void recv (std::vector< char > &data, int peer, int tag)
+
+
+
+
Base class for bootstraps.
+
+
+
◆ Bootstrap()
+
+
+
+
+
+
+
+
+ mscclpp::Bootstrap::Bootstrap
+ (
+ )
+
+
+
+
+
+inline
+
+
+
+
+
+
+
+
◆ ~Bootstrap()
+
+
+
+
+
+
+
+
+ virtual mscclpp::Bootstrap::~Bootstrap
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
+
+
◆ allGather()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Bootstrap::allGather
+ (
+ void *
+ allData ,
+
+
+
+
+ int
+ size
+
+
+
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ barrier()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Bootstrap::barrier
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ getNranks()
+
+
+
+
+
+
+
+
+ virtual int mscclpp::Bootstrap::getNranks
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ getNranksPerNode()
+
+
+
+
+
+
+
+
+ virtual int mscclpp::Bootstrap::getNranksPerNode
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ getRank()
+
+
+
+
+
+
+
+
+ virtual int mscclpp::Bootstrap::getRank
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ groupBarrier()
+
+
+
+
+
+ void mscclpp::Bootstrap::groupBarrier
+ (
+ const std::vector< int > &
+ ranks )
+
+
+
+
+
+
+
+
+
◆ recv() [1/2]
+
+
+
+
+
+ void mscclpp::Bootstrap::recv
+ (
+ std::vector< char > &
+ data ,
+
+
+
+
+ int
+ peer ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ recv() [2/2]
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Bootstrap::recv
+ (
+ void *
+ data ,
+
+
+
+
+ int
+ size ,
+
+
+
+
+ int
+ peer ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
+
◆ send() [1/2]
+
+
+
+
+
+ void mscclpp::Bootstrap::send
+ (
+ const std::vector< char > &
+ data ,
+
+
+
+
+ int
+ peer ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ send() [2/2]
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Bootstrap::send
+ (
+ void *
+ data ,
+
+
+
+
+ int
+ size ,
+
+
+
+
+ int
+ peer ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.map
new file mode 100644
index 00000000..f218219d
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.md5
new file mode 100644
index 00000000..0d45bc0a
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.md5
@@ -0,0 +1 @@
+c22cb9841f735fba797a5e780e35ea55
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.png
new file mode 100644
index 00000000..c37d1091
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Bootstrap__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Communicator-members.html b/docs/doxygen/html/classmscclpp_1_1Communicator-members.html
new file mode 100644
index 00000000..0d757b12
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Communicator-members.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Communicator , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Communicator.html b/docs/doxygen/html/classmscclpp_1_1Communicator.html
new file mode 100644
index 00000000..ef73ac60
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Communicator.html
@@ -0,0 +1,490 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Communicator Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <core.hpp >
+
+
+
A class that sets up all registered memories and connections between processes.
+
A typical way to use this class:
+Call connectOnSetup() to declare connections between the calling process with other processes.
+Call registerMemory() to register memory regions that will be used for communication.
+Call sendMemoryOnSetup() or recvMemoryOnSetup() to send/receive registered memory regions to/from other processes.
+Call setup() to set up all registered memories and connections declared in the previous steps.
+Call NonblockingFuture<RegisteredMemory>::get() to get the registered memory regions received from other processes.
+All done; use connections and registered memories to build channels.
+
+
+
+
◆ Communicator()
+
+
+
+
+
+ mscclpp::Communicator::Communicator
+ (
+ std::shared_ptr< Bootstrap >
+ bootstrap ,
+
+
+
+
+ std::shared_ptr< Context >
+ context = nullptr
+
+
+
+ )
+
+
+
+
+
Initializes the communicator with a given bootstrap implementation.
+
Parameters
+
+ bootstrap An implementation of the Bootstrap that the communicator will use.
+ context An optional context to use for the communicator. If not provided, a new context will be created.
+
+
+
+
+
+
+
+
◆ ~Communicator()
+
+
+
+
+
+ mscclpp::Communicator::~Communicator
+ (
+ )
+
+
+
+
+
+
Destroy the communicator.
+
+
+
+
+
+
◆ bootstrap()
+
+
+
+
+
+ std::shared_ptr<Bootstrap > mscclpp::Communicator::bootstrap
+ (
+ )
+
+
+
+
+
Returns the bootstrap held by this communicator.
+
Returns std::shared_ptr<Bootstrap> The bootstrap held by this communicator.
+
+
+
+
+
◆ connectOnSetup()
+
+
+
+
Connect to a remote rank on setup.
+
This function only prepares metadata for connection. The actual connection is made by a following call of setup() . Note that this function is two-way and a connection from rank i
to remote rank j
needs to have a counterpart from rank j
to rank i
. Note that with IB, buffers are registered at a page level and if a buffer is spread through multiple pages and do not fully utilize all of them, IB's QP has to register for all involved pages. This potentially has security risks if the connection's accesses are given to a malicious process.
+
Parameters
+
+ remoteRank The rank of the remote process.
+ tag The tag of the connection for identifying it.
+ config The configuration for the local endpoint.
+
+
+
+
Returns NonblockingFuture <NonblockingFuture <std::shared_ptr<Connection>>> A non-blocking future of shared pointer to the connection.
+
+
+
+
+
◆ context()
+
+
+
+
+
+ std::shared_ptr<Context > mscclpp::Communicator::context
+ (
+ )
+
+
+
+
+
Returns the context held by this communicator.
+
Returns std::shared_ptr<Context> The context held by this communicator.
+
+
+
+
+
◆ onSetup()
+
+
+
+
+
+ void mscclpp::Communicator::onSetup
+ (
+ std::shared_ptr< Setuppable >
+ setuppable )
+
+
+
+
+
Add a custom Setuppable object to a list of objects to be setup later, when setup() is called.
+
Parameters
+
+ setuppable A shared pointer to the Setuppable object.
+
+
+
+
+
+
+
+
◆ recvMemoryOnSetup()
+
+
+
+
Receive memory on setup.
+
This function registers a receive from a remote process that will happen by a following call of setup() . The receive will carry information about a registered memory on the remote process.
+
Parameters
+
+ remoteRank The rank of the remote process.
+ tag The tag to use for identifying the receive.
+
+
+
+
Returns NonblockingFuture<RegisteredMemory> A non-blocking future of registered memory.
+
+
+
+
+
◆ registerMemory()
+
+
+
+
+
+ RegisteredMemory mscclpp::Communicator::registerMemory
+ (
+ void *
+ ptr ,
+
+
+
+
+ size_t
+ size ,
+
+
+
+
+ TransportFlags
+ transports
+
+
+
+ )
+
+
+
+
+
Register a region of GPU memory for use in this communicator's context.
+
Parameters
+
+ ptr Base pointer to the memory.
+ size Size of the memory region in bytes.
+ transports Transport flags.
+
+
+
+
Returns RegisteredMemory A handle to the buffer.
+
+
+
+
+
◆ remoteRankOf()
+
+
+
+
+
+ int mscclpp::Communicator::remoteRankOf
+ (
+ const Connection &
+ connection )
+
+
+
+
+
Get the remote rank a connection is connected to.
+
Parameters
+
+ connection The connection to get the remote rank for.
+
+
+
+
Returns The remote rank the connection is connected to.
+
+
+
+
+
◆ sendMemoryOnSetup()
+
+
+
+
+
+ void mscclpp::Communicator::sendMemoryOnSetup
+ (
+ RegisteredMemory
+ memory ,
+
+
+
+
+ int
+ remoteRank ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
Send information of a registered memory to the remote side on setup.
+
This function registers a send to a remote process that will happen by a following call of setup() . The send will carry information about a registered memory on the local process.
+
Parameters
+
+ memory The registered memory buffer to send information about.
+ remoteRank The rank of the remote process.
+ tag The tag to use for identifying the send.
+
+
+
+
+
+
+
+
◆ setup()
+
+
+
+
+
+ void mscclpp::Communicator::setup
+ (
+ )
+
+
+
+
+
+
+
◆ tagOf()
+
+
+
+
+
+ int mscclpp::Communicator::tagOf
+ (
+ const Connection &
+ connection )
+
+
+
+
+
Get the tag a connection was made with.
+
Parameters
+
+ connection The connection to get the tag for.
+
+
+
+
Returns The tag the connection was made with.
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Connection-members.html b/docs/doxygen/html/classmscclpp_1_1Connection-members.html
new file mode 100644
index 00000000..6e6796c0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Connection-members.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Connection , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Connection.html b/docs/doxygen/html/classmscclpp_1_1Connection.html
new file mode 100644
index 00000000..88da4e88
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Connection.html
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Connection Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Represents a connection between two processes.
+ More...
+
+
#include <core.hpp >
+
+
+
Represents a connection between two processes.
+
+
+
◆ ~Connection()
+
+
+
+
+
+
+
+
+ virtual mscclpp::Connection::~Connection
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
+
+
◆ flush()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Connection::flush
+ (
+ int64_t
+ timeoutUsec = 3e7
)
+
+
+
+
+
+pure virtual
+
+
+
+
+
Flush any pending writes to the remote process.
+
+
+
+
+
◆ getImpl() [1/2]
+
+
+
+
+
+
+
+
+ static std::shared_ptr<Endpoint::Impl> mscclpp::Connection::getImpl
+ (
+ Endpoint &
+ memory )
+
+
+
+
+
+static protected
+
+
+
+
+
+
+
+
◆ getImpl() [2/2]
+
+
+
+
+
+
+
+
+ static std::shared_ptr<RegisteredMemory::Impl> mscclpp::Connection::getImpl
+ (
+ RegisteredMemory &
+ memory )
+
+
+
+
+
+static protected
+
+
+
+
+
+
+
+
◆ getTransportName()
+
+
+
+
+
+ std::string mscclpp::Connection::getTransportName
+ (
+ )
+
+
+
+
+
+
+
◆ remoteTransport()
+
+
+
+
+
+
+
+
+ virtual Transport mscclpp::Connection::remoteTransport
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
Get the transport used by the remote process.
+
Returns The transport used by the remote process.
+
+
+
+
+
◆ transport()
+
+
+
+
+
+
+
+
+ virtual Transport mscclpp::Connection::transport
+ (
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
Get the transport used by the local process.
+
Returns The transport used by the local process.
+
+
+
+
+
◆ updateAndSync()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Connection::updateAndSync
+ (
+ RegisteredMemory
+ dst ,
+
+
+
+
+ uint64_t
+ dstOffset ,
+
+
+
+
+ uint64_t *
+ src ,
+
+
+
+
+ uint64_t
+ newValue
+
+
+
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
Update a 8-byte value in a destination RegisteredMemory and synchronize the change with the remote process.
+
Parameters
+
+ dst The destination RegisteredMemory .
+ dstOffset The offset in bytes from the start of the destination RegisteredMemory .
+ src A pointer to the value to update.
+ newValue The new value to write.
+
+
+
+
+
+
+
+
◆ write()
+
+
+
+
+
+
+
+
+ virtual void mscclpp::Connection::write
+ (
+ RegisteredMemory
+ dst ,
+
+
+
+
+ uint64_t
+ dstOffset ,
+
+
+
+
+ RegisteredMemory
+ src ,
+
+
+
+
+ uint64_t
+ srcOffset ,
+
+
+
+
+ uint64_t
+ size
+
+
+
+ )
+
+
+
+
+
+pure virtual
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Context-members.html b/docs/doxygen/html/classmscclpp_1_1Context-members.html
new file mode 100644
index 00000000..ad0fe8e3
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Context-members.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Context , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Context.html b/docs/doxygen/html/classmscclpp_1_1Context.html
new file mode 100644
index 00000000..2361cd2e
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Context.html
@@ -0,0 +1,314 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Context Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <core.hpp >
+
+
+
Represents a context for communication. This provides a low-level interface for forming connections in use-cases where the process group abstraction offered by Communicator is not suitable, e.g., ephemeral client-server connections. Correct use of this class requires external synchronization when finalizing connections with the connect() method.
+
As an example, a client-server scenario where the server will write to the client might proceed as follows:
+The client creates an endpoint with createEndpoint() and sends it to the server.
+The server receives the client endpoint, creates its own endpoint with createEndpoint() , sends it to the client, and creates a connection with connect() .
+The client receives the server endpoint, creates a connection with connect() and sends a RegisteredMemory to the server.
+The server receives the RegisteredMemory and writes to it using the previously created connection. The client waiting to create a connection before sending the RegisteredMemory ensures that the server can not write to the RegisteredMemory before the connection is established.
+
+
While some transports may have more relaxed implementation behavior, this should not be relied upon.
+
+
+
◆ Context()
+
+
+
+
+
+ mscclpp::Context::Context
+ (
+ )
+
+
+
+
+
+
+
◆ ~Context()
+
+
+
+
+
+ mscclpp::Context::~Context
+ (
+ )
+
+
+
+
+
+
Destroy the context.
+
+
+
+
+
+
◆ connect()
+
+
+
+
+
+ std::shared_ptr<Connection > mscclpp::Context::connect
+ (
+ Endpoint
+ localEndpoint ,
+
+
+
+
+ Endpoint
+ remoteEndpoint
+
+
+
+ )
+
+
+
+
+
Establish a connection between two endpoints. While this method immediately returns a connection object, the connection is only safe to use after the corresponding connection on the remote endpoint has been established. This method must be called on both endpoints to establish a connection.
+
Parameters
+
+ localEndpoint The local endpoint.
+ remoteEndpoint The remote endpoint.
+
+
+
+
Returns std::shared_ptr<Connection> A shared pointer to the connection.
+
+
+
+
+
◆ createEndpoint()
+
+
+
+
Create an endpoint for establishing connections.
+
Parameters
+
+ config The configuration for the endpoint.
+
+
+
+
Returns The newly created endpoint.
+
+
+
+
+
◆ registerMemory()
+
+
+
+
+
+ RegisteredMemory mscclpp::Context::registerMemory
+ (
+ void *
+ ptr ,
+
+
+
+
+ size_t
+ size ,
+
+
+
+
+ TransportFlags
+ transports
+
+
+
+ )
+
+
+
+
+
Register a region of GPU memory for use in this context.
+
Parameters
+
+ ptr Base pointer to the memory.
+ size Size of the memory region in bytes.
+ transports Transport flags.
+
+
+
+
Returns RegisteredMemory A handle to the buffer.
+
+
+
+
+
+
◆ Endpoint
+
+
+
+
◆ RegisteredMemory
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError-members.html b/docs/doxygen/html/classmscclpp_1_1CuError-members.html
new file mode 100644
index 00000000..3f74c13a
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CuError-members.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::CuError , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError.html b/docs/doxygen/html/classmscclpp_1_1CuError.html
new file mode 100644
index 00000000..fd252ffe
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CuError.html
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::CuError Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
An error from a CUDA driver library call.
+ More...
+
+
#include <errors.hpp >
+
+
+
+
+
+
+
An error from a CUDA driver library call.
+
+
+
◆ CuError()
+
+
+
+
+
+ mscclpp::CuError::CuError
+ (
+ const std::string &
+ message ,
+
+
+
+
+ int
+ errorCode
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ ~CuError()
+
+
+
+
+
+
+
+
+ virtual mscclpp::CuError::~CuError
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.map
new file mode 100644
index 00000000..963d02a0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.md5
new file mode 100644
index 00000000..bc93c80e
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.md5
@@ -0,0 +1 @@
+7f90c89a3d13ba7f754f1dbda3007e54
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.png
new file mode 100644
index 00000000..5a077d8e
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1CuError__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.map
new file mode 100644
index 00000000..963d02a0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.md5
new file mode 100644
index 00000000..bc93c80e
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.md5
@@ -0,0 +1 @@
+7f90c89a3d13ba7f754f1dbda3007e54
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.png
new file mode 100644
index 00000000..5a077d8e
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1CuError__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError-members.html b/docs/doxygen/html/classmscclpp_1_1CudaError-members.html
new file mode 100644
index 00000000..fb5363cd
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CudaError-members.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::CudaError , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError.html b/docs/doxygen/html/classmscclpp_1_1CudaError.html
new file mode 100644
index 00000000..470b0bfd
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CudaError.html
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::CudaError Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
An error from a CUDA runtime library call.
+ More...
+
+
#include <errors.hpp >
+
+
+
+
+
+
+
An error from a CUDA runtime library call.
+
+
+
◆ CudaError()
+
+
+
+
+
+ mscclpp::CudaError::CudaError
+ (
+ const std::string &
+ message ,
+
+
+
+
+ int
+ errorCode
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ ~CudaError()
+
+
+
+
+
+
+
+
+ virtual mscclpp::CudaError::~CudaError
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.map
new file mode 100644
index 00000000..f331f63a
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.md5
new file mode 100644
index 00000000..66028ec0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.md5
@@ -0,0 +1 @@
+a2887598bede3b7c877d0247d1e10afb
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.png
new file mode 100644
index 00000000..41981d69
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1CudaError__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.map
new file mode 100644
index 00000000..f331f63a
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.md5
new file mode 100644
index 00000000..66028ec0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.md5
@@ -0,0 +1 @@
+a2887598bede3b7c877d0247d1e10afb
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.png
new file mode 100644
index 00000000..41981d69
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1CudaError__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Endpoint-members.html b/docs/doxygen/html/classmscclpp_1_1Endpoint-members.html
new file mode 100644
index 00000000..d982bea7
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Endpoint-members.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Endpoint , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Endpoint.html b/docs/doxygen/html/classmscclpp_1_1Endpoint.html
new file mode 100644
index 00000000..ca4d15ca
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Endpoint.html
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Endpoint Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Represents one end of a connection.
+ More...
+
+
#include <core.hpp >
+
+
+
Represents one end of a connection.
+
+
+
◆ Endpoint()
+
+
+
+
+
+
+
+
+ mscclpp::Endpoint::Endpoint
+ (
+ )
+
+
+
+
+
+default
+
+
+
+
+
Default constructor.
+
+
+
+
+
+
◆ deserialize()
+
+
+
+
+
+
+
+
+ static Endpoint mscclpp::Endpoint::deserialize
+ (
+ const std::vector< char > &
+ data )
+
+
+
+
+
+static
+
+
+
+
Deserialize a Endpoint object from a vector of characters.
+
Parameters
+
+ data A vector of characters representing a serialized Endpoint object.
+
+
+
+
Returns A deserialized Endpoint object.
+
+
+
+
+
◆ serialize()
+
+
+
+
+
+ std::vector<char> mscclpp::Endpoint::serialize
+ (
+ )
+
+
+
+
+
Serialize the Endpoint object to a vector of characters.
+
Returns A vector of characters representing the serialized Endpoint object.
+
+
+
+
+
◆ transport()
+
+
+
+
+
+ Transport mscclpp::Endpoint::transport
+ (
+ )
+
+
+
+
+
Get the transport used.
+
Returns The transport used.
+
+
+
+
+
+
◆ Connection
+
+
+
+
◆ Context
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Error-members.html b/docs/doxygen/html/classmscclpp_1_1Error-members.html
new file mode 100644
index 00000000..6aaadd76
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Error-members.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Error , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Error.html b/docs/doxygen/html/classmscclpp_1_1Error.html
new file mode 100644
index 00000000..4037ce53
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Error.html
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Error Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A generic error.
+ More...
+
+
#include <errors.hpp >
+
+
+
+
+
+
+
+
+
◆ Error()
+
+
+
+
+
+ mscclpp::Error::Error
+ (
+ const std::string &
+ message ,
+
+
+
+
+ ErrorCode
+ errorCode
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ ~Error()
+
+
+
+
+
+
+
+
+ virtual mscclpp::Error::~Error
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
+
+
◆ getErrorCode()
+
+
+
+
+
+ ErrorCode mscclpp::Error::getErrorCode
+ (
+ )
+ const
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.map
new file mode 100644
index 00000000..3c5d3b9b
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.md5
new file mode 100644
index 00000000..a3465d2c
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.md5
@@ -0,0 +1 @@
+d16e15307ec20d29f81ead4089fab598
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.png
new file mode 100644
index 00000000..2946b3f1
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Error__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.map
new file mode 100644
index 00000000..3c5d3b9b
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.md5
new file mode 100644
index 00000000..a3465d2c
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.md5
@@ -0,0 +1 @@
+d16e15307ec20d29f81ead4089fab598
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.png
new file mode 100644
index 00000000..2946b3f1
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Error__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1ExecutionPlan-members.html b/docs/doxygen/html/classmscclpp_1_1ExecutionPlan-members.html
new file mode 100644
index 00000000..af8554cf
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ExecutionPlan-members.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::ExecutionPlan , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1ExecutionPlan.html b/docs/doxygen/html/classmscclpp_1_1ExecutionPlan.html
new file mode 100644
index 00000000..6b49cd7e
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ExecutionPlan.html
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::ExecutionPlan Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <executor.hpp >
+
+
+
+
◆ ExecutionPlan()
+
+
+
+
+
+ mscclpp::ExecutionPlan::ExecutionPlan
+ (
+ const std::string &
+ name ,
+
+
+
+
+ const std::string &
+ planPath
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ ~ExecutionPlan()
+
+
+
+
+
+
+
+
+ mscclpp::ExecutionPlan::~ExecutionPlan
+ (
+ )
+
+
+
+
+
+default
+
+
+
+
+
+
+
+
+
◆ Executor
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Executor-members.html b/docs/doxygen/html/classmscclpp_1_1Executor-members.html
new file mode 100644
index 00000000..53e4ed57
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Executor-members.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Executor , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Executor.html b/docs/doxygen/html/classmscclpp_1_1Executor.html
new file mode 100644
index 00000000..9a98dde1
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Executor.html
@@ -0,0 +1,262 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Executor Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <executor.hpp >
+
+
+
+
◆ Executor() [1/2]
+
+
+
+
+
+ mscclpp::Executor::Executor
+ (
+ std::shared_ptr< Communicator >
+ comm )
+
+
+
+
+
+
+
+
+
◆ Executor() [2/2]
+
+
+
+
+
+
+
+
+ mscclpp::Executor::Executor
+ (
+ const Executor &
+ )
+
+
+
+
+
+delete
+
+
+
+
+
+
+
+
◆ ~Executor()
+
+
+
+
+
+ mscclpp::Executor::~Executor
+ (
+ )
+
+
+
+
+
+
+
+
+
+
◆ execute()
+
+
+
+
+
+ void mscclpp::Executor::execute
+ (
+ int
+ rank ,
+
+
+
+
+ void *
+ sendbuff ,
+
+
+
+
+ void *
+ recvBuff ,
+
+
+
+
+ size_t
+ sendBuffSize ,
+
+
+
+
+ size_t
+ recvBuffSize ,
+
+
+
+
+ DataType
+ dataType ,
+
+
+
+
+ const ExecutionPlan &
+ plan ,
+
+
+
+
+ cudaStream_t
+ stream ,
+
+
+
+
+ PacketType
+ packetType = PacketType::LL16
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ operator=()
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Fifo-members.html b/docs/doxygen/html/classmscclpp_1_1Fifo-members.html
new file mode 100644
index 00000000..aa05bcdc
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Fifo-members.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Fifo , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Fifo.html b/docs/doxygen/html/classmscclpp_1_1Fifo.html
new file mode 100644
index 00000000..fa737ff3
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Fifo.html
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Fifo Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A class representing a host proxy FIFO that can consume work elements pushed by device threads.
+ More...
+
+
#include <fifo.hpp >
+
+
+
A class representing a host proxy FIFO that can consume work elements pushed by device threads.
+
+
+
◆ Fifo()
+
+
+
+
Constructs a new Fifo object.
Parameters
+
+ size The number of entires in the FIFO.
+
+
+
+
+
+
+
+
◆ ~Fifo()
+
+
+
+
+
+ mscclpp::Fifo::~Fifo
+ (
+ )
+
+
+
+
+
+
Destroys the Fifo object.
+
+
+
+
+
+
◆ deviceHandle()
+
+
+
+
◆ flushTail()
+
+
+
+
+
+ void mscclpp::Fifo::flushTail
+ (
+ bool
+ sync = false
)
+
+
+
+
+
Flushes the tail of the FIFO.
+
Parameters
+
+ sync If true, waits for the flush to complete before returning.
+
+
+
+
+
+
+
+
◆ poll()
+
+
+
+
Polls the FIFO for a trigger.
+
Returns ProxyTrigger which is the trigger at the head of fifo.
+
+
+
+
+
◆ pop()
+
+
+
+
+
+ void mscclpp::Fifo::pop
+ (
+ )
+
+
+
+
+
+
Pops a trigger from the FIFO.
+
+
+
+
+
◆ size()
+
+
+
+
+
+ int mscclpp::Fifo::size
+ (
+ )
+ const
+
+
+
+
Return the FIFO size.
Returns The FIFO size.
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore-members.html b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore-members.html
new file mode 100644
index 00000000..a5bd0997
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Host2DeviceSemaphore , including all inherited members.
+
+ BaseSemaphore (std::unique_ptr< uint64_t, CudaDeleter< uint64_t >> localInboundSemaphoreId, std::unique_ptr< uint64_t, CudaDeleter< uint64_t >> expectedInboundSemaphoreId, std::unique_ptr< uint64_t, std::default_delete< uint64_t >> outboundSemaphoreId)mscclpp::BaseSemaphore< CudaDeleter, std::default_delete > inline
+ connection ()mscclpp::Host2DeviceSemaphore
+ DeviceHandle typedefmscclpp::Host2DeviceSemaphore
+ deviceHandle ()mscclpp::Host2DeviceSemaphore
+ expectedInboundSemaphore_ mscclpp::BaseSemaphore< CudaDeleter, std::default_delete > protected
+ Host2DeviceSemaphore (Communicator &communicator, std::shared_ptr< Connection > connection)mscclpp::Host2DeviceSemaphore
+ localInboundSemaphore_ mscclpp::BaseSemaphore< CudaDeleter, std::default_delete > protected
+ outboundSemaphore_ mscclpp::BaseSemaphore< CudaDeleter, std::default_delete > protected
+ remoteInboundSemaphoreIdsRegMem_ mscclpp::BaseSemaphore< CudaDeleter, std::default_delete > protected
+ signal ()mscclpp::Host2DeviceSemaphore
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore.html b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore.html
new file mode 100644
index 00000000..82fc7323
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore.html
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Host2DeviceSemaphore Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A semaphore for sending signals from the host to the device.
+ More...
+
+
#include <semaphore.hpp >
+
+
+
+
+
+
+
A semaphore for sending signals from the host to the device.
+
+
+
◆ DeviceHandle
+
+
+
+
+
◆ Host2DeviceSemaphore()
+
+
+
+
+
+ mscclpp::Host2DeviceSemaphore::Host2DeviceSemaphore
+ (
+ Communicator &
+ communicator ,
+
+
+
+
+ std::shared_ptr< Connection >
+ connection
+
+
+
+ )
+
+
+
+
+
Constructor.
Parameters
+
+ communicator The communicator.
+ connection The connection associated with this semaphore.
+
+
+
+
+
+
+
+
+
◆ connection()
+
+
+
+
+
+ std::shared_ptr<Connection > mscclpp::Host2DeviceSemaphore::connection
+ (
+ )
+
+
+
+
+
Returns the connection.
Returns The connection associated with this semaphore.
+
+
+
+
+
◆ deviceHandle()
+
+
+
+
+
+ DeviceHandle mscclpp::Host2DeviceSemaphore::deviceHandle
+ (
+ )
+
+
+
+
+
+
Returns the device-side handle.
+
+
+
+
+
◆ signal()
+
+
+
+
+
+ void mscclpp::Host2DeviceSemaphore::signal
+ (
+ )
+
+
+
+
+
+
Signal the device.
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.map
new file mode 100644
index 00000000..1b441d65
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.md5
new file mode 100644
index 00000000..e202b325
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.md5
@@ -0,0 +1 @@
+3749bc1ec7779fa6b203f481ffb874fd
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.png
new file mode 100644
index 00000000..560b48cf
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.map
new file mode 100644
index 00000000..09bcfa54
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.md5
new file mode 100644
index 00000000..b69dade4
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.md5
@@ -0,0 +1 @@
+f3802681eda9ac947742ea3137dacefa
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.png
new file mode 100644
index 00000000..63e77552
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Host2DeviceSemaphore__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore-members.html b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore-members.html
new file mode 100644
index 00000000..21e57dac
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Host2HostSemaphore , including all inherited members.
+
+ BaseSemaphore (std::unique_ptr< uint64_t, std::default_delete< uint64_t >> localInboundSemaphoreId, std::unique_ptr< uint64_t, std::default_delete< uint64_t >> expectedInboundSemaphoreId, std::unique_ptr< uint64_t, std::default_delete< uint64_t >> outboundSemaphoreId)mscclpp::BaseSemaphore< std::default_delete, std::default_delete > inline
+ connection ()mscclpp::Host2HostSemaphore
+ expectedInboundSemaphore_ mscclpp::BaseSemaphore< std::default_delete, std::default_delete > protected
+ Host2HostSemaphore (Communicator &communicator, std::shared_ptr< Connection > connection)mscclpp::Host2HostSemaphore
+ localInboundSemaphore_ mscclpp::BaseSemaphore< std::default_delete, std::default_delete > protected
+ outboundSemaphore_ mscclpp::BaseSemaphore< std::default_delete, std::default_delete > protected
+ poll ()mscclpp::Host2HostSemaphore
+ remoteInboundSemaphoreIdsRegMem_ mscclpp::BaseSemaphore< std::default_delete, std::default_delete > protected
+ signal ()mscclpp::Host2HostSemaphore
+ wait (int64_t maxSpinCount=10000000)mscclpp::Host2HostSemaphore
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore.html b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore.html
new file mode 100644
index 00000000..8d95cf78
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore.html
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Host2HostSemaphore Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A semaphore for sending signals from the local host to a remote host.
+ More...
+
+
#include <semaphore.hpp >
+
+
+
+
+
+
+ Host2HostSemaphore (Communicator &communicator, std::shared_ptr< Connection > connection )
+
+std::shared_ptr< Connection > connection ()
+
+void signal ()
+ Signal the remote host. More...
+
+bool poll ()
+
+void wait (int64_t maxSpinCount=10000000)
+
+
+ BaseSemaphore (std::unique_ptr< uint64_t, std::default_delete< uint64_t >> localInboundSemaphoreId, std::unique_ptr< uint64_t, std::default_delete< uint64_t >> expectedInboundSemaphoreId, std::unique_ptr< uint64_t, std::default_delete< uint64_t >> outboundSemaphoreId)
+
+
+
+
A semaphore for sending signals from the local host to a remote host.
+
+
+
◆ Host2HostSemaphore()
+
+
+
+
+
+ mscclpp::Host2HostSemaphore::Host2HostSemaphore
+ (
+ Communicator &
+ communicator ,
+
+
+
+
+ std::shared_ptr< Connection >
+ connection
+
+
+
+ )
+
+
+
+
+
Constructor
Parameters
+
+
+
+
+
+
+
+
+
◆ connection()
+
+
+
+
+
+ std::shared_ptr<Connection > mscclpp::Host2HostSemaphore::connection
+ (
+ )
+
+
+
+
+
Returns the connection.
Returns The connection associated with this semaphore.
+
+
+
+
+
◆ poll()
+
+
+
+
+
+ bool mscclpp::Host2HostSemaphore::poll
+ (
+ )
+
+
+
+
+
Check if the remote host has signaled.
Returns true if the remote host has signaled.
+
+
+
+
+
◆ signal()
+
+
+
+
+
+ void mscclpp::Host2HostSemaphore::signal
+ (
+ )
+
+
+
+
+
+
Signal the remote host.
+
+
+
+
+
◆ wait()
+
+
+
+
+
+ void mscclpp::Host2HostSemaphore::wait
+ (
+ int64_t
+ maxSpinCount = 10000000
)
+
+
+
+
+
Wait for the remote host to signal.
Parameters
+
+ maxSpinCount The maximum number of spin counts before throwing an exception. Never throws if negative.
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.map
new file mode 100644
index 00000000..102d324e
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.md5
new file mode 100644
index 00000000..5dfa2e97
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.md5
@@ -0,0 +1 @@
+937efcb48e2ac67ce2a12c0c49ce9d4f
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.png
new file mode 100644
index 00000000..59b2a2d1
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.map
new file mode 100644
index 00000000..a21db4e7
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.md5
new file mode 100644
index 00000000..c4742ce1
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.md5
@@ -0,0 +1 @@
+1b82a49716e14e697c3552c93ce4ef15
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.png
new file mode 100644
index 00000000..b32672f8
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1Host2HostSemaphore__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError-members.html b/docs/doxygen/html/classmscclpp_1_1IbError-members.html
new file mode 100644
index 00000000..e6b75caa
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1IbError-members.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::IbError , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError.html b/docs/doxygen/html/classmscclpp_1_1IbError.html
new file mode 100644
index 00000000..dba62d61
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1IbError.html
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::IbError Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
An error from an ibverbs library call.
+ More...
+
+
#include <errors.hpp >
+
+
+
+
+
+
+
An error from an ibverbs library call.
+
+
+
◆ IbError()
+
+
+
+
+
+ mscclpp::IbError::IbError
+ (
+ const std::string &
+ message ,
+
+
+
+
+ int
+ errorCode
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ ~IbError()
+
+
+
+
+
+
+
+
+ virtual mscclpp::IbError::~IbError
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.map
new file mode 100644
index 00000000..30d288ce
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.md5
new file mode 100644
index 00000000..476efadc
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.md5
@@ -0,0 +1 @@
+16987c0e670335d7ead4e9220d42932f
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.png
new file mode 100644
index 00000000..bec7cbe2
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1IbError__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.map
new file mode 100644
index 00000000..30d288ce
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.md5
new file mode 100644
index 00000000..476efadc
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.md5
@@ -0,0 +1 @@
+16987c0e670335d7ead4e9220d42932f
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.png
new file mode 100644
index 00000000..bec7cbe2
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1IbError__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1NonblockingFuture-members.html b/docs/doxygen/html/classmscclpp_1_1NonblockingFuture-members.html
new file mode 100644
index 00000000..241ae92a
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1NonblockingFuture-members.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::NonblockingFuture< T > , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1NonblockingFuture.html b/docs/doxygen/html/classmscclpp_1_1NonblockingFuture.html
new file mode 100644
index 00000000..86eb2b8d
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1NonblockingFuture.html
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::NonblockingFuture< T > Class Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A non-blocking future that can be used to check if a value is ready and retrieve it.
+ More...
+
+
#include <core.hpp >
+
+
+
template<typename T>
+class mscclpp::NonblockingFuture< T >
+
+
A non-blocking future that can be used to check if a value is ready and retrieve it.
+
+
+
◆ NonblockingFuture() [1/2]
+
+
+
+
+template<typename T >
+
+
+
+
Default constructor.
+
+
+
+
+
◆ NonblockingFuture() [2/2]
+
+
+
+
+template<typename T >
+
+
+
Constructor that takes a shared future and moves it into the NonblockingFuture .
+
Parameters
+
+ future The shared future to move.
+
+
+
+
+
+
+
+
+
◆ get()
+
+
+
+
+template<typename T >
+
+
+
Get the value.
+
Returns The value.
+
Exceptions
+
+ Error if the value is not ready.
+
+
+
+
+
+
+
+
◆ ready()
+
+
+
+
+template<typename T >
+
+
+
Check if the value is ready to be retrieved.
+
Returns True if the value is ready, false otherwise.
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1NvlsConnection-members.html b/docs/doxygen/html/classmscclpp_1_1NvlsConnection-members.html
new file mode 100644
index 00000000..7937d0c2
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1NvlsConnection-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::NvlsConnection , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1NvlsConnection.html b/docs/doxygen/html/classmscclpp_1_1NvlsConnection.html
new file mode 100644
index 00000000..d35a2ada
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1NvlsConnection.html
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::NvlsConnection Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <nvls.hpp >
+
+
+
+
◆ NvlsConnection() [1/3]
+
+
+
+
+
+ mscclpp::NvlsConnection::NvlsConnection
+ (
+ size_t
+ bufferSize ,
+
+
+
+
+ int
+ numDevices
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ NvlsConnection() [2/3]
+
+
+
+
+
+ mscclpp::NvlsConnection::NvlsConnection
+ (
+ const std::vector< char > &
+ data )
+
+
+
+
+
+
+
+
+
◆ NvlsConnection() [3/3]
+
+
+
+
+
+
+
+
+ mscclpp::NvlsConnection::NvlsConnection
+ (
+ )
+
+
+
+
+
+delete
+
+
+
+
+
+
+
+
+
◆ addDevice() [1/2]
+
+
+
+
+
+ void mscclpp::NvlsConnection::addDevice
+ (
+ )
+
+
+
+
+
+
+
+
+
◆ addDevice() [2/2]
+
+
+
+
+
+ void mscclpp::NvlsConnection::addDevice
+ (
+ int
+ cudaDeviceId )
+
+
+
+
+
+
+
+
+
◆ allocateAndBindCuda()
+
+
+
+
+
+ std::shared_ptr<DeviceMulticastPointer > mscclpp::NvlsConnection::allocateAndBindCuda
+ (
+ size_t
+ size )
+
+
+
+
+
+
+
+
+
◆ bindAllocatedCuda()
+
+
+
+
+
+ std::shared_ptr<char> mscclpp::NvlsConnection::bindAllocatedCuda
+ (
+ CUmemGenericAllocationHandle
+ memHandle ,
+
+
+
+
+ size_t
+ size
+
+
+
+ )
+
+
+
+
+
The handle
to the allocation (its lifetime is managed by the caller) and the size
of the allocation.
+
+
+
+
+
◆ getMultiCastMinGranularity()
+
+
+
+
+
+ size_t mscclpp::NvlsConnection::getMultiCastMinGranularity
+ (
+ )
+
+
+
+
+
+
+
+
+
◆ serialize()
+
+
+
+
+
+ std::vector<char> mscclpp::NvlsConnection::serialize
+ (
+ )
+
+
+
+
+
+
+
+
+
+
◆ DefaultNvlsBufferSize
+
+
+
+
+
+
+
+
+ const int mscclpp::NvlsConnection::DefaultNvlsBufferSize
+
+
+
+
+static
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Proxy-members.html b/docs/doxygen/html/classmscclpp_1_1Proxy-members.html
new file mode 100644
index 00000000..5ad1c84b
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Proxy-members.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::Proxy , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1Proxy.html b/docs/doxygen/html/classmscclpp_1_1Proxy.html
new file mode 100644
index 00000000..d60f9a18
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1Proxy.html
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::Proxy Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <proxy.hpp >
+
+
+
+
◆ Proxy() [1/2]
+
+
+
+
+
+ mscclpp::Proxy::Proxy
+ (
+ ProxyHandler
+ handler ,
+
+
+
+
+ std::function< void()>
+ threadInit ,
+
+
+
+
+ size_t
+ fifoSize = DEFAULT_FIFO_SIZE
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ Proxy() [2/2]
+
+
+
+
◆ ~Proxy()
+
+
+
+
+
+ mscclpp::Proxy::~Proxy
+ (
+ )
+
+
+
+
+
+
+
+
+
+
◆ fifo()
+
+
+
+
+
+ Fifo & mscclpp::Proxy::fifo
+ (
+ )
+
+
+
+
+
This is a concurrent fifo which is multiple threads from the device can produce for and the sole proxy thread consumes it.
Returns the fifo
+
+
+
+
+
◆ start()
+
+
+
+
+
+ void mscclpp::Proxy::start
+ (
+ )
+
+
+
+
+
+
+
+
+
◆ stop()
+
+
+
+
+
+ void mscclpp::Proxy::stop
+ (
+ )
+
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService-members.html b/docs/doxygen/html/classmscclpp_1_1ProxyService-members.html
new file mode 100644
index 00000000..dbb8d317
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ProxyService-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::ProxyService , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService.html b/docs/doxygen/html/classmscclpp_1_1ProxyService.html
new file mode 100644
index 00000000..0e5e1586
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ProxyService.html
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::ProxyService Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Proxy service implementation.
+ More...
+
+
#include <proxy_channel.hpp >
+
+
+
+
+
+
+
Proxy service implementation.
+
+
+
◆ ProxyService()
+
+
+
+
+
+ mscclpp::ProxyService::ProxyService
+ (
+ size_t
+ fifoSize = DEFAULT_FIFO_SIZE
)
+
+
+
+
+
+
+
+
◆ addMemory()
+
+
+
+
Register a memory region with the proxy service.
Parameters
+
+ memory The memory region to register.
+
+
+
+
Returns The ID of the memory region.
+
+
+
+
+
◆ addSemaphore()
+
+
+
+
Add a semaphore to the proxy service.
Parameters
+
+ semaphore The semaphore to be added
+
+
+
+
Returns The ID of the semaphore.
+
+
+
+
+
◆ buildAndAddSemaphore()
+
+
+
+
+
+ SemaphoreId mscclpp::ProxyService::buildAndAddSemaphore
+ (
+ Communicator &
+ communicator ,
+
+
+
+
+ std::shared_ptr< Connection >
+ connection
+
+
+
+ )
+
+
+
+
+
Build and add a semaphore to the proxy service.
Parameters
+
+ connection The connection associated with the semaphore.
+
+
+
+
Returns The ID of the semaphore.
+
+
+
+
+
◆ proxyChannel()
+
+
+
+
Get a proxy channel by semaphore ID.
Parameters
+
+ id The ID of the semaphore.
+
+
+
+
Returns The proxy channel.
+
+
+
+
+
◆ semaphore()
+
+
+
+
Get a semaphore by ID.
Parameters
+
+ id The ID of the semaphore.
+
+
+
+
Returns The semaphore.
+
+
+
+
+
◆ startProxy()
+
+
+
+
+
+
+
+
+ void mscclpp::ProxyService::startProxy
+ (
+ )
+
+
+
+
+
+virtual
+
+
+
+
+
+
◆ stopProxy()
+
+
+
+
+
+
+
+
+ void mscclpp::ProxyService::stopProxy
+ (
+ )
+
+
+
+
+
+virtual
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.map
new file mode 100644
index 00000000..4e496584
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.md5
new file mode 100644
index 00000000..d2f81860
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.md5
@@ -0,0 +1 @@
+7bba2a4a19cfadf2c0b9d8ebece22c8c
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.png
new file mode 100644
index 00000000..91d5446e
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1ProxyService__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.map
new file mode 100644
index 00000000..4e496584
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.md5
new file mode 100644
index 00000000..d2f81860
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.md5
@@ -0,0 +1 @@
+7bba2a4a19cfadf2c0b9d8ebece22c8c
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.png
new file mode 100644
index 00000000..91d5446e
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1ProxyService__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1RegisteredMemory-members.html b/docs/doxygen/html/classmscclpp_1_1RegisteredMemory-members.html
new file mode 100644
index 00000000..1d5ae49a
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1RegisteredMemory-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::RegisteredMemory , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1RegisteredMemory.html b/docs/doxygen/html/classmscclpp_1_1RegisteredMemory.html
new file mode 100644
index 00000000..197f0262
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1RegisteredMemory.html
@@ -0,0 +1,350 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::RegisteredMemory Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Represents a block of memory that has been registered to a Context .
+ More...
+
+
#include <core.hpp >
+
+
+
Represents a block of memory that has been registered to a Context .
+
+
+
◆ RegisteredMemory()
+
+
+
+
+
+
+
+
+ mscclpp::RegisteredMemory::RegisteredMemory
+ (
+ )
+
+
+
+
+
+default
+
+
+
+
+
Default constructor.
+
+
+
+
+
◆ ~RegisteredMemory()
+
+
+
+
+
+ mscclpp::RegisteredMemory::~RegisteredMemory
+ (
+ )
+
+
+
+
+
+
+
+
◆ data()
+
+
+
+
+
+ void* mscclpp::RegisteredMemory::data
+ (
+ )
+ const
+
+
+
+
Get a pointer to the memory block.
+
Returns A pointer to the memory block.
+
+
+
+
+
◆ deserialize()
+
+
+
+
+
+
+
+
+ static RegisteredMemory mscclpp::RegisteredMemory::deserialize
+ (
+ const std::vector< char > &
+ data )
+
+
+
+
+
+static
+
+
+
+
+
+
◆ originalDataPtr()
+
+
+
+
+
+ void* mscclpp::RegisteredMemory::originalDataPtr
+ (
+ )
+ const
+
+
+
+
Get a pointer to the original memory block.
+
Returns A pointer to the original memory block.
+
+
+
+
+
◆ serialize()
+
+
+
+
+
+ std::vector<char> mscclpp::RegisteredMemory::serialize
+ (
+ )
+
+
+
+
+
+
+
◆ size()
+
+
+
+
+
+ size_t mscclpp::RegisteredMemory::size
+ (
+ )
+
+
+
+
+
Get the size of the memory block.
+
Returns The size of the memory block.
+
+
+
+
+
◆ transports()
+
+
+
+
+
+ TransportFlags mscclpp::RegisteredMemory::transports
+ (
+ )
+
+
+
+
+
Get the transport flags associated with the memory block.
+
Returns The transport flags associated with the memory block.
+
+
+
+
+
+
◆ Connection
+
+
+
+
◆ Context
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore-members.html b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore-members.html
new file mode 100644
index 00000000..985f9026
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::SmDevice2DeviceSemaphore , including all inherited members.
+
+ BaseSemaphore (std::unique_ptr< uint64_t, CudaDeleter< uint64_t >> localInboundSemaphoreId, std::unique_ptr< uint64_t, CudaDeleter< uint64_t >> expectedInboundSemaphoreId, std::unique_ptr< uint64_t, CudaDeleter< uint64_t >> outboundSemaphoreId)mscclpp::BaseSemaphore< CudaDeleter, CudaDeleter > inline
+ DeviceHandle typedefmscclpp::SmDevice2DeviceSemaphore
+ deviceHandle () constmscclpp::SmDevice2DeviceSemaphore
+ expectedInboundSemaphore_ mscclpp::BaseSemaphore< CudaDeleter, CudaDeleter > protected
+ isRemoteInboundSemaphoreIdSet_ mscclpp::SmDevice2DeviceSemaphore
+ localInboundSemaphore_ mscclpp::BaseSemaphore< CudaDeleter, CudaDeleter > protected
+ outboundSemaphore_ mscclpp::BaseSemaphore< CudaDeleter, CudaDeleter > protected
+ remoteInboundSemaphoreIdsRegMem_ mscclpp::BaseSemaphore< CudaDeleter, CudaDeleter > protected
+ SmDevice2DeviceSemaphore (Communicator &communicator, std::shared_ptr< Connection > connection)mscclpp::SmDevice2DeviceSemaphore
+ SmDevice2DeviceSemaphore ()=deletemscclpp::SmDevice2DeviceSemaphore
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore.html b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore.html
new file mode 100644
index 00000000..85544aa0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore.html
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::SmDevice2DeviceSemaphore Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A semaphore for sending signals from the local device to a peer device via SM.
+ More...
+
+
#include <semaphore.hpp >
+
+
+
+
+
+
+
A semaphore for sending signals from the local device to a peer device via SM.
+
+
+
◆ DeviceHandle
+
+
+
+
+
◆ SmDevice2DeviceSemaphore() [1/2]
+
+
+
+
+
+ mscclpp::SmDevice2DeviceSemaphore::SmDevice2DeviceSemaphore
+ (
+ Communicator &
+ communicator ,
+
+
+
+
+ std::shared_ptr< Connection >
+ connection
+
+
+
+ )
+
+
+
+
+
Constructor.
Parameters
+
+ communicator The communicator.
+ connection The connection associated with this semaphore.
+
+
+
+
+
+
+
+
◆ SmDevice2DeviceSemaphore() [2/2]
+
+
+
+
+
+
+
+
+ mscclpp::SmDevice2DeviceSemaphore::SmDevice2DeviceSemaphore
+ (
+ )
+
+
+
+
+
+delete
+
+
+
+
+
+
+
◆ deviceHandle()
+
+
+
+
+
+ DeviceHandle mscclpp::SmDevice2DeviceSemaphore::deviceHandle
+ (
+ )
+ const
+
+
+
+
+
Returns the device-side handle.
+
+
+
+
+
+
◆ isRemoteInboundSemaphoreIdSet_
+
+
+
+
+
+ bool mscclpp::SmDevice2DeviceSemaphore::isRemoteInboundSemaphoreIdSet_
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.map
new file mode 100644
index 00000000..7b1a5792
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.md5
new file mode 100644
index 00000000..b33b4005
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.md5
@@ -0,0 +1 @@
+cd416c4af929fa8d3004be253f201f8a
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.png
new file mode 100644
index 00000000..494ca2da
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.map
new file mode 100644
index 00000000..de448588
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.md5
new file mode 100644
index 00000000..a7c4919b
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.md5
@@ -0,0 +1 @@
+04c547ba372127b300e0ba089babb9aa
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.png
new file mode 100644
index 00000000..37aa6a4f
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1SmDevice2DeviceSemaphore__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError-members.html b/docs/doxygen/html/classmscclpp_1_1SysError-members.html
new file mode 100644
index 00000000..885e19a8
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SysError-members.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::SysError , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError.html b/docs/doxygen/html/classmscclpp_1_1SysError.html
new file mode 100644
index 00000000..7970f6b8
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SysError.html
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::SysError Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
An error from a system call that sets errno
.
+ More...
+
+
#include <errors.hpp >
+
+
+
+
+
+
+
An error from a system call that sets errno
.
+
+
+
◆ SysError()
+
+
+
+
+
+ mscclpp::SysError::SysError
+ (
+ const std::string &
+ message ,
+
+
+
+
+ int
+ errorCode
+
+
+
+ )
+
+
+
+
+
+
+
+
+
◆ ~SysError()
+
+
+
+
+
+
+
+
+ virtual mscclpp::SysError::~SysError
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.map
new file mode 100644
index 00000000..eaf00a2b
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.md5
new file mode 100644
index 00000000..736e4e90
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.md5
@@ -0,0 +1 @@
+bdd6ecd933aafa7e368eea2427e4d8aa
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.png
new file mode 100644
index 00000000..53bc8d7c
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1SysError__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.map
new file mode 100644
index 00000000..eaf00a2b
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.md5
new file mode 100644
index 00000000..736e4e90
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.md5
@@ -0,0 +1 @@
+bdd6ecd933aafa7e368eea2427e4d8aa
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.png
new file mode 100644
index 00000000..53bc8d7c
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1SysError__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap-members.html b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap-members.html
new file mode 100644
index 00000000..2db61af9
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap-members.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::TcpBootstrap , including all inherited members.
+
+ allGather (void *allData, int size) overridemscclpp::TcpBootstrap virtual
+ barrier () overridemscclpp::TcpBootstrap virtual
+ Bootstrap ()mscclpp::Bootstrap inline
+ createUniqueId ()mscclpp::TcpBootstrap static
+ getNranks () overridemscclpp::TcpBootstrap virtual
+ getNranksPerNode () overridemscclpp::TcpBootstrap virtual
+ getRank () overridemscclpp::TcpBootstrap virtual
+ getUniqueId () constmscclpp::TcpBootstrap
+ groupBarrier (const std::vector< int > &ranks)mscclpp::Bootstrap
+ initialize (UniqueId uniqueId, int64_t timeoutSec=30)mscclpp::TcpBootstrap
+ initialize (const std::string &ifIpPortTrio, int64_t timeoutSec=30)mscclpp::TcpBootstrap
+ recv (void *data, int size, int peer, int tag) overridemscclpp::TcpBootstrap virtual
+ mscclpp::Bootstrap::recv (std::vector< char > &data, int peer, int tag)mscclpp::Bootstrap
+ send (void *data, int size, int peer, int tag) overridemscclpp::TcpBootstrap virtual
+ mscclpp::Bootstrap::send (const std::vector< char > &data, int peer, int tag)mscclpp::Bootstrap
+ TcpBootstrap (int rank, int nRanks)mscclpp::TcpBootstrap
+ ~Bootstrap ()=defaultmscclpp::Bootstrap virtual
+ ~TcpBootstrap ()mscclpp::TcpBootstrap
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap.html b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap.html
new file mode 100644
index 00000000..61257725
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap.html
@@ -0,0 +1,617 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::TcpBootstrap Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A native implementation of the bootstrap using TCP sockets.
+ More...
+
+
#include <core.hpp >
+
+
+
+
+
+
+ TcpBootstrap (int rank, int nRanks)
+
+ ~TcpBootstrap ()
+ Destructor. More...
+
+UniqueId getUniqueId () const
+
+void initialize (UniqueId uniqueId, int64_t timeoutSec=30)
+
+void initialize (const std::string &ifIpPortTrio, int64_t timeoutSec=30)
+
+int getRank () override
+ Return the rank of the process. More...
+
+int getNranks () override
+ Return the total number of ranks. More...
+
+int getNranksPerNode () override
+ Return the total number of ranks per node. More...
+
+void send (void *data, int size, int peer, int tag) override
+
+void recv (void *data, int size, int peer, int tag) override
+
+void allGather (void *allData, int size) override
+
+void barrier () override
+ Synchronize all processes. More...
+
+
+ Bootstrap ()
+
+virtual ~Bootstrap ()=default
+
+void groupBarrier (const std::vector< int > &ranks)
+
+void send (const std::vector< char > &data, int peer, int tag)
+
+void recv (std::vector< char > &data, int peer, int tag)
+
+
+
+
A native implementation of the bootstrap using TCP sockets.
+
+
+
◆ TcpBootstrap()
+
+
+
+
+
+ mscclpp::TcpBootstrap::TcpBootstrap
+ (
+ int
+ rank ,
+
+
+
+
+ int
+ nRanks
+
+
+
+ )
+
+
+
+
+
Constructor.
Parameters
+
+ rank The rank of the process.
+ nRanks The total number of ranks.
+
+
+
+
+
+
+
+
◆ ~TcpBootstrap()
+
+
+
+
+
+ mscclpp::TcpBootstrap::~TcpBootstrap
+ (
+ )
+
+
+
+
+
+
+
+
◆ allGather()
+
+
+
+
+
+
+
+
+ void mscclpp::TcpBootstrap::allGather
+ (
+ void *
+ allData ,
+
+
+
+
+ int
+ size
+
+
+
+ )
+
+
+
+
+
+override virtual
+
+
+
+
Gather data from all processes.
+
When called by rank r
, this sends data from allData[r * size]
to allData[(r + 1) * size - 1]
to all other ranks. The data sent by rank r
is received into allData[r * size]
of other ranks.
+
Parameters
+
+ allData The buffer to write the received data to.
+ size The size of the data each rank sends.
+
+
+
+
+
Implements mscclpp::Bootstrap .
+
+
+
+
+
◆ barrier()
+
+
+
+
+
+
+
+
+ void mscclpp::TcpBootstrap::barrier
+ (
+ )
+
+
+
+
+
+override virtual
+
+
+
+
+
+
◆ createUniqueId()
+
+
+
+
+
+
+
+
+ static UniqueId mscclpp::TcpBootstrap::createUniqueId
+ (
+ )
+
+
+
+
+
+static
+
+
+
+
Create a random unique ID.
Returns The created unique ID.
+
+
+
+
+
◆ getNranks()
+
+
+
+
+
+
+
+
+ int mscclpp::TcpBootstrap::getNranks
+ (
+ )
+
+
+
+
+
+override virtual
+
+
+
+
+
+
◆ getNranksPerNode()
+
+
+
+
+
+
+
+
+ int mscclpp::TcpBootstrap::getNranksPerNode
+ (
+ )
+
+
+
+
+
+override virtual
+
+
+
+
+
+
◆ getRank()
+
+
+
+
+
+
+
+
+ int mscclpp::TcpBootstrap::getRank
+ (
+ )
+
+
+
+
+
+override virtual
+
+
+
+
+
+
◆ getUniqueId()
+
+
+
+
+
+ UniqueId mscclpp::TcpBootstrap::getUniqueId
+ (
+ )
+ const
+
+
+
+
+
+
◆ initialize() [1/2]
+
+
+
+
+
+ void mscclpp::TcpBootstrap::initialize
+ (
+ const std::string &
+ ifIpPortTrio ,
+
+
+
+
+ int64_t
+ timeoutSec = 30
+
+
+
+ )
+
+
+
+
+
Initialize the TcpBootstrap with a string formatted as "ip:port" or "interface:ip:port".
Parameters
+
+ ifIpPortTrio The string formatted as "ip:port" or "interface:ip:port".
+ timeoutSec The connection timeout in seconds.
+
+
+
+
+
+
+
+
◆ initialize() [2/2]
+
+
+
+
+
+ void mscclpp::TcpBootstrap::initialize
+ (
+ UniqueId
+ uniqueId ,
+
+
+
+
+ int64_t
+ timeoutSec = 30
+
+
+
+ )
+
+
+
+
+
Initialize the TcpBootstrap with a given unique ID.
Parameters
+
+ uniqueId The unique ID to initialize the TcpBootstrap with.
+ timeoutSec The connection timeout in seconds.
+
+
+
+
+
+
+
+
◆ recv()
+
+
+
+
+
+
+
+
+ void mscclpp::TcpBootstrap::recv
+ (
+ void *
+ data ,
+
+
+
+
+ int
+ size ,
+
+
+
+
+ int
+ peer ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
+override virtual
+
+
+
+
Receive data from another process.
+
Data sent via send(senderBuff, size, receiverRank, tag)
can be received via recv(receiverBuff, size, senderRank, tag)
.
+
Parameters
+
+ data The buffer to write the received data to.
+ size The size of the data to receive.
+ peer The rank of the process to receive the data from.
+ tag The tag to receive the data with.
+
+
+
+
+
Implements mscclpp::Bootstrap .
+
+
+
+
+
◆ send()
+
+
+
+
+
+
+
+
+ void mscclpp::TcpBootstrap::send
+ (
+ void *
+ data ,
+
+
+
+
+ int
+ size ,
+
+
+
+
+ int
+ peer ,
+
+
+
+
+ int
+ tag
+
+
+
+ )
+
+
+
+
+
+override virtual
+
+
+
+
Send data to another process.
+
Data sent via send(senderBuff, size, receiverRank, tag)
can be received via recv(receiverBuff, size, senderRank, tag)
.
+
Parameters
+
+ data The data to send.
+ size The size of the data to send.
+ peer The rank of the process to send the data to.
+ tag The tag to send the data with.
+
+
+
+
+
Implements mscclpp::Bootstrap .
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.map
new file mode 100644
index 00000000..3deb4ed0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.md5
new file mode 100644
index 00000000..e91a1f6d
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.md5
@@ -0,0 +1 @@
+424cda039cbfa44eac60350994a6cda6
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.png
new file mode 100644
index 00000000..f239eff1
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.map
new file mode 100644
index 00000000..3deb4ed0
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.md5
new file mode 100644
index 00000000..e91a1f6d
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.md5
@@ -0,0 +1 @@
+424cda039cbfa44eac60350994a6cda6
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.png
new file mode 100644
index 00000000..f239eff1
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1TcpBootstrap__inherit__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags-members.html b/docs/doxygen/html/classmscclpp_1_1TransportFlags-members.html
new file mode 100644
index 00000000..09524640
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TransportFlags-members.html
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
MSCCL++: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for mscclpp::TransportFlags , including all inherited members.
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags.html b/docs/doxygen/html/classmscclpp_1_1TransportFlags.html
new file mode 100644
index 00000000..c5c69093
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TransportFlags.html
@@ -0,0 +1,637 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp::TransportFlags Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Stores transport flags.
+ More...
+
+
#include <core.hpp >
+
+
+
+
+
+
+
Stores transport flags.
+
+
+
◆ TransportFlags() [1/2]
+
+
+
+
+
+
+
+
+ mscclpp::TransportFlags::TransportFlags
+ (
+ )
+
+
+
+
+
+default
+
+
+
+
+
+
◆ TransportFlags() [2/2]
+
+
+
+
+
+ mscclpp::TransportFlags::TransportFlags
+ (
+ Transport
+ transport )
+
+
+
+
+
Constructor for TransportFlags that takes a Transport enum value.
+
Parameters
+
+ transport The transport to set the flag for.
+
+
+
+
+
+
+
+
+
◆ all()
+
+
+
+
+
+ bool mscclpp::TransportFlags::all
+ (
+ )
+ const
+
+
+
+
Check if all transport flags are set.
+
Returns True if all flags are set, false otherwise.
+
+
+
+
+
◆ any()
+
+
+
+
+
+ bool mscclpp::TransportFlags::any
+ (
+ )
+ const
+
+
+
+
Check if any transport flags are set.
+
Returns True if any flags are set, false otherwise.
+
+
+
+
+
◆ count()
+
+
+
+
+
+ size_t mscclpp::TransportFlags::count
+ (
+ )
+ const
+
+
+
+
Get the number of transport flags that are set.
+
Returns The number of flags that are set.
+
+
+
+
+
◆ has()
+
+
+
+
+
+ bool mscclpp::TransportFlags::has
+ (
+ Transport
+ transport )
+ const
+
+
+
+
Check if a specific transport flag is set.
+
Parameters
+
+ transport The transport to check the flag for.
+
+
+
+
Returns True if the flag is set, false otherwise.
+
+
+
+
+
◆ none()
+
+
+
+
+
+ bool mscclpp::TransportFlags::none
+ (
+ )
+ const
+
+
+
+
Check if no transport flags are set.
+
Returns True if no flags are set, false otherwise.
+
+
+
+
+
◆ operator!=()
+
+
+
+
+
+ bool mscclpp::TransportFlags::operator!=
+ (
+ TransportFlags
+ other )
+ const
+
+
+
+
Inequality comparison operator for TransportFlags .
+
Parameters
+
+
+
+
Returns True if the two TransportFlags objects are not equal, false otherwise.
+
+
+
+
+
◆ operator&() [1/2]
+
+
+
+
Bitwise AND operator for TransportFlags and Transport.
+
Parameters
+
+ transport The Transport to perform the AND operation with.
+
+
+
+
Returns A new TransportFlags object with the result of the AND operation.
+
+
+
+
+
◆ operator&() [2/2]
+
+
+
+
◆ operator&=()
+
+
+
+
◆ operator==()
+
+
+
+
+
+ bool mscclpp::TransportFlags::operator==
+ (
+ TransportFlags
+ other )
+ const
+
+
+
+
Equality comparison operator for TransportFlags .
+
Parameters
+
+
+
+
Returns True if the two TransportFlags objects are equal, false otherwise.
+
+
+
+
+
◆ operator^() [1/2]
+
+
+
+
Bitwise XOR operator for TransportFlags and Transport.
+
Parameters
+
+ transport The Transport to perform the XOR operation with.
+
+
+
+
Returns A new TransportFlags object with the result of the XOR operation.
+
+
+
+
+
◆ operator^() [2/2]
+
+
+
+
◆ operator^=()
+
+
+
+
◆ operator|() [1/2]
+
+
+
+
Bitwise OR operator for TransportFlags and Transport.
+
Parameters
+
+ transport The Transport to perform the OR operation with.
+
+
+
+
Returns A new TransportFlags object with the result of the OR operation.
+
+
+
+
+
◆ operator|() [2/2]
+
+
+
+
◆ operator|=()
+
+
+
+
◆ operator~()
+
+
+
+
+
+ TransportFlags mscclpp::TransportFlags::operator~
+ (
+ )
+ const
+
+
+
+
+
+
◆ toBitset()
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.map b/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.map
new file mode 100644
index 00000000..170b527d
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.md5 b/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.md5
new file mode 100644
index 00000000..f755423f
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.md5
@@ -0,0 +1 @@
+6646afcf5b59cad6b5a0766cc4e2cb5a
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.png b/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.png
new file mode 100644
index 00000000..09a9eeba
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1TransportFlags__coll__graph.png differ
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.map b/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.map
new file mode 100644
index 00000000..170b527d
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.md5 b/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.md5
new file mode 100644
index 00000000..f755423f
--- /dev/null
+++ b/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.md5
@@ -0,0 +1 @@
+6646afcf5b59cad6b5a0766cc4e2cb5a
\ No newline at end of file
diff --git a/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.png b/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.png
new file mode 100644
index 00000000..09a9eeba
Binary files /dev/null and b/docs/doxygen/html/classmscclpp_1_1TransportFlags__inherit__graph.png differ
diff --git a/docs/doxygen/html/closed.png b/docs/doxygen/html/closed.png
new file mode 100644
index 00000000..98cc2c90
Binary files /dev/null and b/docs/doxygen/html/closed.png differ
diff --git a/docs/doxygen/html/concurrency__device_8hpp.html b/docs/doxygen/html/concurrency__device_8hpp.html
new file mode 100644
index 00000000..1e7fa2c2
--- /dev/null
+++ b/docs/doxygen/html/concurrency__device_8hpp.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
MSCCL++: concurrency_device.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/concurrency__device_8hpp__incl.map b/docs/doxygen/html/concurrency__device_8hpp__incl.map
new file mode 100644
index 00000000..397ce777
--- /dev/null
+++ b/docs/doxygen/html/concurrency__device_8hpp__incl.map
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/docs/doxygen/html/concurrency__device_8hpp__incl.md5 b/docs/doxygen/html/concurrency__device_8hpp__incl.md5
new file mode 100644
index 00000000..8853d8a1
--- /dev/null
+++ b/docs/doxygen/html/concurrency__device_8hpp__incl.md5
@@ -0,0 +1 @@
+998d7ffbcd91ca088f3aafcf203b2de9
\ No newline at end of file
diff --git a/docs/doxygen/html/concurrency__device_8hpp__incl.png b/docs/doxygen/html/concurrency__device_8hpp__incl.png
new file mode 100644
index 00000000..25fc0be9
Binary files /dev/null and b/docs/doxygen/html/concurrency__device_8hpp__incl.png differ
diff --git a/docs/doxygen/html/concurrency__device_8hpp_source.html b/docs/doxygen/html/concurrency__device_8hpp_source.html
new file mode 100644
index 00000000..36777f95
--- /dev/null
+++ b/docs/doxygen/html/concurrency__device_8hpp_source.html
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
MSCCL++: concurrency_device.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_CONCURRENCY_DEVICE_HPP_
+
5 #define MSCCLPP_CONCURRENCY_DEVICE_HPP_
+
+
+
+
+
+
+
+
+
+
+
+
+
21 #if defined(MSCCLPP_DEVICE_COMPILE)
+
22 MSCCLPP_DEVICE_INLINE
void sync(
int blockNum, int64_t maxSpinCount = 100000000) {
+
27 unsigned int maxOldCnt = blockNum - 1;
+
+
29 if (blockNum == 1)
return ;
+
30 if (threadIdx.x == 0) {
+
+
+
33 unsigned int tmp = preFlag_ ^ 1;
+
34 if (atomicInc(&count_, maxOldCnt) == maxOldCnt) {
+
35 atomicStore(&flag_, tmp, memoryOrderRelaxed);
+
+
37 POLL_MAYBE_JAILBREAK((atomicLoad(&flag_, memoryOrderRelaxed) != tmp), maxSpinCount);
+
+
+
+
+
+
+
+
45 #endif // !defined(MSCCLPP_DEVICE_COMPILE)
+
+
+
+
+
53 unsigned int preFlag_;
+
+
+
+
+
58 #endif // MSCCLPP_CONCURRENCY_DEVICE_HPP_
+
+
DeviceSyncer()=default
Construct a new DeviceSyncer object.
+
~DeviceSyncer()=default
Destroy the DeviceSyncer object.
+
+
+
A device-wide barrier.
Definition: concurrency_device.hpp:13
+
Definition: atomic_device.hpp:13
+
+
+
+
diff --git a/docs/doxygen/html/core_8hpp.html b/docs/doxygen/html/core_8hpp.html
new file mode 100644
index 00000000..d70967b2
--- /dev/null
+++ b/docs/doxygen/html/core_8hpp.html
@@ -0,0 +1,341 @@
+
+
+
+
+
+
+
+
MSCCL++: core.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <array>
+
#include <bitset>
+
#include <future>
+
#include <memory>
+
#include <mscclpp/gpu.hpp >
+
#include <mscclpp/gpu_utils.hpp >
+
#include <string>
+
#include <vector>
+
#include "errors.hpp "
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the source code of this file.
+
+
+enum mscclpp::Transport {
+ mscclpp::Transport::Unknown ,
+mscclpp::Transport::CudaIpc ,
+mscclpp::Transport::Nvls ,
+mscclpp::Transport::IB0 ,
+
+ mscclpp::Transport::IB1 ,
+mscclpp::Transport::IB2 ,
+mscclpp::Transport::IB3 ,
+mscclpp::Transport::IB4 ,
+
+ mscclpp::Transport::IB5 ,
+mscclpp::Transport::IB6 ,
+mscclpp::Transport::IB7 ,
+mscclpp::Transport::Ethernet ,
+
+ mscclpp::Transport::NumTransports
+
+ }
+ Enumerates the available transport types. More...
+
+
+
+
+
◆ MSCCLPP_MAJOR
+
+
+
+
+
+ #define MSCCLPP_MAJOR 0
+
+
+
+
+
+
+
+
◆ MSCCLPP_MINOR
+
+
+
+
+
+ #define MSCCLPP_MINOR 5
+
+
+
+
+
+
+
+
◆ MSCCLPP_PATCH
+
+
+
+
+
+ #define MSCCLPP_PATCH 2
+
+
+
+
+
+
+
+
◆ MSCCLPP_UNIQUE_ID_BYTES
+
+
+
+
+
+ #define MSCCLPP_UNIQUE_ID_BYTES 128
+
+
+
+
+
+
+
+
◆ MSCCLPP_VERSION
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/core_8hpp__dep__incl.map b/docs/doxygen/html/core_8hpp__dep__incl.map
new file mode 100644
index 00000000..b3ef6984
--- /dev/null
+++ b/docs/doxygen/html/core_8hpp__dep__incl.map
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/core_8hpp__dep__incl.md5 b/docs/doxygen/html/core_8hpp__dep__incl.md5
new file mode 100644
index 00000000..826e594e
--- /dev/null
+++ b/docs/doxygen/html/core_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+0a219f4cd2c4237ecc7d63332d1c87fd
\ No newline at end of file
diff --git a/docs/doxygen/html/core_8hpp__dep__incl.png b/docs/doxygen/html/core_8hpp__dep__incl.png
new file mode 100644
index 00000000..33d01227
Binary files /dev/null and b/docs/doxygen/html/core_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/core_8hpp__incl.map b/docs/doxygen/html/core_8hpp__incl.map
new file mode 100644
index 00000000..11005e6a
--- /dev/null
+++ b/docs/doxygen/html/core_8hpp__incl.map
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/core_8hpp__incl.md5 b/docs/doxygen/html/core_8hpp__incl.md5
new file mode 100644
index 00000000..e02f37f6
--- /dev/null
+++ b/docs/doxygen/html/core_8hpp__incl.md5
@@ -0,0 +1 @@
+eb616f6d5fcb90a04efc0a75128e151d
\ No newline at end of file
diff --git a/docs/doxygen/html/core_8hpp__incl.png b/docs/doxygen/html/core_8hpp__incl.png
new file mode 100644
index 00000000..22813226
Binary files /dev/null and b/docs/doxygen/html/core_8hpp__incl.png differ
diff --git a/docs/doxygen/html/core_8hpp_source.html b/docs/doxygen/html/core_8hpp_source.html
new file mode 100644
index 00000000..1a5ad1ee
--- /dev/null
+++ b/docs/doxygen/html/core_8hpp_source.html
@@ -0,0 +1,604 @@
+
+
+
+
+
+
+
+
MSCCL++: core.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_CORE_HPP_
+
5 #define MSCCLPP_CORE_HPP_
+
+
7 #define MSCCLPP_MAJOR 0
+
8 #define MSCCLPP_MINOR 5
+
9 #define MSCCLPP_PATCH 2
+
10 #define MSCCLPP_VERSION (MSCCLPP_MAJOR * 10000 + MSCCLPP_MINOR * 100 + MSCCLPP_PATCH)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
25 #define MSCCLPP_UNIQUE_ID_BYTES 128
+
+
28 using UniqueId = std::array<uint8_t, MSCCLPP_UNIQUE_ID_BYTES>;
+
+
+
+
+
+
+
+
+
+
+
41 virtual void send (
void * data,
int size,
int peer,
int tag) = 0;
+
42 virtual void recv (
void * data,
int size,
int peer,
int tag) = 0;
+
43 virtual void allGather (
void * allData,
int size) = 0;
+
+
+
+
47 void send (
const std::vector<char>& data,
int peer,
int tag);
+
48 void recv (std::vector<char>& data,
int peer,
int tag);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
78 void initialize (
const std::string& ifIpPortTrio, int64_t timeoutSec = 30);
+
+
+
+
+
+
+
+
98 void send (
void * data,
int size,
int peer,
int tag)
override ;
+
+
109 void recv (
void * data,
int size,
int peer,
int tag)
override ;
+
+
118 void allGather (
void * allData,
int size)
override ;
+
+
+
+
+
+
+
+
+
128 std::unique_ptr<Impl> pimpl_;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
148 const std::string
TransportNames [] = {
"UNK" ,
"IPC" ,
"NVLS" ,
"IB0" ,
"IB1" ,
"IB2" ,
"IB3" ,
+
149 "IB4" ,
"IB5" ,
"IB6" ,
"IB7" ,
"ETH" ,
"NUM" };
+
+
+
+
+
154 "TransportFlagsSize must match the number of transports" );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
194 size_t count ()
const ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
374 std::shared_ptr<Impl> pimpl_;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
407 Endpoint (std::shared_ptr<Impl> pimpl);
+
+
+
410 std::shared_ptr<Impl> pimpl_;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
440 virtual void flush (int64_t timeoutUsec = 3e7) = 0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
537 std::unique_ptr<Impl> pimpl_;
+
+
+
+
+
+
+
+
+
551 virtual void beginSetup (std::shared_ptr<Bootstrap> bootstrap);
+
+
557 virtual void endSetup (std::shared_ptr<Bootstrap> bootstrap);
+
+
+
561 template <
typename T>
+
+
563 std::shared_future<T> future;
+
+
+
+
+
+
+
577 bool ready ()
const {
return future.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
621 std::shared_ptr<Context>
context ();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
681 void onSetup (std::shared_ptr<Setuppable> setuppable);
+
+
+
+
+
+
+
+
+
695 std::unique_ptr<Impl> pimpl_;
+
+
+
+
+
+
+
+
+
+
+
+
712 template <
typename T>
+
+
714 return t.deviceHandle();
+
+
+
+
+
+
+
+
+
+
+
727 struct hash<
mscclpp ::TransportFlags>;
+
+
+
+
731 #endif // MSCCLPP_CORE_HPP_
+
+
typename T::DeviceHandle DeviceHandle
A type which could be safely used in device side.
Definition: core.hpp:709
+
TransportFlags operator^(Transport transport1, Transport transport2)
Definition: core.hpp:302
+
+
+
TransportFlags operator^(TransportFlags other) const
+
virtual ~Connection()=default
+
~TcpBootstrap()
Destructor.
+
+
std::string getIBDeviceName(Transport ibTransport)
+
RegisteredMemory registerMemory(void *ptr, size_t size, TransportFlags transports)
+
RegisteredMemory()=default
Default constructor.
+
+
void sendMemoryOnSetup(RegisteredMemory memory, int remoteRank, int tag)
+
const TransportFlags AllTransports
A constant TransportFlags object representing all transports.
+
+
T get() const
Definition: core.hpp:584
+
TransportFlags transports()
+
DeviceHandle< std::remove_reference_t< T > > deviceHandle(T &&t)
Retrieve the deviceHandle instance from host object.
Definition: core.hpp:713
+
Represents one end of a connection.
Definition: core.hpp:381
+
virtual void updateAndSync(RegisteredMemory dst, uint64_t dstOffset, uint64_t *src, uint64_t newValue)=0
+
+
Used to configure an endpoint.
Definition: core.hpp:464
+
void send(void *data, int size, int peer, int tag) override
+
void onSetup(std::shared_ptr< Setuppable > setuppable)
+
void allGather(void *allData, int size) override
+
+
std::shared_ptr< Connection > connect(Endpoint localEndpoint, Endpoint remoteEndpoint)
+
typename T::Payload PacketPayload
Packet value type.
Definition: core.hpp:719
+
Endpoint()=default
Default constructor.
+
A base class for objects that can be set up during Communicator::setup().
Definition: core.hpp:544
+
+
static const int DefaultMaxWrPerSend
Definition: core.hpp:468
+
int ibMaxSendWr
Definition: core.hpp:473
+
UniqueId getUniqueId() const
+
+
TransportFlags operator|(Transport transport1, Transport transport2)
Definition: core.hpp:284
+
void barrier() override
Synchronize all processes.
+
static Endpoint deserialize(const std::vector< char > &data)
+
virtual void send(void *data, int size, int peer, int tag)=0
+
virtual void allGather(void *allData, int size)=0
+
virtual void recv(void *data, int size, int peer, int tag)=0
+
int getRank() override
Return the rank of the process.
+
void recv(void *data, int size, int peer, int tag) override
+
+
bool ready() const
Definition: core.hpp:577
+
const TransportFlags AllIBTransports
A constant TransportFlags object representing all InfiniBand transports.
+
+
+
+
+
NonblockingFuture< std::shared_ptr< Connection > > connectOnSetup(int remoteRank, int tag, EndpointConfig localConfig)
+
TcpBootstrap(int rank, int nRanks)
+
+
virtual Transport remoteTransport()=0
+
TransportFlags operator&(TransportFlags other) const
+
std::string getTransportName()
+
EndpointConfig()
Default constructor. Sets transport to Transport::Unknown.
Definition: core.hpp:477
+
virtual Transport transport()=0
+
NonblockingFuture()=default
Default constructor.
+
~RegisteredMemory()
Destructor.
+
TransportFlags & operator&=(TransportFlags other)
+
+
void * originalDataPtr() const
+
Stores transport flags.
Definition: core.hpp:160
+
int tagOf(const Connection &connection)
+
Represents a connection between two processes.
Definition: core.hpp:417
+
+
+
TransportFlags & operator^=(TransportFlags other)
+
virtual void beginSetup(std::shared_ptr< Bootstrap > bootstrap)
+
TransportFlags operator&(Transport transport1, Transport transport2)
Definition: core.hpp:293
+
NonblockingFuture< RegisteredMemory > recvMemoryOnSetup(int remoteRank, int tag)
+
static std::shared_ptr< RegisteredMemory::Impl > getImpl(RegisteredMemory &memory)
+
TransportFlags & operator|=(TransportFlags other)
+
A non-blocking future that can be used to check if a value is ready and retrieve it.
Definition: core.hpp:562
+
std::vector< char > serialize()
+
std::array< uint8_t, MSCCLPP_UNIQUE_ID_BYTES > UniqueId
Unique ID for a process. This is a MSCCLPP_UNIQUE_ID_BYTES byte array that uniquely identifies a proc...
Definition: core.hpp:28
+
+
+
Transport getIBTransportByDeviceName(const std::string &ibDeviceName)
+
static const int DefaultMaxSendWr
Definition: core.hpp:467
+
+
virtual void endSetup(std::shared_ptr< Bootstrap > bootstrap)
+
virtual int getNranks()=0
+
~Communicator()
Destroy the communicator.
+
static const int DefaultMaxCqSize
Definition: core.hpp:465
+
void initialize(UniqueId uniqueId, int64_t timeoutSec=30)
+
+
+
EndpointConfig(Transport transport)
Definition: core.hpp:482
+
TransportFlags()=default
Default constructor for TransportFlags.
+
+
TransportFlags operator~() const
+
std::vector< char > serialize()
+
int remoteRankOf(const Connection &connection)
+
+
~Context()
Destroy the context.
+
Context()
Create a context.
+
virtual ~Bootstrap()=default
+
std::shared_ptr< Context > context()
+
static RegisteredMemory deserialize(const std::vector< char > &data)
+
std::string version()
Return a version string.
+
int ibMaxCqPollNum
Definition: core.hpp:472
+
const TransportFlags NoTransports
A constant TransportFlags object representing no transports.
+
const size_t TransportFlagsSize
Definition: core.hpp:152
+
virtual void write(RegisteredMemory dst, uint64_t dstOffset, RegisteredMemory src, uint64_t srcOffset, uint64_t size)=0
+
Transport transport
Definition: core.hpp:470
+
std::bitset< TransportFlagsSize > TransportFlagsBase
Bitset for storing transport flags.
Definition: core.hpp:156
+
const std::string TransportNames[]
Definition: core.hpp:148
+
A native implementation of the bootstrap using TCP sockets.
Definition: core.hpp:52
+
NonblockingFuture(std::shared_future< T > &&future)
Definition: core.hpp:572
+
Represents a block of memory that has been registered to a Context.
Definition: core.hpp:327
+
+
bool has(Transport transport) const
+
Bootstrap()
Definition: core.hpp:36
+
int ibMaxWrPerSend
Definition: core.hpp:474
+
void groupBarrier(const std::vector< int > &ranks)
+
+
int ibMaxCqSize
Definition: core.hpp:471
+
+
detail::TransportFlagsBase toBitset() const
+
bool operator==(TransportFlags other) const
+
Transport
Enumerates the available transport types.
Definition: core.hpp:132
+
int getNranks() override
Return the total number of ranks.
+
Communicator(std::shared_ptr< Bootstrap > bootstrap, std::shared_ptr< Context > context=nullptr)
+
A generic error.
Definition: errors.hpp:61
+
+
Base class for bootstraps.
Definition: core.hpp:34
+
bool operator!=(TransportFlags other) const
+
static const int DefaultMaxCqPollNum
Definition: core.hpp:466
+
+
int getNranksPerNode() override
Return the total number of ranks per node.
+
Endpoint createEndpoint(EndpointConfig config)
+
static UniqueId createUniqueId()
+
virtual ~Setuppable()=default
+
std::shared_ptr< Bootstrap > bootstrap()
+
TransportFlags operator|(TransportFlags other) const
+
RegisteredMemory registerMemory(void *ptr, size_t size, TransportFlags transports)
+
virtual void flush(int64_t timeoutUsec=3e7)=0
Flush any pending writes to the remote process.
+
virtual int getNranksPerNode()=0
+
Definition: atomic_device.hpp:13
+
+
+
+
+
diff --git a/docs/doxygen/html/device_8hpp.html b/docs/doxygen/html/device_8hpp.html
new file mode 100644
index 00000000..59e3e409
--- /dev/null
+++ b/docs/doxygen/html/device_8hpp.html
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
MSCCL++: device.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the source code of this file.
+
+
+
+
◆ MSCCLPP_HOST_COMPILE
+
+
+
+
+
+ #define MSCCLPP_HOST_COMPILE
+
+
+
+
+
+
+
+
◆ MSCCLPP_HOST_DEVICE_INLINE
+
+
+
+
+
+ #define MSCCLPP_HOST_DEVICE_INLINE inline
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/device_8hpp__dep__incl.map b/docs/doxygen/html/device_8hpp__dep__incl.map
new file mode 100644
index 00000000..e1032b27
--- /dev/null
+++ b/docs/doxygen/html/device_8hpp__dep__incl.map
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/device_8hpp__dep__incl.md5 b/docs/doxygen/html/device_8hpp__dep__incl.md5
new file mode 100644
index 00000000..2a4c0728
--- /dev/null
+++ b/docs/doxygen/html/device_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+66105dd0cb6644faf7f7b279d25adda8
\ No newline at end of file
diff --git a/docs/doxygen/html/device_8hpp__dep__incl.png b/docs/doxygen/html/device_8hpp__dep__incl.png
new file mode 100644
index 00000000..232ac53e
Binary files /dev/null and b/docs/doxygen/html/device_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/device_8hpp_source.html b/docs/doxygen/html/device_8hpp_source.html
new file mode 100644
index 00000000..f6219b42
--- /dev/null
+++ b/docs/doxygen/html/device_8hpp_source.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
MSCCL++: device.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_DEVICE_HPP_
+
5 #define MSCCLPP_DEVICE_HPP_
+
+
7 #if defined(__HIP_PLATFORM_AMD__)
+
8 #include <hip/hip_runtime.h>
+
9 #endif // defined(__HIP_PLATFORM_AMD__)
+
+
11 #if (defined(__NVCC__) || defined(__HIP_PLATFORM_AMD__))
+
+
13 #define MSCCLPP_DEVICE_COMPILE
+
14 #define MSCCLPP_DEVICE_INLINE __forceinline__ __device__
+
15 #define MSCCLPP_HOST_DEVICE_INLINE __forceinline__ __host__ __device__
+
16 #if defined(__HIP_PLATFORM_AMD__)
+
17 #define MSCCLPP_DEVICE_HIP
+
18 #else // !(defined(__HIP_PLATFORM_AMD__)
+
19 #define MSCCLPP_DEVICE_CUDA
+
20 #endif // !(defined(__HIP_PLATFORM_AMD__))
+
+
22 #else // !(defined(__NVCC__) || defined(__HIP_PLATFORM_AMD__))
+
+
24 #define MSCCLPP_HOST_COMPILE
+
25 #define MSCCLPP_HOST_DEVICE_INLINE inline
+
+
27 #endif // !(defined(__NVCC__) || defined(__HIP_PLATFORM_AMD__))
+
+
29 #endif // MSCCLPP_DEVICE_HPP_
+
+
+
+
+
diff --git a/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41.html b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41.html
new file mode 100644
index 00000000..4f7e0e9c
--- /dev/null
+++ b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41.html
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
MSCCL++: mscclpp Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.map b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.map
new file mode 100644
index 00000000..5e49fc7e
--- /dev/null
+++ b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.md5 b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.md5
new file mode 100644
index 00000000..45660a39
--- /dev/null
+++ b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.md5
@@ -0,0 +1 @@
+236e113fab0d19e1f3c6128a859f1c84
\ No newline at end of file
diff --git a/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.png b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.png
new file mode 100644
index 00000000..4822c5e7
Binary files /dev/null and b/docs/doxygen/html/dir_5b58d9d970ef29bd3b9d7292e7628c41_dep.png differ
diff --git a/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704.html b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704.html
new file mode 100644
index 00000000..780d9cc6
--- /dev/null
+++ b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704.html
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
MSCCL++: npkit Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.map b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.map
new file mode 100644
index 00000000..bbbd89a5
--- /dev/null
+++ b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.md5 b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.md5
new file mode 100644
index 00000000..668734cc
--- /dev/null
+++ b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.md5
@@ -0,0 +1 @@
+2d78061c7e17ef3de586c587d7de2ee9
\ No newline at end of file
diff --git a/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.png b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.png
new file mode 100644
index 00000000..7671985f
Binary files /dev/null and b/docs/doxygen/html/dir_79cdab046adb8bd4bd5d2d3af1d20704_dep.png differ
diff --git a/docs/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 00000000..b08d5d01
--- /dev/null
+++ b/docs/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
MSCCL++: include Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/doc.png b/docs/doxygen/html/doc.png
new file mode 100644
index 00000000..17edabff
Binary files /dev/null and b/docs/doxygen/html/doc.png differ
diff --git a/docs/doxygen/html/doxygen.css b/docs/doxygen/html/doxygen.css
new file mode 100644
index 00000000..73ecbb2c
--- /dev/null
+++ b/docs/doxygen/html/doxygen.css
@@ -0,0 +1,1771 @@
+/* The standard CSS for doxygen 1.8.17 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+ul.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+ column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+th p.starttd, p.intertd, p.endtd {
+ font-size: 100%;
+ font-weight: 700;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #FFFFFF;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #FFFFFF;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+ul {
+ overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
+}
+
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+ text-align: left;
+ direction: ltr;
+ overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+ overflow-y: hidden;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #FFFFFF;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl, img.inline {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+ border-left: 0;
+ border-right: 2px solid #9CAFD4;
+ margin: 0 4px 0 24px;
+ padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype, .tparams .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir, .tparams .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+ text-align: right;
+ direction: rtl;
+}
+
+dl {
+ padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+ margin-right: 0px;
+ padding-right: 0px;
+}
+
+dl.note {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #505050;
+}
+
+dl.todo {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+ float: left !important;
+ text-align: right;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+ background-position-x: right !important;
+ padding-left: 0 !important;
+ padding-right: 10px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.PageDocRTL-title div.toc li.level1 {
+ margin-left: 0 !important;
+ margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+ margin-left: 0 !important;
+ margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+ margin-left: 0 !important;
+ margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+ margin-left: 0 !important;
+ margin-right: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+/*
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTableHead tr {
+}
+
+table.markdownTableBodyLeft td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter {
+ text-align: center
+}
+*/
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+.DocNodeRTL {
+ text-align: right;
+ direction: rtl;
+}
+
+.DocNodeLTR {
+ text-align: left;
+ direction: ltr;
+}
+
+table.DocNodeRTL {
+ width: auto;
+ margin-right: 0;
+ margin-left: auto;
+}
+
+table.DocNodeLTR {
+ width: auto;
+ margin-right: auto;
+ margin-left: 0;
+}
+
+tt, code, kbd, samp
+{
+ display: inline-block;
+ direction:ltr;
+}
+/* @end */
+
+u {
+ text-decoration: underline;
+}
+
diff --git a/docs/doxygen/html/doxygen.png b/docs/doxygen/html/doxygen.png
new file mode 100644
index 00000000..3ff17d80
Binary files /dev/null and b/docs/doxygen/html/doxygen.png differ
diff --git a/docs/doxygen/html/dynsections.js b/docs/doxygen/html/dynsections.js
new file mode 100644
index 00000000..ea0a7b39
--- /dev/null
+++ b/docs/doxygen/html/dynsections.js
@@ -0,0 +1,120 @@
+/*
+ @licstart The following is the entire license notice for the
+ JavaScript code in this file.
+
+ Copyright (C) 1997-2017 by Dimitri van Heesch
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ @licend The above is the entire license notice
+ for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l
+
+
+
+
+
+
+MSCCL++: errors.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <stdexcept>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the source code of this file.
+
+
+
+
+
+
diff --git a/docs/doxygen/html/errors_8hpp__dep__incl.map b/docs/doxygen/html/errors_8hpp__dep__incl.map
new file mode 100644
index 00000000..022a7031
--- /dev/null
+++ b/docs/doxygen/html/errors_8hpp__dep__incl.map
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/errors_8hpp__dep__incl.md5 b/docs/doxygen/html/errors_8hpp__dep__incl.md5
new file mode 100644
index 00000000..97fe716a
--- /dev/null
+++ b/docs/doxygen/html/errors_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+870b14d1e2ea0ff5b94ae3017d9d8398
\ No newline at end of file
diff --git a/docs/doxygen/html/errors_8hpp__dep__incl.png b/docs/doxygen/html/errors_8hpp__dep__incl.png
new file mode 100644
index 00000000..f7434bd0
Binary files /dev/null and b/docs/doxygen/html/errors_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/errors_8hpp__incl.map b/docs/doxygen/html/errors_8hpp__incl.map
new file mode 100644
index 00000000..8edb2e49
--- /dev/null
+++ b/docs/doxygen/html/errors_8hpp__incl.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/errors_8hpp__incl.md5 b/docs/doxygen/html/errors_8hpp__incl.md5
new file mode 100644
index 00000000..fc799315
--- /dev/null
+++ b/docs/doxygen/html/errors_8hpp__incl.md5
@@ -0,0 +1 @@
+54396d1f6c5c3c0bf270278838748069
\ No newline at end of file
diff --git a/docs/doxygen/html/errors_8hpp__incl.png b/docs/doxygen/html/errors_8hpp__incl.png
new file mode 100644
index 00000000..6715dd3e
Binary files /dev/null and b/docs/doxygen/html/errors_8hpp__incl.png differ
diff --git a/docs/doxygen/html/errors_8hpp_source.html b/docs/doxygen/html/errors_8hpp_source.html
new file mode 100644
index 00000000..ff56c26b
--- /dev/null
+++ b/docs/doxygen/html/errors_8hpp_source.html
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+MSCCL++: errors.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_ERRORS_HPP_
+
5 #define MSCCLPP_ERRORS_HPP_
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35 BaseError (
const std::string& message,
int errorCode);
+
+
+
+
+
+
+
+
53 const char *
what ()
const noexcept
override ;
+
+
+
+
+
+
+
+
+
+
64 virtual ~Error () =
default ;
+
+
+
+
+
+
71 SysError (
const std::string& message,
int errorCode);
+
+
+
+
+
+
78 CudaError (
const std::string& message,
int errorCode);
+
+
+
+
+
+
85 CuError (
const std::string& message,
int errorCode);
+
+
+
+
+
+
92 IbError (
const std::string& message,
int errorCode);
+
+
+
+
+
+
98 #endif // MSCCLPP_ERRORS_HPP_
+
+IbError(const std::string &message, int errorCode)
+ErrorCode
Enumeration of error codes used by MSCCL++.
Definition: errors.hpp:12
+virtual ~SysError()=default
+
+int errorCode_
Definition: errors.hpp:57
+std::string errorToString(enum ErrorCode error)
+std::string message_
Definition: errors.hpp:56
+Base class for all errors thrown by MSCCL++.
Definition: errors.hpp:29
+An error from a system call that sets errno.
Definition: errors.hpp:69
+virtual ~IbError()=default
+
+CuError(const std::string &message, int errorCode)
+ErrorCode getErrorCode() const
+virtual ~CuError()=default
+CudaError(const std::string &message, int errorCode)
+
+const char * what() const noexcept override
+Error(const std::string &message, ErrorCode errorCode)
+virtual ~BaseError()=default
Virtual destructor for BaseError.
+
+BaseError(const std::string &message, int errorCode)
+
+
+A generic error.
Definition: errors.hpp:61
+SysError(const std::string &message, int errorCode)
+An error from a CUDA driver library call.
Definition: errors.hpp:83
+
+
+
+virtual ~CudaError()=default
+An error from an ibverbs library call.
Definition: errors.hpp:90
+Definition: atomic_device.hpp:13
+An error from a CUDA runtime library call.
Definition: errors.hpp:76
+
+
+
+
diff --git a/docs/doxygen/html/executor_8hpp.html b/docs/doxygen/html/executor_8hpp.html
new file mode 100644
index 00000000..35668a14
--- /dev/null
+++ b/docs/doxygen/html/executor_8hpp.html
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+MSCCL++: executor.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <memory>
+
#include <mscclpp/core.hpp >
+
#include <unordered_map>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the source code of this file.
+
+
+
+
+
+
diff --git a/docs/doxygen/html/executor_8hpp__incl.map b/docs/doxygen/html/executor_8hpp__incl.map
new file mode 100644
index 00000000..4696c867
--- /dev/null
+++ b/docs/doxygen/html/executor_8hpp__incl.map
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/executor_8hpp__incl.md5 b/docs/doxygen/html/executor_8hpp__incl.md5
new file mode 100644
index 00000000..2d12a615
--- /dev/null
+++ b/docs/doxygen/html/executor_8hpp__incl.md5
@@ -0,0 +1 @@
+3fa4887ddd158439d7b71ea5f9e538b3
\ No newline at end of file
diff --git a/docs/doxygen/html/executor_8hpp__incl.png b/docs/doxygen/html/executor_8hpp__incl.png
new file mode 100644
index 00000000..60869b90
Binary files /dev/null and b/docs/doxygen/html/executor_8hpp__incl.png differ
diff --git a/docs/doxygen/html/executor_8hpp_source.html b/docs/doxygen/html/executor_8hpp_source.html
new file mode 100644
index 00000000..1c4e4a86
--- /dev/null
+++ b/docs/doxygen/html/executor_8hpp_source.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+MSCCL++: executor.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_EXECUTOR_HPP_
+
5 #define MSCCLPP_EXECUTOR_HPP_
+
+
+
+
9 #include <unordered_map>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
28 ExecutionPlan (
const std::string& name,
const std::string& planPath);
+
+
+
+
+
33 std::shared_ptr<Impl> impl_;
+
+
+
+
+
+
+
40 Executor (std::shared_ptr<Communicator> comm);
+
+
+
+
+
45 void execute (
int rank,
void * sendbuff,
void * recvBuff,
size_t sendBuffSize,
size_t recvBuffSize,
DataType dataType,
+
+
+
+
+
50 std::unique_ptr<Impl> impl_;
+
+
+
+
54 #endif // MSCCLPP_EXECUTOR_HPP_
+
+ExecutionPlan(const std::string &name, const std::string &planPath)
+Definition: executor.hpp:26
+
+
+void execute(int rank, void *sendbuff, void *recvBuff, size_t sendBuffSize, size_t recvBuffSize, DataType dataType, const ExecutionPlan &plan, cudaStream_t stream, PacketType packetType=PacketType::LL16)
+
+
+Executor(std::shared_ptr< Communicator > comm)
+Executor & operator=(const Executor &)=delete
+
+
+
+
+
+DataType
Definition: executor.hpp:13
+Definition: executor.hpp:38
+
+PacketType
Definition: executor.hpp:21
+Definition: atomic_device.hpp:13
+
+
+
+
diff --git a/docs/doxygen/html/fifo_8hpp.html b/docs/doxygen/html/fifo_8hpp.html
new file mode 100644
index 00000000..1bccdb28
--- /dev/null
+++ b/docs/doxygen/html/fifo_8hpp.html
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+MSCCL++: fifo.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <cstdint>
+
#include <functional>
+
#include <memory>
+
#include "fifo_device.hpp "
+
+
Go to the source code of this file.
+
+
+class mscclpp::Fifo
+ A class representing a host proxy FIFO that can consume work elements pushed by device threads. More...
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo_8hpp__dep__incl.map b/docs/doxygen/html/fifo_8hpp__dep__incl.map
new file mode 100644
index 00000000..d35a2cd0
--- /dev/null
+++ b/docs/doxygen/html/fifo_8hpp__dep__incl.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo_8hpp__dep__incl.md5 b/docs/doxygen/html/fifo_8hpp__dep__incl.md5
new file mode 100644
index 00000000..a21837b3
--- /dev/null
+++ b/docs/doxygen/html/fifo_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+5602c364ece32a8ce0f40d7f9f46b060
\ No newline at end of file
diff --git a/docs/doxygen/html/fifo_8hpp__dep__incl.png b/docs/doxygen/html/fifo_8hpp__dep__incl.png
new file mode 100644
index 00000000..afd2641c
Binary files /dev/null and b/docs/doxygen/html/fifo_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/fifo_8hpp__incl.map b/docs/doxygen/html/fifo_8hpp__incl.map
new file mode 100644
index 00000000..46f14d13
--- /dev/null
+++ b/docs/doxygen/html/fifo_8hpp__incl.map
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo_8hpp__incl.md5 b/docs/doxygen/html/fifo_8hpp__incl.md5
new file mode 100644
index 00000000..831cc274
--- /dev/null
+++ b/docs/doxygen/html/fifo_8hpp__incl.md5
@@ -0,0 +1 @@
+445931b175fef7df75a209927e42af2c
\ No newline at end of file
diff --git a/docs/doxygen/html/fifo_8hpp__incl.png b/docs/doxygen/html/fifo_8hpp__incl.png
new file mode 100644
index 00000000..e765d649
Binary files /dev/null and b/docs/doxygen/html/fifo_8hpp__incl.png differ
diff --git a/docs/doxygen/html/fifo_8hpp_source.html b/docs/doxygen/html/fifo_8hpp_source.html
new file mode 100644
index 00000000..74ec1fcb
--- /dev/null
+++ b/docs/doxygen/html/fifo_8hpp_source.html
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+MSCCL++: fifo.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_FIFO_HPP_
+
5 #define MSCCLPP_FIFO_HPP_
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
51 std::unique_ptr<Impl> pimpl;
+
+
+
+
+
56 #endif // MSCCLPP_FIFO_HPP_
+
+Definition: fifo_device.hpp:24
+Definition: fifo_device.hpp:41
+void flushTail(bool sync=false)
+
+FifoDeviceHandle deviceHandle()
+
+constexpr size_t DEFAULT_FIFO_SIZE
Definition: fifo.hpp:15
+Fifo(int size=DEFAULT_FIFO_SIZE)
+~Fifo()
Destroys the Fifo object.
+void pop()
Pops a trigger from the FIFO.
+A class representing a host proxy FIFO that can consume work elements pushed by device threads.
Definition: fifo.hpp:18
+Definition: atomic_device.hpp:13
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo__device_8hpp.html b/docs/doxygen/html/fifo__device_8hpp.html
new file mode 100644
index 00000000..d945304f
--- /dev/null
+++ b/docs/doxygen/html/fifo__device_8hpp.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+MSCCL++: fifo_device.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo__device_8hpp__dep__incl.map b/docs/doxygen/html/fifo__device_8hpp__dep__incl.map
new file mode 100644
index 00000000..850b61ef
--- /dev/null
+++ b/docs/doxygen/html/fifo__device_8hpp__dep__incl.map
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo__device_8hpp__dep__incl.md5 b/docs/doxygen/html/fifo__device_8hpp__dep__incl.md5
new file mode 100644
index 00000000..859c6a46
--- /dev/null
+++ b/docs/doxygen/html/fifo__device_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+0a795a0fc2a27dc4c4f62941da8406ba
\ No newline at end of file
diff --git a/docs/doxygen/html/fifo__device_8hpp__dep__incl.png b/docs/doxygen/html/fifo__device_8hpp__dep__incl.png
new file mode 100644
index 00000000..020a2898
Binary files /dev/null and b/docs/doxygen/html/fifo__device_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/fifo__device_8hpp__incl.map b/docs/doxygen/html/fifo__device_8hpp__incl.map
new file mode 100644
index 00000000..5f3595ba
--- /dev/null
+++ b/docs/doxygen/html/fifo__device_8hpp__incl.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/docs/doxygen/html/fifo__device_8hpp__incl.md5 b/docs/doxygen/html/fifo__device_8hpp__incl.md5
new file mode 100644
index 00000000..5261a9e1
--- /dev/null
+++ b/docs/doxygen/html/fifo__device_8hpp__incl.md5
@@ -0,0 +1 @@
+1761324e403564c6b65912dde4f25d23
\ No newline at end of file
diff --git a/docs/doxygen/html/fifo__device_8hpp__incl.png b/docs/doxygen/html/fifo__device_8hpp__incl.png
new file mode 100644
index 00000000..995ac540
Binary files /dev/null and b/docs/doxygen/html/fifo__device_8hpp__incl.png differ
diff --git a/docs/doxygen/html/fifo__device_8hpp_source.html b/docs/doxygen/html/fifo__device_8hpp_source.html
new file mode 100644
index 00000000..79ec67c6
--- /dev/null
+++ b/docs/doxygen/html/fifo__device_8hpp_source.html
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+MSCCL++: fifo_device.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_FIFO_DEVICE_HPP_
+
5 #define MSCCLPP_FIFO_DEVICE_HPP_
+
+
+
+
+
+
11 #if defined(MSCCLPP_DEVICE_COMPILE)
+
+
+
14 #endif // defined(MSCCLPP_DEVICE_COMPILE)
+
+
+
+
+
+
+
+
+
42 #if defined(MSCCLPP_DEVICE_COMPILE)
+
43 MSCCLPP_DEVICE_INLINE uint64_t push(
ProxyTrigger trigger, int64_t maxSpinCount = 1000000) {
+
49 uint64_t curFifoHead = atomicFetchAdd(this->
head , (uint64_t)1, memoryOrderRelaxed);
+
+
+
+
53 trigger.
snd ^= ((uint64_t)1 << (uint64_t)63);
+
+
+
+
+
+
+
+
61 OR_POLL_MAYBE_JAILBREAK((curFifoHead >=
size + atomicLoad(this->
tailReplica , memoryOrderRelaxed)),
+
62 (atomicLoad(&(this->
triggers [curFifoHead %
size ].fst), memoryOrderRelaxed) != 0),
+
+
+
+
+
+
+
+
70 #if defined(MSCCLPP_DEVICE_CUDA)
+
71 asm volatile (
"st.global.relaxed.sys.v2.u64 [%0], {%1,%2};" ::
"l" (triggerPtr),
"l" (trigger.
fst ),
"l" (trigger.
snd ));
+
72 #else // !defined(MSCCLPP_DEVICE_CUDA)
+
+
74 atomicStore(&(triggerPtr->
snd ), trigger.
snd , memoryOrderRelaxed);
+
75 atomicStore(&(triggerPtr->
fst ), trigger.
fst , memoryOrderRelaxed);
+
76 #endif // !defined(MSCCLPP_DEVICE_CUDA)
+
+
+
+
+
85 MSCCLPP_DEVICE_INLINE
void sync(uint64_t curFifoHead, int64_t maxSpinCount = 1000000) {
+
+
+
88 OR_POLL_MAYBE_JAILBREAK((curFifoHead >= atomicLoad(this->
tailReplica , memoryOrderRelaxed)),
+
89 (atomicLoad(&(this->
triggers [curFifoHead %
size ].fst), memoryOrderRelaxed) != 0),
+
+
+
92 #endif // defined(MSCCLPP_DEVICE_COMPILE)
+
+
+
+
+
+
+
+
+
+
106 #endif // MSCCLPP_FIFO_DEVICE_HPP_
+
+uint64_t fst
Definition: fifo_device.hpp:25
+Definition: fifo_device.hpp:24
+
+Definition: fifo_device.hpp:41
+uint64_t * head
The FIFO head. Allocated on the device and only accessed by the device.
Definition: fifo_device.hpp:99
+int size
The FIFO size.
Definition: fifo_device.hpp:101
+uint64_t snd
Definition: fifo_device.hpp:25
+uint64_t * tailReplica
Replica of the FIFO tail that is allocated on device.
Definition: fifo_device.hpp:97
+
+
+ProxyTrigger * triggers
The FIFO buffer that is allocated on the host via cudaHostAlloc().
Definition: fifo_device.hpp:95
+Definition: atomic_device.hpp:13
+
+
+
+
diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html
new file mode 100644
index 00000000..5466c3d4
--- /dev/null
+++ b/docs/doxygen/html/files.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+MSCCL++: File List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all files with brief descriptions:
+
+
+
+
+
diff --git a/docs/doxygen/html/folderclosed.png b/docs/doxygen/html/folderclosed.png
new file mode 100644
index 00000000..bb8ab35e
Binary files /dev/null and b/docs/doxygen/html/folderclosed.png differ
diff --git a/docs/doxygen/html/folderopen.png b/docs/doxygen/html/folderopen.png
new file mode 100644
index 00000000..d6c7f676
Binary files /dev/null and b/docs/doxygen/html/folderopen.png differ
diff --git a/docs/doxygen/html/functions.html b/docs/doxygen/html/functions.html
new file mode 100644
index 00000000..7513a61e
--- /dev/null
+++ b/docs/doxygen/html/functions.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- _ -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_a.html b/docs/doxygen/html/functions_a.html
new file mode 100644
index 00000000..ca6e0445
--- /dev/null
+++ b/docs/doxygen/html/functions_a.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- a -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_b.html b/docs/doxygen/html/functions_b.html
new file mode 100644
index 00000000..2f984aa0
--- /dev/null
+++ b/docs/doxygen/html/functions_b.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- b -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_c.html b/docs/doxygen/html/functions_c.html
new file mode 100644
index 00000000..88fa0bc3
--- /dev/null
+++ b/docs/doxygen/html/functions_c.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- c -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_d.html b/docs/doxygen/html/functions_d.html
new file mode 100644
index 00000000..d4076a50
--- /dev/null
+++ b/docs/doxygen/html/functions_d.html
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- d -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_e.html b/docs/doxygen/html/functions_e.html
new file mode 100644
index 00000000..7fa44ddb
--- /dev/null
+++ b/docs/doxygen/html/functions_e.html
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- e -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_f.html b/docs/doxygen/html/functions_f.html
new file mode 100644
index 00000000..7bc95e09
--- /dev/null
+++ b/docs/doxygen/html/functions_f.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- f -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func.html b/docs/doxygen/html/functions_func.html
new file mode 100644
index 00000000..3640d9af
--- /dev/null
+++ b/docs/doxygen/html/functions_func.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_b.html b/docs/doxygen/html/functions_func_b.html
new file mode 100644
index 00000000..02890e20
--- /dev/null
+++ b/docs/doxygen/html/functions_func_b.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_c.html b/docs/doxygen/html/functions_func_c.html
new file mode 100644
index 00000000..8b93aa73
--- /dev/null
+++ b/docs/doxygen/html/functions_func_c.html
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_d.html b/docs/doxygen/html/functions_func_d.html
new file mode 100644
index 00000000..54486ed2
--- /dev/null
+++ b/docs/doxygen/html/functions_func_d.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_e.html b/docs/doxygen/html/functions_func_e.html
new file mode 100644
index 00000000..fca58ca6
--- /dev/null
+++ b/docs/doxygen/html/functions_func_e.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_f.html b/docs/doxygen/html/functions_func_f.html
new file mode 100644
index 00000000..f5dd126a
--- /dev/null
+++ b/docs/doxygen/html/functions_func_f.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_g.html b/docs/doxygen/html/functions_func_g.html
new file mode 100644
index 00000000..6340d8d0
--- /dev/null
+++ b/docs/doxygen/html/functions_func_g.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_h.html b/docs/doxygen/html/functions_func_h.html
new file mode 100644
index 00000000..76c583a4
--- /dev/null
+++ b/docs/doxygen/html/functions_func_h.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_i.html b/docs/doxygen/html/functions_func_i.html
new file mode 100644
index 00000000..bb045539
--- /dev/null
+++ b/docs/doxygen/html/functions_func_i.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_n.html b/docs/doxygen/html/functions_func_n.html
new file mode 100644
index 00000000..d16f9912
--- /dev/null
+++ b/docs/doxygen/html/functions_func_n.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_o.html b/docs/doxygen/html/functions_func_o.html
new file mode 100644
index 00000000..efd26262
--- /dev/null
+++ b/docs/doxygen/html/functions_func_o.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_p.html b/docs/doxygen/html/functions_func_p.html
new file mode 100644
index 00000000..a7276e1d
--- /dev/null
+++ b/docs/doxygen/html/functions_func_p.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_r.html b/docs/doxygen/html/functions_func_r.html
new file mode 100644
index 00000000..465f65a4
--- /dev/null
+++ b/docs/doxygen/html/functions_func_r.html
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_s.html b/docs/doxygen/html/functions_func_s.html
new file mode 100644
index 00000000..d6d0950d
--- /dev/null
+++ b/docs/doxygen/html/functions_func_s.html
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_t.html b/docs/doxygen/html/functions_func_t.html
new file mode 100644
index 00000000..b22ee49a
--- /dev/null
+++ b/docs/doxygen/html/functions_func_t.html
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_u.html b/docs/doxygen/html/functions_func_u.html
new file mode 100644
index 00000000..c78441e5
--- /dev/null
+++ b/docs/doxygen/html/functions_func_u.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_w.html b/docs/doxygen/html/functions_func_w.html
new file mode 100644
index 00000000..415c38e6
--- /dev/null
+++ b/docs/doxygen/html/functions_func_w.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_func_~.html b/docs/doxygen/html/functions_func_~.html
new file mode 100644
index 00000000..3812fdc7
--- /dev/null
+++ b/docs/doxygen/html/functions_func_~.html
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_g.html b/docs/doxygen/html/functions_g.html
new file mode 100644
index 00000000..b0efacea
--- /dev/null
+++ b/docs/doxygen/html/functions_g.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- g -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_h.html b/docs/doxygen/html/functions_h.html
new file mode 100644
index 00000000..b6cb8152
--- /dev/null
+++ b/docs/doxygen/html/functions_h.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- h -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_i.html b/docs/doxygen/html/functions_i.html
new file mode 100644
index 00000000..7a511a92
--- /dev/null
+++ b/docs/doxygen/html/functions_i.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- i -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_k.html b/docs/doxygen/html/functions_k.html
new file mode 100644
index 00000000..2d5c7a4d
--- /dev/null
+++ b/docs/doxygen/html/functions_k.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- k -
+kNumCpuEventBuffers
+: NpKit
+
+kNumGpuEventBuffers
+: NpKit
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_l.html b/docs/doxygen/html/functions_l.html
new file mode 100644
index 00000000..5bdd8bd8
--- /dev/null
+++ b/docs/doxygen/html/functions_l.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- l -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_m.html b/docs/doxygen/html/functions_m.html
new file mode 100644
index 00000000..3a98417c
--- /dev/null
+++ b/docs/doxygen/html/functions_m.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- m -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_n.html b/docs/doxygen/html/functions_n.html
new file mode 100644
index 00000000..c7f1094e
--- /dev/null
+++ b/docs/doxygen/html/functions_n.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- n -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_o.html b/docs/doxygen/html/functions_o.html
new file mode 100644
index 00000000..e6b4ef8c
--- /dev/null
+++ b/docs/doxygen/html/functions_o.html
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- o -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_p.html b/docs/doxygen/html/functions_p.html
new file mode 100644
index 00000000..8a0cbe60
--- /dev/null
+++ b/docs/doxygen/html/functions_p.html
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- p -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_r.html b/docs/doxygen/html/functions_r.html
new file mode 100644
index 00000000..babf349e
--- /dev/null
+++ b/docs/doxygen/html/functions_r.html
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- r -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_rela.html b/docs/doxygen/html/functions_rela.html
new file mode 100644
index 00000000..dea56c92
--- /dev/null
+++ b/docs/doxygen/html/functions_rela.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Related Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_s.html b/docs/doxygen/html/functions_s.html
new file mode 100644
index 00000000..4d5427a7
--- /dev/null
+++ b/docs/doxygen/html/functions_s.html
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- s -
+ScopedTimer()
+: mscclpp::ScopedTimer
+
+semaphore()
+: mscclpp::ProxyService
+
+semaphore_
+: mscclpp::ProxyChannelDeviceHandle
+, mscclpp::SmChannelDeviceHandle
+
+semaphoreId_
+: mscclpp::ProxyChannelDeviceHandle
+
+send()
+: mscclpp::Bootstrap
+, mscclpp::TcpBootstrap
+
+sendMemoryOnSetup()
+: mscclpp::Communicator
+
+serialize()
+: mscclpp::Endpoint
+, mscclpp::NvlsConnection
+, mscclpp::RegisteredMemory
+
+set()
+: mscclpp::Timer
+
+setup()
+: mscclpp::Communicator
+
+Shutdown()
+: NpKit
+
+signal()
+: mscclpp::Host2DeviceSemaphore
+, mscclpp::Host2HostSemaphore
+
+SimpleProxyChannel()
+: mscclpp::SimpleProxyChannel
+
+size
+: mscclpp::ChannelTrigger
+, mscclpp::Fifo
+, mscclpp::FifoDeviceHandle
+, mscclpp::RegisteredMemory
+, NpKitEvent
+
+size_
+: mscclpp::PhysicalCudaMemory< T >
+
+SmChannel()
+: mscclpp::SmChannel
+
+SmDevice2DeviceSemaphore()
+: mscclpp::SmDevice2DeviceSemaphore
+
+snd
+: mscclpp::ProxyTrigger
+
+src_
+: mscclpp::SimpleProxyChannelDeviceHandle
+, mscclpp::SmChannelDeviceHandle
+
+srcMemoryId
+: mscclpp::ChannelTrigger
+
+srcOffset
+: mscclpp::ChannelTrigger
+
+start()
+: mscclpp::Proxy
+
+start_
+: mscclpp::Timer
+
+startProxy()
+: mscclpp::BaseProxyService
+, mscclpp::ProxyService
+
+stop()
+: mscclpp::Proxy
+
+stopProxy()
+: mscclpp::BaseProxyService
+, mscclpp::ProxyService
+
+stream_
+: mscclpp::CudaStreamWithFlags
+
+SysError()
+: mscclpp::SysError
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_t.html b/docs/doxygen/html/functions_t.html
new file mode 100644
index 00000000..6dbe1149
--- /dev/null
+++ b/docs/doxygen/html/functions_t.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- t -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_type.html b/docs/doxygen/html/functions_type.html
new file mode 100644
index 00000000..68ea8e39
--- /dev/null
+++ b/docs/doxygen/html/functions_type.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Typedefs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_u.html b/docs/doxygen/html/functions_u.html
new file mode 100644
index 00000000..7b80e838
--- /dev/null
+++ b/docs/doxygen/html/functions_u.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- u -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_v.html b/docs/doxygen/html/functions_v.html
new file mode 100644
index 00000000..e3281151
--- /dev/null
+++ b/docs/doxygen/html/functions_v.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- v -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html
new file mode 100644
index 00000000..9213020c
--- /dev/null
+++ b/docs/doxygen/html/functions_vars.html
@@ -0,0 +1,368 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- _ -
+
+
+
- b -
+
+
+
- c -
+
+
+
- d -
+
+
+
- e -
+
+
+
- f -
+
+
+
- g -
+
+
+
- h -
+
+
+
- i -
+
+
+
- k -
+kNumCpuEventBuffers
+: NpKit
+
+kNumGpuEventBuffers
+: NpKit
+
+
+
+
+
- l -
+
+
+
- m -
+
+
+
- n -
+
+
+
- o -
+
+
+
- p -
+
+
+
- r -
+
+
+
- s -
+
+
+
- t -
+
+
+
- v -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_w.html b/docs/doxygen/html/functions_w.html
new file mode 100644
index 00000000..cb0ffb66
--- /dev/null
+++ b/docs/doxygen/html/functions_w.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- w -
+
+
+
+
+
diff --git a/docs/doxygen/html/functions_~.html b/docs/doxygen/html/functions_~.html
new file mode 100644
index 00000000..d51655d8
--- /dev/null
+++ b/docs/doxygen/html/functions_~.html
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+MSCCL++: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all class members with links to the classes they belong to:
+
+
- ~ -
+
+
+
+
+
diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html
new file mode 100644
index 00000000..7693d9b8
--- /dev/null
+++ b/docs/doxygen/html/globals.html
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+MSCCL++: File Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
diff --git a/docs/doxygen/html/globals_defs.html b/docs/doxygen/html/globals_defs.html
new file mode 100644
index 00000000..c802e17c
--- /dev/null
+++ b/docs/doxygen/html/globals_defs.html
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+MSCCL++: File Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu_8hpp.html b/docs/doxygen/html/gpu_8hpp.html
new file mode 100644
index 00000000..d63670a2
--- /dev/null
+++ b/docs/doxygen/html/gpu_8hpp.html
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+MSCCL++: gpu.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <cuda.h>
+#include <cuda_runtime.h>
+#include <linux/version.h>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the source code of this file.
+
+
+#define USE_NVLS ((CUDART_VERSION >= 12010) && (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)))
+
+#define __syncshm () __syncthreads();
+
+
+
+
+
◆ __syncshm
+
+
+
+
+
+ #define __syncshm
+ (
+ )
+ __syncthreads();
+
+
+
+
+
+
+
+
◆ USE_NVLS
+
+
+
+
+
+ #define USE_NVLS ((CUDART_VERSION >= 12010) && (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)))
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu_8hpp__dep__incl.map b/docs/doxygen/html/gpu_8hpp__dep__incl.map
new file mode 100644
index 00000000..51ec5fc6
--- /dev/null
+++ b/docs/doxygen/html/gpu_8hpp__dep__incl.map
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu_8hpp__dep__incl.md5 b/docs/doxygen/html/gpu_8hpp__dep__incl.md5
new file mode 100644
index 00000000..b676d2eb
--- /dev/null
+++ b/docs/doxygen/html/gpu_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+89f4c527d70fec2f626b880b39d2dbbf
\ No newline at end of file
diff --git a/docs/doxygen/html/gpu_8hpp__dep__incl.png b/docs/doxygen/html/gpu_8hpp__dep__incl.png
new file mode 100644
index 00000000..351bfb3a
Binary files /dev/null and b/docs/doxygen/html/gpu_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/gpu_8hpp__incl.map b/docs/doxygen/html/gpu_8hpp__incl.map
new file mode 100644
index 00000000..9a0944f4
--- /dev/null
+++ b/docs/doxygen/html/gpu_8hpp__incl.map
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu_8hpp__incl.md5 b/docs/doxygen/html/gpu_8hpp__incl.md5
new file mode 100644
index 00000000..84ba501b
--- /dev/null
+++ b/docs/doxygen/html/gpu_8hpp__incl.md5
@@ -0,0 +1 @@
+3f8e3babe3c64dcf7c1feb3dd093876a
\ No newline at end of file
diff --git a/docs/doxygen/html/gpu_8hpp__incl.png b/docs/doxygen/html/gpu_8hpp__incl.png
new file mode 100644
index 00000000..bfa03fb4
Binary files /dev/null and b/docs/doxygen/html/gpu_8hpp__incl.png differ
diff --git a/docs/doxygen/html/gpu_8hpp_source.html b/docs/doxygen/html/gpu_8hpp_source.html
new file mode 100644
index 00000000..ca7ac46c
--- /dev/null
+++ b/docs/doxygen/html/gpu_8hpp_source.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+MSCCL++: gpu.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_GPU_HPP_
+
5 #define MSCCLPP_GPU_HPP_
+
+
7 #if defined(__HIP_PLATFORM_AMD__)
+
+
9 #include <hip/hip_runtime.h>
+
+
11 using cudaError_t = hipError_t;
+
12 using cudaGraph_t = hipGraph_t;
+
13 using cudaGraphExec_t = hipGraphExec_t;
+
14 using cudaDeviceProp = hipDeviceProp_t;
+
15 using cudaStream_t = hipStream_t;
+
16 using cudaStreamCaptureMode = hipStreamCaptureMode;
+
17 using cudaMemcpyKind = hipMemcpyKind;
+
18 using cudaIpcMemHandle_t = hipIpcMemHandle_t;
+
+
20 using CUresult = hipError_t;
+
21 using CUdeviceptr = hipDeviceptr_t;
+
22 using CUmemGenericAllocationHandle = hipMemGenericAllocationHandle_t;
+
23 using CUmemAllocationProp = hipMemAllocationProp;
+
24 using CUmemAccessDesc = hipMemAccessDesc;
+
+
26 constexpr
auto cudaSuccess = hipSuccess;
+
27 constexpr
auto cudaStreamNonBlocking = hipStreamNonBlocking;
+
28 constexpr
auto cudaStreamCaptureModeGlobal = hipStreamCaptureModeGlobal;
+
29 constexpr
auto cudaStreamCaptureModeRelaxed = hipStreamCaptureModeRelaxed;
+
30 constexpr
auto cudaHostAllocMapped = hipHostMallocMapped;
+
31 constexpr
auto cudaHostAllocWriteCombined = hipHostMallocWriteCombined;
+
32 constexpr
auto cudaMemcpyDefault = hipMemcpyDefault;
+
33 constexpr
auto cudaMemcpyDeviceToDevice = hipMemcpyDeviceToDevice;
+
34 constexpr
auto cudaMemcpyHostToDevice = hipMemcpyHostToDevice;
+
35 constexpr
auto cudaMemcpyDeviceToHost = hipMemcpyDeviceToHost;
+
36 constexpr
auto cudaIpcMemLazyEnablePeerAccess = hipIpcMemLazyEnablePeerAccess;
+
+
38 constexpr
auto CU_MEM_ALLOCATION_TYPE_PINNED = hipMemAllocationTypePinned;
+
39 constexpr
auto CU_MEM_LOCATION_TYPE_DEVICE = hipMemLocationTypeDevice;
+
40 constexpr
auto CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR = hipMemHandleTypePosixFileDescriptor;
+
41 constexpr
auto CU_MEM_ACCESS_FLAGS_PROT_READWRITE = hipMemAccessFlagsProtReadWrite;
+
+
+
44 #define CUDA_SUCCESS hipSuccess
+
45 #endif // CUDA_SUCCESS
+
+
47 #define cudaGetErrorString(...) hipGetErrorString(__VA_ARGS__)
+
48 #define cudaGetDevice(...) hipGetDevice(__VA_ARGS__)
+
49 #define cudaGetDeviceCount(...) hipGetDeviceCount(__VA_ARGS__)
+
50 #define cudaGetDeviceProperties(...) hipGetDeviceProperties(__VA_ARGS__)
+
51 #define cudaGetLastError(...) hipGetLastError(__VA_ARGS__)
+
52 #define cudaSetDevice(...) hipSetDevice(__VA_ARGS__)
+
53 #define cudaDeviceSynchronize(...) hipDeviceSynchronize(__VA_ARGS__)
+
54 #define cudaDeviceGetPCIBusId(...) hipDeviceGetPCIBusId(__VA_ARGS__)
+
55 #define cudaHostAlloc(...) hipHostMalloc(__VA_ARGS__)
+
56 #define cudaMalloc(...) hipMalloc(__VA_ARGS__)
+
57 #define cudaFree(...) hipFree(__VA_ARGS__)
+
58 #define cudaFreeHost(...) hipHostFree(__VA_ARGS__)
+
59 #define cudaMemset(...) hipMemset(__VA_ARGS__)
+
60 #define cudaMemsetAsync(...) hipMemsetAsync(__VA_ARGS__)
+
61 #define cudaMemcpy(...) hipMemcpy(__VA_ARGS__)
+
62 #define cudaMemcpyAsync(...) hipMemcpyAsync(__VA_ARGS__)
+
63 #define cudaMemcpyToSymbol(...) hipMemcpyToSymbol(__VA_ARGS__)
+
64 #define cudaMemcpyToSymbolAsync(...) hipMemcpyToSymbolAsync(__VA_ARGS__)
+
65 #define cudaStreamCreate(...) hipStreamCreate(__VA_ARGS__)
+
66 #define cudaStreamCreateWithFlags(...) hipStreamCreateWithFlags(__VA_ARGS__)
+
67 #define cudaStreamSynchronize(...) hipStreamSynchronize(__VA_ARGS__)
+
68 #define cudaStreamBeginCapture(...) hipStreamBeginCapture(__VA_ARGS__)
+
69 #define cudaStreamEndCapture(...) hipStreamEndCapture(__VA_ARGS__)
+
70 #define cudaStreamDestroy(...) hipStreamDestroy(__VA_ARGS__)
+
71 #define cudaGraphInstantiate(...) hipGraphInstantiate(__VA_ARGS__)
+
72 #define cudaGraphLaunch(...) hipGraphLaunch(__VA_ARGS__)
+
73 #define cudaGraphDestroy(...) hipGraphDestroy(__VA_ARGS__)
+
74 #define cudaGraphExecDestroy(...) hipGraphExecDestroy(__VA_ARGS__)
+
75 #define cudaThreadExchangeStreamCaptureMode(...) hipThreadExchangeStreamCaptureMode(__VA_ARGS__)
+
76 #define cudaIpcGetMemHandle(...) hipIpcGetMemHandle(__VA_ARGS__)
+
77 #define cudaIpcOpenMemHandle(...) hipIpcOpenMemHandle(__VA_ARGS__)
+
78 #define cudaIpcCloseMemHandle(...) hipIpcCloseMemHandle(__VA_ARGS__)
+
+
80 #define cuGetErrorString(...) hipDrvGetErrorString(__VA_ARGS__)
+
81 #define cuMemAddressReserve(...) hipMemAddressReserve(__VA_ARGS__)
+
82 #define cuMemAddressFree(...) hipMemAddressFree(__VA_ARGS__)
+
83 #define cuMemGetAddressRange(...) hipMemGetAddressRange(__VA_ARGS__)
+
84 #define cuMemCreate(...) hipMemCreate(__VA_ARGS__)
+
85 #define cuMemRelease(...) hipMemRelease(__VA_ARGS__)
+
86 #define cuMemSetAccess(...) hipMemSetAccess(__VA_ARGS__)
+
87 #define cuMemMap(...) hipMemMap(__VA_ARGS__)
+
88 #define cuMemUnmap(...) hipMemUnmap(__VA_ARGS__)
+
+
+
+
+
93 #include <cuda_runtime.h>
+
+
+
+
+
98 #if !defined(__HIP_PLATFORM_AMD__)
+
99 #include <linux/version.h>
+
100 #define USE_NVLS ((CUDART_VERSION >= 12010) && (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)))
+
101 #else // !defined(__HIP_PLATFORM_AMD__)
+
+
103 #endif // !defined(__HIP_PLATFORM_AMD__)
+
+
+
106 #if defined(__HIP_PLATFORM_AMD__)
+
107 #define __syncshm() asm volatile("s_waitcnt lgkmcnt(0) \n s_barrier");
+
+
109 #define __syncshm() __syncthreads();
+
+
+
112 #endif // MSCCLPP_GPU_HPP_
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu__utils_8hpp.html b/docs/doxygen/html/gpu__utils_8hpp.html
new file mode 100644
index 00000000..0b033b69
--- /dev/null
+++ b/docs/doxygen/html/gpu__utils_8hpp.html
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+MSCCL++: gpu_utils.hpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <cstring>
+
#include <memory>
+
#include "errors.hpp "
+
#include "gpu.hpp "
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the source code of this file.
+
+
+template<class T >
+T * mscclpp::detail::cudaCalloc (size_t nelem)
+
+template<class T >
+PhysicalCudaMemory< T > * mscclpp::detail::cudaPhysicalCalloc (size_t nelem, size_t gran)
+
+template<class T >
+T * mscclpp::detail::cudaExtCalloc (size_t nelem)
+
+template<class T >
+T * mscclpp::detail::cudaHostCalloc (size_t nelem)
+
+template<class T , T * , class Deleter , class Memory >
+Memory mscclpp::detail::safeAlloc (size_t nelem)
+
+template<class T , T * , class Deleter , class Memory >
+Memory mscclpp::detail::safeAlloc (size_t nelem, size_t gran)
+
+template<class T >
+std::shared_ptr< T > mscclpp::allocSharedCuda (size_t count=1)
+
+template<class T >
+std::shared_ptr< PhysicalCudaMemory< T > > mscclpp::allocSharedPhysicalCuda (size_t count, size_t gran)
+
+template<class T >
+std::shared_ptr< T > mscclpp::allocExtSharedCuda (size_t count=1)
+
+template<class T >
+UniqueCudaPtr< T > mscclpp::allocUniqueCuda (size_t count=1)
+
+template<class T >
+std::unique_ptr< PhysicalCudaMemory< T > > mscclpp::allocUniquePhysicalCuda (size_t count, size_t gran)
+
+template<class T >
+UniqueCudaPtr< T > mscclpp::allocExtUniqueCuda (size_t count=1)
+
+template<class T , typename... Args>
+std::shared_ptr< T > mscclpp::makeSharedCudaHost (Args &&... args)
+
+template<class T >
+std::shared_ptr< T[]> mscclpp::makeSharedCudaHost (size_t count)
+
+template<class T , typename... Args, std::enable_if_t< false==std::is_array_v< T >, bool > = true>
+UniqueCudaHostPtr< T > mscclpp::makeUniqueCudaHost (Args &&... args)
+
+template<class T , std::enable_if_t< true==std::is_array_v< T >, bool > = true>
+UniqueCudaHostPtr< T > mscclpp::makeUniqueCudaHost (size_t count)
+
+template<class T >
+void mscclpp::memcpyCudaAsync (T *dst, const T *src, size_t count, cudaStream_t stream, cudaMemcpyKind kind=cudaMemcpyDefault)
+
+template<class T >
+void mscclpp::memcpyCuda (T *dst, const T *src, size_t count, cudaMemcpyKind kind=cudaMemcpyDefault)
+
+
+
+
+
◆ MSCCLPP_CUDATHROW
+
+
+
+
+
+ #define MSCCLPP_CUDATHROW
+ (
+
+ cmd )
+
+
+
+
+
Value: do { \
+
cudaError_t err = cmd; \
+
if (err != cudaSuccess) { \
+
throw
mscclpp::CudaError (std::string(
"Call to " #cmd
" failed. " ) + __FILE__ +
":" + std::to_string(__LINE__), \
+
err); \
+
} \
+
} while (false )
+
Throw mscclpp::CudaError if cmd
does not return cudaSuccess.
Parameters
+
+ cmd The command to execute.
+
+
+
+
+
+
+
+
◆ MSCCLPP_CUTHROW
+
+
+
+
+
+ #define MSCCLPP_CUTHROW
+ (
+
+ cmd )
+
+
+
+
+
Value: do { \
+
CUresult err = cmd; \
+
if (err != CUDA_SUCCESS) { \
+
throw
mscclpp::CuError (std::string(
"Call to " #cmd
" failed." ) + __FILE__ +
":" + std::to_string(__LINE__), \
+
err); \
+
} \
+
} while (false )
+
Throw mscclpp::CuError if cmd
does not return CUDA_SUCCESS.
Parameters
+
+ cmd The command to execute.
+
+
+
+
+
+
+
+An error from a CUDA driver library call.
Definition: errors.hpp:83
+An error from a CUDA runtime library call.
Definition: errors.hpp:76
+
+
+
+
diff --git a/docs/doxygen/html/gpu__utils_8hpp__dep__incl.map b/docs/doxygen/html/gpu__utils_8hpp__dep__incl.map
new file mode 100644
index 00000000..02c919a9
--- /dev/null
+++ b/docs/doxygen/html/gpu__utils_8hpp__dep__incl.map
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu__utils_8hpp__dep__incl.md5 b/docs/doxygen/html/gpu__utils_8hpp__dep__incl.md5
new file mode 100644
index 00000000..07a4de62
--- /dev/null
+++ b/docs/doxygen/html/gpu__utils_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+a6a8577ef9cd7691c52fb597d9b3d2d1
\ No newline at end of file
diff --git a/docs/doxygen/html/gpu__utils_8hpp__dep__incl.png b/docs/doxygen/html/gpu__utils_8hpp__dep__incl.png
new file mode 100644
index 00000000..8e8c5504
Binary files /dev/null and b/docs/doxygen/html/gpu__utils_8hpp__dep__incl.png differ
diff --git a/docs/doxygen/html/gpu__utils_8hpp__incl.map b/docs/doxygen/html/gpu__utils_8hpp__incl.map
new file mode 100644
index 00000000..07770eae
--- /dev/null
+++ b/docs/doxygen/html/gpu__utils_8hpp__incl.map
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/gpu__utils_8hpp__incl.md5 b/docs/doxygen/html/gpu__utils_8hpp__incl.md5
new file mode 100644
index 00000000..1a7b60c9
--- /dev/null
+++ b/docs/doxygen/html/gpu__utils_8hpp__incl.md5
@@ -0,0 +1 @@
+0194237d087e93dbb2b6c098e5454eaa
\ No newline at end of file
diff --git a/docs/doxygen/html/gpu__utils_8hpp__incl.png b/docs/doxygen/html/gpu__utils_8hpp__incl.png
new file mode 100644
index 00000000..50f1d2ce
Binary files /dev/null and b/docs/doxygen/html/gpu__utils_8hpp__incl.png differ
diff --git a/docs/doxygen/html/gpu__utils_8hpp_source.html b/docs/doxygen/html/gpu__utils_8hpp_source.html
new file mode 100644
index 00000000..b53363a4
--- /dev/null
+++ b/docs/doxygen/html/gpu__utils_8hpp_source.html
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+MSCCL++: gpu_utils.hpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
4 #ifndef MSCCLPP_GPU_UTILS_HPP_
+
5 #define MSCCLPP_GPU_UTILS_HPP_
+
+
+
+
+
+
+
+
15 #define MSCCLPP_CUDATHROW(cmd) \
+
+
17 cudaError_t err = cmd; \
+
18 if (err != cudaSuccess) { \
+
19 throw mscclpp::CudaError(std::string("Call to " #cmd " failed. ") + __FILE__ + ":" + std::to_string(__LINE__), \
+
+
+
+
+
26 #define MSCCLPP_CUTHROW(cmd) \
+
+
+
29 if (err != CUDA_SUCCESS) { \
+
30 throw mscclpp::CuError(std::string("Call to " #cmd " failed.") + __FILE__ + ":" + std::to_string(__LINE__), \
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
49 operator cudaStream_t()
const {
return stream_ ; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
89 CUmemAllocationProp prop = {};
+
90 prop.type = CU_MEM_ALLOCATION_TYPE_PINNED;
+
91 prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
+
92 prop.location.id = deviceId;
+
93 #if defined(__HIP_PLATFORM_AMD__)
+
+
95 prop.requestedHandleType = CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR;
+
+
97 prop.requestedHandleTypes = CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR;
+
+
+
100 CUmemGenericAllocationHandle memHandle;
+
101 size_t bufferSize =
sizeof (T) * nelem;
+
+
+
+
105 CUmemAccessDesc accessDesc = {};
+
106 accessDesc.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
+
107 accessDesc.location.id = deviceId;
+
108 accessDesc.flags = CU_MEM_ACCESS_FLAGS_PROT_READWRITE;
+
+
110 T* devicePtr =
nullptr ;
+
+
112 MSCCLPP_CUTHROW (cuMemAddressReserve((CUdeviceptr*)&devicePtr, bufferSize, gran, 0U, 0));
+
113 MSCCLPP_CUTHROW (cuMemMap((CUdeviceptr)devicePtr, bufferSize, 0, memHandle, 0));
+
114 MSCCLPP_CUTHROW (cuMemSetAccess((CUdeviceptr)devicePtr, bufferSize, &accessDesc, 1));
+
+
+
+
+
+
+
+
+
+
+
+
+
+
128 #if defined(__HIP_PLATFORM_AMD__)
+
129 MSCCLPP_CUDATHROW (hipExtMallocWithFlags((
void **)&ptr, nelem *
sizeof (T), hipDeviceMallocUncached));
+
+
+
+
+
+
+
+
+
+
+
+
+
146 MSCCLPP_CUDATHROW (cudaHostAlloc(&ptr, nelem *
sizeof (T), cudaHostAllocMapped | cudaHostAllocWriteCombined));
+
147 memset(ptr, 0, nelem *
sizeof (T));
+
+
+
+
160 template <
class T, T*(alloc)(
size_t ),
class Deleter,
class Memory>
+
+
+
+
+
+
+
+
+
+
+
171 return Memory(ptr, Deleter());
+
+
+
174 template <
class T, T*(alloc)(
size_t ,
size_t ),
class Deleter,
class Memory>
+
+
176 if ((nelem *
sizeof (T)) % gran) {
+
177 throw Error (
"The request allocation size is not divisible by the required granularity:" +
+
178 std::to_string(nelem *
sizeof (T)) +
" vs " + std::to_string(gran),
+
+
+
+
+
183 ptr = alloc(nelem, gran);
+
+
+
+
+
+
+
190 return Memory(ptr, Deleter());
+
+
+
+
+
+
+
199 using TPtrOrArray = std::conditional_t<std::is_array_v<T>, T, T*>;
+
+
+
+
+
+
+
+
+
208 static_assert(!std::is_array_v<T>,
"T must not be an array" );
+
+
+
+
+
+
+
+
+
+
+
221 using TPtrOrArray = std::conditional_t<std::is_array_v<T>, T, T*>;
+
+
+
+
+
+
+
+
+
234 return detail::safeAlloc<T, detail::cudaCalloc<T>,
CudaDeleter<T> , std::shared_ptr<T>>(count);
+
+
+
+
+
+
246 std::shared_ptr<PhysicalCudaMemory<T>>>(count, gran);
+
+
+
+
+
255 return detail::safeAlloc<T, detail::cudaExtCalloc<T>,
CudaDeleter<T> , std::shared_ptr<T>>(count);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
298 template <
class T,
typename ... Args>
+
+
300 auto ptr = detail::safeAlloc<T, detail::cudaHostCalloc<T>,
CudaHostDeleter<T> , std::shared_ptr<T>>(1);
+
301 new (ptr.get()) T(std::forward<Args>(args)...);
+
+
+
+
+
+
312 using TElem = std::remove_extent_t<T>;
+
313 auto ptr = detail::safeAlloc<T, detail::cudaHostCalloc<T>,
CudaHostDeleter<TElem> , std::shared_ptr<T[]>>(count);
+
314 for (
size_t i = 0; i < count; ++i) {
+
315 new (&ptr[i]) TElem();
+
+
+
+
+
+
+
+
330 template <
class T,
typename ... Args, std::enable_if_t<false == std::is_array_v<T>,
bool > =
true >
+
+
+
333 new (ptr.get()) T(std::forward<Args>(args)...);
+
+
+
+
342 template <
class T, std::enable_if_t<true == std::is_array_v<T>,
bool > = true>
+
+
344 using TElem = std::remove_extent_t<T>;
+
+
346 for (
size_t i = 0; i < count; ++i) {
+
347 new (&ptr[i]) TElem();
+
+
+
+
+
+
360 void memcpyCudaAsync (T* dst,
const T* src,
size_t count, cudaStream_t stream, cudaMemcpyKind kind = cudaMemcpyDefault) {
+
+
+
+
+
+
372 void memcpyCuda (T* dst,
const T* src,
size_t count, cudaMemcpyKind kind = cudaMemcpyDefault) {
+
+
+
+
+
+
+
+
+
381 #endif // MSCCLPP_GPU_UTILS_HPP_
+
+CudaStreamWithFlags(unsigned int flags)
+T * cudaHostCalloc(size_t nelem)
Definition: gpu_utils.hpp:143
+void memcpyCuda(T *dst, const T *src, size_t count, cudaMemcpyKind kind=cudaMemcpyDefault)
Definition: gpu_utils.hpp:372
+A RAII wrapper around cudaStream_t that will call cudaStreamDestroy on destruction.
Definition: gpu_utils.hpp:46
+Definition: gpu_utils.hpp:220
+T * cudaExtCalloc(size_t nelem)
Definition: gpu_utils.hpp:124
+std::shared_ptr< T > allocSharedCuda(size_t count=1)
Definition: gpu_utils.hpp:233
+
+cudaStreamCaptureMode mode_
Definition: gpu_utils.hpp:42
+size_t size_
Definition: gpu_utils.hpp:60
+Definition: gpu_utils.hpp:39
+T * cudaCalloc(size_t nelem)
Definition: gpu_utils.hpp:72
+
+UniqueCudaHostPtr< T > makeUniqueCudaHost(Args &&... args)
Definition: gpu_utils.hpp:331
+std::shared_ptr< T > makeSharedCudaHost(Args &&... args)
Definition: gpu_utils.hpp:299
+#define MSCCLPP_CUDATHROW(cmd)
Definition: gpu_utils.hpp:15
+void operator()(TPtrOrArray ptr)
Definition: gpu_utils.hpp:222
+UniqueCudaPtr< T > allocUniqueCuda(size_t count=1)
Definition: gpu_utils.hpp:268
+cudaStream_t stream_
Definition: gpu_utils.hpp:50
+std::conditional_t< std::is_array_v< T >, T, T * > TPtrOrArray
Definition: gpu_utils.hpp:199
+void memcpyCudaAsync(T *dst, const T *src, size_t count, cudaStream_t stream, cudaMemcpyKind kind=cudaMemcpyDefault)
Definition: gpu_utils.hpp:360
+Memory safeAlloc(size_t nelem)
Definition: gpu_utils.hpp:161
+CUmemGenericAllocationHandle memHandle_
Definition: gpu_utils.hpp:58
+void operator()(TPtrOrArray ptr)
Definition: gpu_utils.hpp:200
+PhysicalCudaMemory(CUmemGenericAllocationHandle memHandle, T *devicePtr, size_t size)
Definition: gpu_utils.hpp:61
+T * devicePtr_
Definition: gpu_utils.hpp:59
+std::unique_ptr< T, CudaDeleter< T > > UniqueCudaPtr
Definition: gpu_utils.hpp:261
+AvoidCudaGraphCaptureGuard()
+
+void operator()(PhysicalCudaMemory< T > *ptr)
Definition: gpu_utils.hpp:209
+#define MSCCLPP_CUTHROW(cmd)
Definition: gpu_utils.hpp:26
+A generic error.
Definition: errors.hpp:61
+std::conditional_t< std::is_array_v< T >, T, T * > TPtrOrArray
Definition: gpu_utils.hpp:221
+~AvoidCudaGraphCaptureGuard()
+std::shared_ptr< PhysicalCudaMemory< T > > allocSharedPhysicalCuda(size_t count, size_t gran)
Definition: gpu_utils.hpp:244
+std::unique_ptr< T, CudaHostDeleter< T > > UniqueCudaHostPtr
Definition: gpu_utils.hpp:323
+PhysicalCudaMemory< T > * cudaPhysicalCalloc(size_t nelem, size_t gran)
Definition: gpu_utils.hpp:83
+std::shared_ptr< T > allocExtSharedCuda(size_t count=1)
Definition: gpu_utils.hpp:254
+Definition: gpu_utils.hpp:207
+
+UniqueCudaPtr< T > allocExtUniqueCuda(size_t count=1)
Definition: gpu_utils.hpp:289
+std::unique_ptr< PhysicalCudaMemory< T > > allocUniquePhysicalCuda(size_t count, size_t gran)
Definition: gpu_utils.hpp:279
+Definition: atomic_device.hpp:13
+Definition: gpu_utils.hpp:54
+Definition: gpu_utils.hpp:57
+
+
+
+
diff --git a/docs/doxygen/html/graph_legend.html b/docs/doxygen/html/graph_legend.html
new file mode 100644
index 00000000..8d060471
--- /dev/null
+++ b/docs/doxygen/html/graph_legend.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+MSCCL++: Graph Legend
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This page explains how to interpret the graphs that are generated by doxygen.
+
Consider the following example:
+
class Invisible { };
+
+
+
class Truncated : public Invisible { };
+
+
+
class Undocumented { };
+
+
+
class PublicBase : public Truncated { };
+
+
+
template <class T> class Templ { };
+
+
+
class ProtectedBase { };
+
+
+
class PrivateBase { };
+
+
+
class Used { };
+
+
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private :
+
Used *m_usedClass;
+
};
+
This will result in the following graph:
+
The boxes in the above graph have the following meaning:
+
+
+A filled gray box represents the struct or class for which the graph is generated.
+
+A box with a black border denotes a documented struct or class.
+
+A box with a gray border denotes an undocumented struct or class.
+
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
+
+
The arrows have the following meaning:
+
+
+A dark blue arrow is used to visualize a public inheritance relation between two classes.
+
+A dark green arrow is used for protected inheritance.
+
+A dark red arrow is used for private inheritance.
+
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
+
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
+
+
+
+
+
+
diff --git a/docs/doxygen/html/graph_legend.md5 b/docs/doxygen/html/graph_legend.md5
new file mode 100644
index 00000000..8fcdccd1
--- /dev/null
+++ b/docs/doxygen/html/graph_legend.md5
@@ -0,0 +1 @@
+f51bf6e9a10430aafef59831b08dcbfe
\ No newline at end of file
diff --git a/docs/doxygen/html/graph_legend.png b/docs/doxygen/html/graph_legend.png
new file mode 100644
index 00000000..7e2cbcfb
Binary files /dev/null and b/docs/doxygen/html/graph_legend.png differ
diff --git a/docs/doxygen/html/hierarchy.html b/docs/doxygen/html/hierarchy.html
new file mode 100644
index 00000000..13e9573b
--- /dev/null
+++ b/docs/doxygen/html/hierarchy.html
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+MSCCL++: Class Hierarchy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the graphical class hierarchy
+This inheritance list is sorted roughly, but not completely, alphabetically:
+
+
+
+
+
diff --git a/docs/doxygen/html/index.html b/docs/doxygen/html/index.html
new file mode 100644
index 00000000..232433c4
--- /dev/null
+++ b/docs/doxygen/html/index.html
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+MSCCL++: MSCCL++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Latest Release [License ](LICENSE) CodeQL
+
+
+Pipelines Build Status
+
+Unit Tests (CUDA)
+
+Integration Tests (CUDA)
+
+Integration Tests (ROCm)
+
+
A GPU-driven communication stack for scalable AI applications.
+
See Quick Start to quickly get started.
+
+Overview
+
MSCCL++ redefines inter-GPU communication interfaces, thereby delivering a highly efficient and customizable communication stack for distributed GPU applications. Its design is specifically tailored to accommodate diverse performance optimization scenarios often encountered in state-of-the-art AI applications. Figure below provides a high-level overview of MSCCL++ abstractions in CUDA, C, and Python.
+
+
+MSCCL++ Abstractions Overview
+
+
+
+
The followings highlight the key features of MSCCL++.
+Light-weight and multi-layer abstractions. MSCCL++ provides communication abstractions at lowest level close to hardware and at the highest level close to application API. The lowest level of abstraction is ultra light weight which enables a user to implement logics of data movement for a collective operation such as AllReduce inside a GPU kernel extremely efficiently without worrying about memory ordering of different ops. The modularity of MSCCL++ enables a user to construct the building blocks of MSCCL++ in a high level abstraction in Python and feed them to a CUDA kernel in order to facilitate the user's productivity.
+1-sided 0-copy synchronous and asynchronous abstracts. MSCCL++ provides fine-grained synchronous and asynchronous 0-copy 1-sided abstracts for communication primitives such as put()
, get()
, signal()
, flush()
, and wait()
. The 1-sided abstractions allows a user to asynchronously put()
their data on the remote GPU as soon as it is ready without requiring the remote side to issue any receive instruction. This enables users to easily implement flexible communication logics, such as overlapping communication with computation, or implementing customized collective communication algorithms without worrying about potential deadlocks. Additionally, the 0-copy capability enables MSCCL++ to directly transfer data between user's buffers without using intermediate internal buffers which saves GPU bandwidth and memory capacity.
+Unified abstractions for different interconnection hardware. MSCCL++ provides consistent abstractions regardless of the location of the remote GPU (either on the local node or on a remote node) or the underlying link (either NVLink/xGMI or InfiniBand). This simplifies the code for inter-GPU communication, which is often complex due to memory ordering of GPU/CPU read/writes and therefore, is error-prone.
+
+
+Performance
+
While the power of MSCCL++ is fully realized with application-specific optimization, it still delivers performance benefits even for collective communication operations. The following figures provide a comparison of the AllReduce throughput of MSCCL++ against NCCL 2.19.3. This benchmark was tested over two Azure NDmv4 SKUs (8 A100-80G GPUs per node). The key motivation behind these results is scaling of inference for LLM models using tensor parallelism. LLM requests usually are executed in two phases: prompt processing and token sampling. The prompt processing uses a large batch size that is usually equal to a request context length and the corresponding AllReduce size is len_context*dim_hidden*sizeof(fp16)
. For a context length of 2048 with a hidden dimension of 12288 (GPT-3 size), the AllReduce size is 48MB. The token sampling uses a smaller batch size which corresponds to concurrent user requests in the system and therefore, the AllReduce size is batch_size*dim_hidden*sizeof(fp16)
. For a concurrency of 16 users, the AllReduce size is 384KB. As the figures below demonstrates, MSCCL++ provides significant speed up over NCCL which is crucial for efficiency of serving LLMs at large scale.
+
+Single-node AllReduce Two-node AllReduce
+
+
+
+
+Key Concepts
+
The following highlights key concepts of MSCCL++.
+On-GPU Communication Interfaces: Channels
+
MSCCL++ provides peer-to-peer communication methods between GPUs. A peer-to-peer connection between two GPUs is called a Channel . Channels are constructed by MSCCL++ host-side interfaces and copied to GPUs during initialization. Channels provide GPU-side interfaces , which means that all communication methods are defined as a device function to be called from a GPU kernel code. For example, the put()
method in the following example copies 1KB data from the local GPU to a remote GPU.
+
+
__global__ void gpuKernel() {
+
...
+
+
channel.put( 0, 0, 1024);
+
...
+
}
+
MSCCL++ also provides efficient synchronization methods, signal()
, flush()
, and wait()
. For example, we can implement a simple barrier between two ranks (peer-to-peer connected through channel
) as follows. Explanation of each method is inlined.
+
__device__ void barrier() {
+
+
channel.signal();
+
+
channel.flush();
+
+
channel.wait();
+
+
+
+
}
+
MSCCL++ provides consistent interfaces, i.e., the above interfaces are used regardless of the location of the remote GPU (either on the local node or on a remote node) or the underlying link (either NVLink/xGMI or InfiniBand).
+ProxyChannel and SmChannel
+
MSCCL++ delivers two types of channels, ProxyChannel and SmChannel . ProxyChannel
provides (R)DMA-based data copy and synchronization methods. When called, these methods send/receive a signal to/from a host-side proxy (hence the name ProxyChannel
), which will trigger (R)DMA (such as cudaMemcpy*
or ibv_post_send
) or issue synchronization methods (such as cudaStreamSynchronize
or ibv_poll_cq
). Since the key functionalities are run by the proxy, ProxyChannel
requires only a single GPU thread to call its methods. See all ProxyChannel
methods from here . On the other hand, SmChannel
provides memory-mapping-based copy and synchronization methods. When called, these methods will directly use GPU threads to read/write from/to the remote GPU's memory space. Comparing against ProxyChannel
, SmChannel
is especially performant for low-latency scenarios, while it may need many GPU threads to call copying methods at the same time to achieve high copying bandwidth. See all SmChannel
methods from here .
+Host-Side Communication Proxy
+
MSCCL++ provides a default implementation of a host-side proxy for ProxyChannels, which is a background host thread that busy polls triggers from GPUs and conducts functionalities accordingly. For example, the following is a typical host-side code for MSCCL++. ```cpp // Bootstrap: initialize control-plane connections between all ranks auto bootstrap = std::make_shared<mscclpp::TcpBootstrap>(rank, world_size); // Create a communicator for connection setup mscclpp::Communicator comm(bootstrap); // Setup connections here using comm
... // Construct the default proxy mscclpp::ProxyService proxyService(); // Start the proxy proxyService.startProxy(); // Run the user application, i.e., launch GPU kernels here ... // Stop the proxy after the application is finished proxyService.stopProxy(); While the default implementation already enables any kinds of communication, MSCCL++ also supports users to easily implement their own customized proxies for further optimization. For example, the following example re-defines how to interpret triggers from GPUs.
+
+
```cpp
+
// Proxy FIFO is obtained from mscclpp::Proxy on the host and copied to the device.
+
__device__ mscclpp::FifoDeviceHandle fifo;
+
__global__ void gpuKernel() {
+
...
+
// Only one thread is needed for the followings
+
mscclpp::ProxyTrigger trigger;
+
// Send a custom request: "1"
+
trigger.fst = 1;
+
fifo.push(trigger);
+
// Send a custom request: "2"
+
trigger.fst = 2;
+
fifo.push(trigger);
+
// Send a custom request: "0xdeadbeef"
+
trigger.fst = 0xdeadbeef;
+
fifo.push(trigger);
+
...
+
}
+
+
// Host-side custom proxy service
+
class CustomProxyService {
+
private:
+
mscclpp::Proxy proxy_;
+
public:
+
CustomProxyService() : proxy_([&](mscclpp::ProxyTrigger trigger) {
+
// Custom trigger handler
+
if (trigger.fst == 1) {
+
// Handle request "1"
+
} else if (trigger.fst == 2) {
+
// Handle request "2"
+
} else if (trigger.fst == 0xdeadbeef) {
+
// Handle request "0xdeadbeef"
+
}
+
},
+
[&]() { /* Empty proxy initializer */ }) {}
+
void startProxy() { proxy_.start(); }
+
void stopProxy() { proxy_.stop(); }
+
};
+
Customized proxies can be used for conducting a series of pre-defined data transfers within only a single trigger from GPU at runtime. This would be more efficient than sending a trigger for each data transfer one by one.
+Python Interfaces
+
MSCCL++ provides Python bindings and interfaces, which simplifies integration with Python applications.
+Contributing
+
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com . When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. This project has adopted the Microsoft Open Source Code of Conduct . For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
+Trademarks
+
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines . Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.
+
+typename T::DeviceHandle DeviceHandle
A type which could be safely used in device side.
Definition: core.hpp:709
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_0.map b/docs/doxygen/html/inherit_graph_0.map
new file mode 100644
index 00000000..ca51e1de
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_0.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_0.md5 b/docs/doxygen/html/inherit_graph_0.md5
new file mode 100644
index 00000000..ce5ac481
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_0.md5
@@ -0,0 +1 @@
+5e11ee5377d5bc584584e313e61ec1e1
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_0.png b/docs/doxygen/html/inherit_graph_0.png
new file mode 100644
index 00000000..75164cd0
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_0.png differ
diff --git a/docs/doxygen/html/inherit_graph_1.map b/docs/doxygen/html/inherit_graph_1.map
new file mode 100644
index 00000000..51e28eef
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_1.map
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_1.md5 b/docs/doxygen/html/inherit_graph_1.md5
new file mode 100644
index 00000000..d663829e
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_1.md5
@@ -0,0 +1 @@
+1b267dc3a7f107334ab6c1279e853192
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_1.png b/docs/doxygen/html/inherit_graph_1.png
new file mode 100644
index 00000000..7e6b4073
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_1.png differ
diff --git a/docs/doxygen/html/inherit_graph_10.map b/docs/doxygen/html/inherit_graph_10.map
new file mode 100644
index 00000000..4d61fc1c
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_10.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_10.md5 b/docs/doxygen/html/inherit_graph_10.md5
new file mode 100644
index 00000000..5823f0f2
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_10.md5
@@ -0,0 +1 @@
+b0313f682ac0a8169ecc18b881aff250
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_10.png b/docs/doxygen/html/inherit_graph_10.png
new file mode 100644
index 00000000..8bdbacad
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_10.png differ
diff --git a/docs/doxygen/html/inherit_graph_11.map b/docs/doxygen/html/inherit_graph_11.map
new file mode 100644
index 00000000..6e05e412
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_11.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_11.md5 b/docs/doxygen/html/inherit_graph_11.md5
new file mode 100644
index 00000000..c8d20a16
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_11.md5
@@ -0,0 +1 @@
+3f9de965198edbb81fe9066ee3f5b62f
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_11.png b/docs/doxygen/html/inherit_graph_11.png
new file mode 100644
index 00000000..97c0e1a9
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_11.png differ
diff --git a/docs/doxygen/html/inherit_graph_12.map b/docs/doxygen/html/inherit_graph_12.map
new file mode 100644
index 00000000..b8e32b27
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_12.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_12.md5 b/docs/doxygen/html/inherit_graph_12.md5
new file mode 100644
index 00000000..13f386ac
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_12.md5
@@ -0,0 +1 @@
+19f9532ff8d8e0a15f77c286b885448a
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_12.png b/docs/doxygen/html/inherit_graph_12.png
new file mode 100644
index 00000000..bc3b8891
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_12.png differ
diff --git a/docs/doxygen/html/inherit_graph_13.map b/docs/doxygen/html/inherit_graph_13.map
new file mode 100644
index 00000000..579042a4
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_13.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_13.md5 b/docs/doxygen/html/inherit_graph_13.md5
new file mode 100644
index 00000000..99adac22
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_13.md5
@@ -0,0 +1 @@
+985e8f27a09136d5c8d22237cbb1eb81
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_13.png b/docs/doxygen/html/inherit_graph_13.png
new file mode 100644
index 00000000..fcca3155
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_13.png differ
diff --git a/docs/doxygen/html/inherit_graph_14.map b/docs/doxygen/html/inherit_graph_14.map
new file mode 100644
index 00000000..cf05870c
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_14.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_14.md5 b/docs/doxygen/html/inherit_graph_14.md5
new file mode 100644
index 00000000..02e18108
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_14.md5
@@ -0,0 +1 @@
+f63397e999cfa4caaf096298991e1991
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_14.png b/docs/doxygen/html/inherit_graph_14.png
new file mode 100644
index 00000000..874565d6
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_14.png differ
diff --git a/docs/doxygen/html/inherit_graph_15.map b/docs/doxygen/html/inherit_graph_15.map
new file mode 100644
index 00000000..da71f68f
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_15.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_15.md5 b/docs/doxygen/html/inherit_graph_15.md5
new file mode 100644
index 00000000..6ae7591f
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_15.md5
@@ -0,0 +1 @@
+8ee086c76c4416d8b566502b8823e453
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_15.png b/docs/doxygen/html/inherit_graph_15.png
new file mode 100644
index 00000000..e512ff72
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_15.png differ
diff --git a/docs/doxygen/html/inherit_graph_16.map b/docs/doxygen/html/inherit_graph_16.map
new file mode 100644
index 00000000..ff5e29b6
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_16.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_16.md5 b/docs/doxygen/html/inherit_graph_16.md5
new file mode 100644
index 00000000..5341dfe7
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_16.md5
@@ -0,0 +1 @@
+dcba043e2869d7af379a29cd7fa0b558
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_16.png b/docs/doxygen/html/inherit_graph_16.png
new file mode 100644
index 00000000..24806fca
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_16.png differ
diff --git a/docs/doxygen/html/inherit_graph_17.map b/docs/doxygen/html/inherit_graph_17.map
new file mode 100644
index 00000000..7a547286
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_17.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_17.md5 b/docs/doxygen/html/inherit_graph_17.md5
new file mode 100644
index 00000000..51d4ba29
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_17.md5
@@ -0,0 +1 @@
+fc6c97a5503899990b73f542db80e53f
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_17.png b/docs/doxygen/html/inherit_graph_17.png
new file mode 100644
index 00000000..514b9da8
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_17.png differ
diff --git a/docs/doxygen/html/inherit_graph_18.map b/docs/doxygen/html/inherit_graph_18.map
new file mode 100644
index 00000000..ab2284b9
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_18.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_18.md5 b/docs/doxygen/html/inherit_graph_18.md5
new file mode 100644
index 00000000..da995d0f
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_18.md5
@@ -0,0 +1 @@
+eff10779a578aa30287671af89bf41fc
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_18.png b/docs/doxygen/html/inherit_graph_18.png
new file mode 100644
index 00000000..a093773d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_18.png differ
diff --git a/docs/doxygen/html/inherit_graph_19.map b/docs/doxygen/html/inherit_graph_19.map
new file mode 100644
index 00000000..01199a49
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_19.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_19.md5 b/docs/doxygen/html/inherit_graph_19.md5
new file mode 100644
index 00000000..fce3c1cb
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_19.md5
@@ -0,0 +1 @@
+9cf969b37de51abffe276bbd8c9fad8f
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_19.png b/docs/doxygen/html/inherit_graph_19.png
new file mode 100644
index 00000000..cd8eb9af
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_19.png differ
diff --git a/docs/doxygen/html/inherit_graph_2.map b/docs/doxygen/html/inherit_graph_2.map
new file mode 100644
index 00000000..d62faa33
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_2.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_2.md5 b/docs/doxygen/html/inherit_graph_2.md5
new file mode 100644
index 00000000..141a1bee
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_2.md5
@@ -0,0 +1 @@
+2109712a7335dceda108e0ab54d79ce7
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_2.png b/docs/doxygen/html/inherit_graph_2.png
new file mode 100644
index 00000000..e1f801e9
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_2.png differ
diff --git a/docs/doxygen/html/inherit_graph_20.map b/docs/doxygen/html/inherit_graph_20.map
new file mode 100644
index 00000000..11300c52
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_20.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_20.md5 b/docs/doxygen/html/inherit_graph_20.md5
new file mode 100644
index 00000000..e17f095c
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_20.md5
@@ -0,0 +1 @@
+2f39d8f5af701b31e9af313de4f74211
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_20.png b/docs/doxygen/html/inherit_graph_20.png
new file mode 100644
index 00000000..6446add4
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_20.png differ
diff --git a/docs/doxygen/html/inherit_graph_21.map b/docs/doxygen/html/inherit_graph_21.map
new file mode 100644
index 00000000..fc630ac6
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_21.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_21.md5 b/docs/doxygen/html/inherit_graph_21.md5
new file mode 100644
index 00000000..bee1c382
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_21.md5
@@ -0,0 +1 @@
+f576912c0377238e784337ccc575b6a8
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_21.png b/docs/doxygen/html/inherit_graph_21.png
new file mode 100644
index 00000000..54c02b8d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_21.png differ
diff --git a/docs/doxygen/html/inherit_graph_22.map b/docs/doxygen/html/inherit_graph_22.map
new file mode 100644
index 00000000..2b9f0348
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_22.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_22.md5 b/docs/doxygen/html/inherit_graph_22.md5
new file mode 100644
index 00000000..d3d2ffe2
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_22.md5
@@ -0,0 +1 @@
+791ce970765335d7afbd7e84713a42d8
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_22.png b/docs/doxygen/html/inherit_graph_22.png
new file mode 100644
index 00000000..8a378883
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_22.png differ
diff --git a/docs/doxygen/html/inherit_graph_23.map b/docs/doxygen/html/inherit_graph_23.map
new file mode 100644
index 00000000..c4a13412
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_23.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_23.md5 b/docs/doxygen/html/inherit_graph_23.md5
new file mode 100644
index 00000000..3969f71f
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_23.md5
@@ -0,0 +1 @@
+8437d44ed3cec71aef5dca100d7f790d
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_23.png b/docs/doxygen/html/inherit_graph_23.png
new file mode 100644
index 00000000..70eebeb3
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_23.png differ
diff --git a/docs/doxygen/html/inherit_graph_24.map b/docs/doxygen/html/inherit_graph_24.map
new file mode 100644
index 00000000..2f608704
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_24.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_24.md5 b/docs/doxygen/html/inherit_graph_24.md5
new file mode 100644
index 00000000..3df331e7
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_24.md5
@@ -0,0 +1 @@
+a78a4c62e43262bd8195b2116190974c
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_24.png b/docs/doxygen/html/inherit_graph_24.png
new file mode 100644
index 00000000..98df0a14
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_24.png differ
diff --git a/docs/doxygen/html/inherit_graph_25.map b/docs/doxygen/html/inherit_graph_25.map
new file mode 100644
index 00000000..771ffcf4
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_25.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_25.md5 b/docs/doxygen/html/inherit_graph_25.md5
new file mode 100644
index 00000000..6766cc14
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_25.md5
@@ -0,0 +1 @@
+b8b5c0f01d16739e29260fa8034c2910
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_25.png b/docs/doxygen/html/inherit_graph_25.png
new file mode 100644
index 00000000..fed1c47e
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_25.png differ
diff --git a/docs/doxygen/html/inherit_graph_26.map b/docs/doxygen/html/inherit_graph_26.map
new file mode 100644
index 00000000..6d348ee5
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_26.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_26.md5 b/docs/doxygen/html/inherit_graph_26.md5
new file mode 100644
index 00000000..51c9f839
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_26.md5
@@ -0,0 +1 @@
+1abdaa64ca8450f8727fe2db8e8c49cb
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_26.png b/docs/doxygen/html/inherit_graph_26.png
new file mode 100644
index 00000000..86ee0f40
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_26.png differ
diff --git a/docs/doxygen/html/inherit_graph_27.map b/docs/doxygen/html/inherit_graph_27.map
new file mode 100644
index 00000000..a65d5e0e
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_27.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_27.md5 b/docs/doxygen/html/inherit_graph_27.md5
new file mode 100644
index 00000000..306f5033
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_27.md5
@@ -0,0 +1 @@
+bb543179606b5b2c68ec547c9a3f2fb3
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_27.png b/docs/doxygen/html/inherit_graph_27.png
new file mode 100644
index 00000000..4803cfa2
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_27.png differ
diff --git a/docs/doxygen/html/inherit_graph_28.map b/docs/doxygen/html/inherit_graph_28.map
new file mode 100644
index 00000000..2a3a50ca
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_28.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_28.md5 b/docs/doxygen/html/inherit_graph_28.md5
new file mode 100644
index 00000000..de750a82
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_28.md5
@@ -0,0 +1 @@
+045e69a19950f7e1abeba25780435fe4
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_28.png b/docs/doxygen/html/inherit_graph_28.png
new file mode 100644
index 00000000..b7dc2ed0
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_28.png differ
diff --git a/docs/doxygen/html/inherit_graph_29.map b/docs/doxygen/html/inherit_graph_29.map
new file mode 100644
index 00000000..f42997c2
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_29.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_29.md5 b/docs/doxygen/html/inherit_graph_29.md5
new file mode 100644
index 00000000..f0d966a5
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_29.md5
@@ -0,0 +1 @@
+607ec7eb3e939a0dadadbc13aed3131b
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_29.png b/docs/doxygen/html/inherit_graph_29.png
new file mode 100644
index 00000000..86a4b7ea
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_29.png differ
diff --git a/docs/doxygen/html/inherit_graph_3.map b/docs/doxygen/html/inherit_graph_3.map
new file mode 100644
index 00000000..0d60d4f2
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_3.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_3.md5 b/docs/doxygen/html/inherit_graph_3.md5
new file mode 100644
index 00000000..a8160c14
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_3.md5
@@ -0,0 +1 @@
+50dbacb9ff8663bacd1330a0b9a69416
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_3.png b/docs/doxygen/html/inherit_graph_3.png
new file mode 100644
index 00000000..f3e1c35d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_3.png differ
diff --git a/docs/doxygen/html/inherit_graph_30.map b/docs/doxygen/html/inherit_graph_30.map
new file mode 100644
index 00000000..59e8a53b
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_30.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_30.md5 b/docs/doxygen/html/inherit_graph_30.md5
new file mode 100644
index 00000000..78d093ac
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_30.md5
@@ -0,0 +1 @@
+513a5659c5ffb3346a1cbfb4fb026476
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_30.png b/docs/doxygen/html/inherit_graph_30.png
new file mode 100644
index 00000000..62d6ca6d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_30.png differ
diff --git a/docs/doxygen/html/inherit_graph_31.map b/docs/doxygen/html/inherit_graph_31.map
new file mode 100644
index 00000000..0fc55ba4
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_31.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_31.md5 b/docs/doxygen/html/inherit_graph_31.md5
new file mode 100644
index 00000000..efe216ed
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_31.md5
@@ -0,0 +1 @@
+5ed1ba009dba51742e09e6e5875188bb
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_31.png b/docs/doxygen/html/inherit_graph_31.png
new file mode 100644
index 00000000..2c669d7d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_31.png differ
diff --git a/docs/doxygen/html/inherit_graph_32.map b/docs/doxygen/html/inherit_graph_32.map
new file mode 100644
index 00000000..3d1874f6
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_32.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_32.md5 b/docs/doxygen/html/inherit_graph_32.md5
new file mode 100644
index 00000000..1926958d
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_32.md5
@@ -0,0 +1 @@
+aa4f15607de6c4af9b680a7012eb5899
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_32.png b/docs/doxygen/html/inherit_graph_32.png
new file mode 100644
index 00000000..5835bda8
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_32.png differ
diff --git a/docs/doxygen/html/inherit_graph_33.map b/docs/doxygen/html/inherit_graph_33.map
new file mode 100644
index 00000000..b82525a9
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_33.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_33.md5 b/docs/doxygen/html/inherit_graph_33.md5
new file mode 100644
index 00000000..e4887416
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_33.md5
@@ -0,0 +1 @@
+2b3f77c5858c3ec29cafe1f1252b8804
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_33.png b/docs/doxygen/html/inherit_graph_33.png
new file mode 100644
index 00000000..a7ae2495
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_33.png differ
diff --git a/docs/doxygen/html/inherit_graph_34.map b/docs/doxygen/html/inherit_graph_34.map
new file mode 100644
index 00000000..ff84b108
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_34.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_34.md5 b/docs/doxygen/html/inherit_graph_34.md5
new file mode 100644
index 00000000..34f25981
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_34.md5
@@ -0,0 +1 @@
+908a3031599bff7c1d2d6a7fd6621864
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_34.png b/docs/doxygen/html/inherit_graph_34.png
new file mode 100644
index 00000000..3d020acb
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_34.png differ
diff --git a/docs/doxygen/html/inherit_graph_35.map b/docs/doxygen/html/inherit_graph_35.map
new file mode 100644
index 00000000..ce54dcd0
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_35.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_35.md5 b/docs/doxygen/html/inherit_graph_35.md5
new file mode 100644
index 00000000..66014c79
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_35.md5
@@ -0,0 +1 @@
+e11426977d6ceb8623e8215dfcc2ac73
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_35.png b/docs/doxygen/html/inherit_graph_35.png
new file mode 100644
index 00000000..a532675d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_35.png differ
diff --git a/docs/doxygen/html/inherit_graph_36.map b/docs/doxygen/html/inherit_graph_36.map
new file mode 100644
index 00000000..ee1b53f2
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_36.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_36.md5 b/docs/doxygen/html/inherit_graph_36.md5
new file mode 100644
index 00000000..0a4c38cb
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_36.md5
@@ -0,0 +1 @@
+d412698da604921babc3b1c1ac3593c3
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_36.png b/docs/doxygen/html/inherit_graph_36.png
new file mode 100644
index 00000000..a024ed85
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_36.png differ
diff --git a/docs/doxygen/html/inherit_graph_37.map b/docs/doxygen/html/inherit_graph_37.map
new file mode 100644
index 00000000..cd6d0aab
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_37.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_37.md5 b/docs/doxygen/html/inherit_graph_37.md5
new file mode 100644
index 00000000..8099d6ed
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_37.md5
@@ -0,0 +1 @@
+70be46a2c17c38ab3c4b33b231c8201b
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_37.png b/docs/doxygen/html/inherit_graph_37.png
new file mode 100644
index 00000000..b4cbe761
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_37.png differ
diff --git a/docs/doxygen/html/inherit_graph_38.map b/docs/doxygen/html/inherit_graph_38.map
new file mode 100644
index 00000000..d9c5cd76
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_38.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_38.md5 b/docs/doxygen/html/inherit_graph_38.md5
new file mode 100644
index 00000000..4d1bb4b0
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_38.md5
@@ -0,0 +1 @@
+a29084a0e913bcc5612cc07f35b01d83
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_38.png b/docs/doxygen/html/inherit_graph_38.png
new file mode 100644
index 00000000..d1a58bb0
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_38.png differ
diff --git a/docs/doxygen/html/inherit_graph_39.map b/docs/doxygen/html/inherit_graph_39.map
new file mode 100644
index 00000000..578d3b14
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_39.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_39.md5 b/docs/doxygen/html/inherit_graph_39.md5
new file mode 100644
index 00000000..f9093f6b
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_39.md5
@@ -0,0 +1 @@
+f13585ebe1028760e2dd60fe45eb14e3
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_39.png b/docs/doxygen/html/inherit_graph_39.png
new file mode 100644
index 00000000..d738e42d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_39.png differ
diff --git a/docs/doxygen/html/inherit_graph_4.map b/docs/doxygen/html/inherit_graph_4.map
new file mode 100644
index 00000000..f220bd50
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_4.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_4.md5 b/docs/doxygen/html/inherit_graph_4.md5
new file mode 100644
index 00000000..bd5a7508
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_4.md5
@@ -0,0 +1 @@
+48eede47d3a980888634e4decd0ef2f7
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_4.png b/docs/doxygen/html/inherit_graph_4.png
new file mode 100644
index 00000000..560fe184
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_4.png differ
diff --git a/docs/doxygen/html/inherit_graph_40.map b/docs/doxygen/html/inherit_graph_40.map
new file mode 100644
index 00000000..af943c82
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_40.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_40.md5 b/docs/doxygen/html/inherit_graph_40.md5
new file mode 100644
index 00000000..e9d994ee
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_40.md5
@@ -0,0 +1 @@
+eb69e3656df6d4b2b84547e7d320ce10
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_40.png b/docs/doxygen/html/inherit_graph_40.png
new file mode 100644
index 00000000..f35cb395
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_40.png differ
diff --git a/docs/doxygen/html/inherit_graph_41.map b/docs/doxygen/html/inherit_graph_41.map
new file mode 100644
index 00000000..6b5f572f
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_41.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_41.md5 b/docs/doxygen/html/inherit_graph_41.md5
new file mode 100644
index 00000000..083fed0a
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_41.md5
@@ -0,0 +1 @@
+7518e36401dc97a29170e562c0dcfe19
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_41.png b/docs/doxygen/html/inherit_graph_41.png
new file mode 100644
index 00000000..6b354f10
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_41.png differ
diff --git a/docs/doxygen/html/inherit_graph_42.map b/docs/doxygen/html/inherit_graph_42.map
new file mode 100644
index 00000000..de334a2c
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_42.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_42.md5 b/docs/doxygen/html/inherit_graph_42.md5
new file mode 100644
index 00000000..70f7be1e
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_42.md5
@@ -0,0 +1 @@
+b6d75bc9c74310b27a4a8125cfbb7851
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_42.png b/docs/doxygen/html/inherit_graph_42.png
new file mode 100644
index 00000000..7bcc8d4d
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_42.png differ
diff --git a/docs/doxygen/html/inherit_graph_43.map b/docs/doxygen/html/inherit_graph_43.map
new file mode 100644
index 00000000..9dff2a66
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_43.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_43.md5 b/docs/doxygen/html/inherit_graph_43.md5
new file mode 100644
index 00000000..ae06ca39
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_43.md5
@@ -0,0 +1 @@
+95faa1e398f50506f0e83c8f90a21fb4
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_43.png b/docs/doxygen/html/inherit_graph_43.png
new file mode 100644
index 00000000..07f47383
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_43.png differ
diff --git a/docs/doxygen/html/inherit_graph_44.map b/docs/doxygen/html/inherit_graph_44.map
new file mode 100644
index 00000000..a8d8e158
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_44.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_44.md5 b/docs/doxygen/html/inherit_graph_44.md5
new file mode 100644
index 00000000..859eda24
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_44.md5
@@ -0,0 +1 @@
+d41c107e84a48c2bfae5fa8ab5a03122
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_44.png b/docs/doxygen/html/inherit_graph_44.png
new file mode 100644
index 00000000..97278621
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_44.png differ
diff --git a/docs/doxygen/html/inherit_graph_45.map b/docs/doxygen/html/inherit_graph_45.map
new file mode 100644
index 00000000..7782f33b
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_45.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_45.md5 b/docs/doxygen/html/inherit_graph_45.md5
new file mode 100644
index 00000000..f59b86a2
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_45.md5
@@ -0,0 +1 @@
+3bdc44a6c365077d4c6f964672b2965f
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_45.png b/docs/doxygen/html/inherit_graph_45.png
new file mode 100644
index 00000000..6cbb4c65
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_45.png differ
diff --git a/docs/doxygen/html/inherit_graph_46.map b/docs/doxygen/html/inherit_graph_46.map
new file mode 100644
index 00000000..0749f458
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_46.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_46.md5 b/docs/doxygen/html/inherit_graph_46.md5
new file mode 100644
index 00000000..90d7d120
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_46.md5
@@ -0,0 +1 @@
+1219e4847ea051b38676a7d3a0563634
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_46.png b/docs/doxygen/html/inherit_graph_46.png
new file mode 100644
index 00000000..682e8ffc
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_46.png differ
diff --git a/docs/doxygen/html/inherit_graph_47.map b/docs/doxygen/html/inherit_graph_47.map
new file mode 100644
index 00000000..0e407e45
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_47.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_47.md5 b/docs/doxygen/html/inherit_graph_47.md5
new file mode 100644
index 00000000..23064198
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_47.md5
@@ -0,0 +1 @@
+6c6366e8b1f0c43df3fd46736441dd04
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_47.png b/docs/doxygen/html/inherit_graph_47.png
new file mode 100644
index 00000000..57b7073f
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_47.png differ
diff --git a/docs/doxygen/html/inherit_graph_5.map b/docs/doxygen/html/inherit_graph_5.map
new file mode 100644
index 00000000..091e1766
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_5.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_5.md5 b/docs/doxygen/html/inherit_graph_5.md5
new file mode 100644
index 00000000..7fc54a54
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_5.md5
@@ -0,0 +1 @@
+c0128d6d1562537bc52ee510bd04eb0f
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_5.png b/docs/doxygen/html/inherit_graph_5.png
new file mode 100644
index 00000000..50d2c4ea
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_5.png differ
diff --git a/docs/doxygen/html/inherit_graph_6.map b/docs/doxygen/html/inherit_graph_6.map
new file mode 100644
index 00000000..4288dbe4
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_6.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_6.md5 b/docs/doxygen/html/inherit_graph_6.md5
new file mode 100644
index 00000000..d0c728b5
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_6.md5
@@ -0,0 +1 @@
+4f8f20f8552a32669df99fe50386ae1b
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_6.png b/docs/doxygen/html/inherit_graph_6.png
new file mode 100644
index 00000000..15b3556b
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_6.png differ
diff --git a/docs/doxygen/html/inherit_graph_7.map b/docs/doxygen/html/inherit_graph_7.map
new file mode 100644
index 00000000..73d52a71
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_7.map
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_7.md5 b/docs/doxygen/html/inherit_graph_7.md5
new file mode 100644
index 00000000..7861d526
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_7.md5
@@ -0,0 +1 @@
+a71e56d9827f757aaaca868ebcaafbe1
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_7.png b/docs/doxygen/html/inherit_graph_7.png
new file mode 100644
index 00000000..b5618667
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_7.png differ
diff --git a/docs/doxygen/html/inherit_graph_8.map b/docs/doxygen/html/inherit_graph_8.map
new file mode 100644
index 00000000..da1deb60
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_8.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_8.md5 b/docs/doxygen/html/inherit_graph_8.md5
new file mode 100644
index 00000000..09991e0c
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_8.md5
@@ -0,0 +1 @@
+9e46131a35d0c683f9fba01b45a5f023
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_8.png b/docs/doxygen/html/inherit_graph_8.png
new file mode 100644
index 00000000..4726e1c3
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_8.png differ
diff --git a/docs/doxygen/html/inherit_graph_9.map b/docs/doxygen/html/inherit_graph_9.map
new file mode 100644
index 00000000..14c27c0d
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_9.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/doxygen/html/inherit_graph_9.md5 b/docs/doxygen/html/inherit_graph_9.md5
new file mode 100644
index 00000000..4767589b
--- /dev/null
+++ b/docs/doxygen/html/inherit_graph_9.md5
@@ -0,0 +1 @@
+ff4e2f01780f050d7fbcd4288f1ec193
\ No newline at end of file
diff --git a/docs/doxygen/html/inherit_graph_9.png b/docs/doxygen/html/inherit_graph_9.png
new file mode 100644
index 00000000..a3c539b5
Binary files /dev/null and b/docs/doxygen/html/inherit_graph_9.png differ
diff --git a/docs/doxygen/html/inherits.html b/docs/doxygen/html/inherits.html
new file mode 100644
index 00000000..f4bda855
--- /dev/null
+++ b/docs/doxygen/html/inherits.html
@@ -0,0 +1,334 @@
+
+
+
+
+
+
+
+MSCCL++: Class Hierarchy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/jquery.js b/docs/doxygen/html/jquery.js
new file mode 100644
index 00000000..103c32d7
--- /dev/null
+++ b/docs/doxygen/html/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML=" ";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSCCL++
+
+ GPU-driven computation & communication stack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+
+
- a -
+
+
+
- c -
+
+
+
- d -
+
+
+
- e -
+
+
+
- g -
+
+
+
- i -
+
+
+
- l -
+
+
+
- m -
+
+
+
- n -
+
+
+
- o -
+
+
+
- p -
+
+
+
- s -
+
+
+
- t -
+
+
+
- u -
+
+
+
- v -
+
+
+
+
+