credit.domain_parallel.manager
==============================

.. py:module:: credit.domain_parallel.manager

.. autoapi-nested-parse::

   Domain Parallel Manager - process group creation and coordination.

   Creates a 2D logical mesh of (data_parallel, domain_parallel) process groups
   from a flat world of GPUs. Domain-parallel ranks share the same data sample
   but hold different spatial shards. Data-parallel ranks hold the same spatial
   shard but process different data samples.

   Example with 8 GPUs and domain_parallel_size=2:
       domain groups:  [0,1], [2,3], [4,5], [6,7]
       data-parallel groups: [0,2,4,6], [1,3,5,7]



Attributes
----------

.. autoapisummary::

   credit.domain_parallel.manager.logger
   credit.domain_parallel.manager._MANAGER


Classes
-------

.. autoapisummary::

   credit.domain_parallel.manager.DomainParallelManager


Functions
---------

.. autoapisummary::

   credit.domain_parallel.manager.initialize_domain_parallel
   credit.domain_parallel.manager.get_domain_parallel_manager


Module Contents
---------------

.. py:data:: logger

.. py:data:: _MANAGER
   :value: None


.. py:class:: DomainParallelManager(world_size, domain_parallel_size, shard_dim=-2)

   Manages process groups for domain parallelism.

   :param world_size: Total number of GPUs.
   :param domain_parallel_size: Number of GPUs per domain-parallel group.
   :param shard_dim: Which spatial dimension to shard. -2 means latitude (H)
                     in a (B, C, H, W) tensor.


   .. py:attribute:: world_size


   .. py:attribute:: domain_parallel_size


   .. py:attribute:: data_parallel_size


   .. py:attribute:: shard_dim
      :value: -2



   .. py:attribute:: _domain_group_idx


   .. py:attribute:: _domain_rank


   .. py:attribute:: _dp_rank


   .. py:attribute:: _domain_group
      :value: None



   .. py:attribute:: _dp_group
      :value: None



   .. py:property:: domain_group

      Process group for domain-parallel communication (halo exchange, reductions).


   .. py:property:: data_parallel_group

      Process group for data-parallel communication (gradient sync).


   .. py:property:: domain_rank

      Rank within the domain-parallel group (0 to domain_parallel_size-1).


   .. py:property:: domain_world_size

      Number of ranks in the domain-parallel group.


   .. py:property:: dp_rank

      Rank within the data-parallel group.


   .. py:property:: dp_world_size

      Number of ranks in the data-parallel group.


   .. py:property:: is_first_domain_rank

      True if this is the first rank in its domain group (north edge).


   .. py:property:: is_last_domain_rank

      True if this is the last rank in its domain group (south edge).


   .. py:method:: neighbor_ranks()

      Returns (prev_rank, next_rank) global ranks for halo exchange.

      Returns None for non-existent neighbors at edges.



.. py:function:: initialize_domain_parallel(world_size, domain_parallel_size, shard_dim=-2)

   Initialize the global DomainParallelManager singleton.

   :param world_size: Total number of GPUs.
   :param domain_parallel_size: Number of GPUs per domain group.
   :param shard_dim: Spatial dimension to shard (-2 for lat in BCHW).

   :returns: DomainParallelManager instance.


.. py:function:: get_domain_parallel_manager()

   Get the global DomainParallelManager singleton.

   :returns: DomainParallelManager or None if not initialized.


