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).

https://github.com/charmplusplus/collectivesim

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
Last synced: 6 months ago · JSON representation

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
Created 11 months ago · Last pushed 10 months ago
Metadata Files
Readme

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

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