https://github.com/charmplusplus/collectivesim
Library for implementing some collectives including allGather and AllReduce, in simulation mode as well as regular use mode. To be merged into Charm++ once mature. (this is so that we can bypass the stringent reviews and CI system for Charm++ for now).
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.1%) to scientific vocabulary
Repository
Library for implementing some collectives including allGather and AllReduce, in simulation mode as well as regular use mode. To be merged into Charm++ once mature. (this is so that we can bypass the stringent reviews and CI system for Charm++ for now).
Basic Info
- Host: GitHub
- Owner: charmplusplus
- Language: C++
- Default Branch: main
- Size: 6.18 MB
Statistics
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
collectiveSim
A library for implementing collectives commonly used in machine learning tasks including allGather and allReduce, in simulation mode as well as regular use mode.
allGather
allGather lets you gather data distributed accross different chare array elements. The library provides 3 algorithms for doing the allGather operations, namely ring, hypercube and flooding.
How to use
declare allGather as an extern module in your .ci file and include the allGather.hh header file in your cc/hh file. Then create an AllGather array object and bind it to your chare array. eg.
C++
CkArrayOptions opts(n);
opts.bindTo(sim);
AllGather_array = CProxy_AllGather::ckNew(k, n, (int)allGatherType::ALL_GATHER_RING, opts);
Here n refers to the size of the chare array, k refers to the number of data elements present in each chare array element and the third parameter lets you choose the algorithm you want to run. The algorithms are:
C++
enum allGatherType {
ALL_GATHER_RING,
ALL_GATHER_HYPERCUBE,
ALL_GATHER_FLOODING
};
[NOTE]: ALL_GATHER_HYPERCUBE only works when n(size of chare array) is a power of 2.
You must also declare a callback to a function which the library can return to after its done and it must only take a pointer to allGatherMsg as its argument. To start operations, each chare array element must make a local pointer to the library chare array element bound to it and call init.
C++
AllGather* libptr = AllGather_array({{CHARE_ARRAY_INDEX}}).ckLocal();
libptr->init(result, data, cb);
Here, result is a pointer to where the user wants the result of allGather operation to be stored(note that it must be of size n * k), data refers to per chare array element contributed data and cb refers to the callback.
Once the library is done, it will send an empty message (a kick if you will) telling the user that the result is now available in the destination that the user specified earlier.
Owner
- Name: charmplusplus
- Login: charmplusplus
- Kind: organization
- Repositories: 1
- Profile: https://github.com/charmplusplus
GitHub Events
Total
- Watch event: 3
- Delete event: 2
- Push event: 38
- Public event: 1
- Pull request review event: 2
- Pull request event: 6
- Create event: 9
Last Year
- Watch event: 3
- Delete event: 2
- Push event: 38
- Public event: 1
- Pull request review event: 2
- Pull request event: 6
- Create event: 9