class_docstr: every table assigned to this class instance is managed by a CachedEmbeddingBag.
class_docstr_tok: ["every","table","assigned","to","this","class","instance","is","managed","by","a","CachedEmbeddingBag","."]
code: def print_comm_stats_(self):
      cuda_to_cpu_elem_num = 0
      cpu_to_cuda_elem_num = 0
      for cached_embedding_bag in self.cached_embedding_bag_list:
          cuda_to_cpu_elem_num += (
              cached_embedding_bag.cache_weight_mgr._cuda_to_cpu_numel
          )
          cpu_to_cuda_elem_num += (
              cached_embedding_bag.cache_weight_mgr._cpu_to_cuda_numel
          )
      print(f"CUDA->CPU num: {cuda_to_cpu_elem_num / 1e6} M elem")
      print(f"CPU->CUDA num: {cpu_to_cuda_elem_num / 1e6} M elem")
  
file_path: ColossalAI/colossalai/legacy/nn/parallel/layers/cache_embedding/parallel_cached_embedding_tablewise_split_cache.py
imports: import abc
  from typing import List
  import torch
  import torch.distributed
  import torch.nn
  from torch.profiler import record_function
  from colossalai.legacy.nn._ops._utils import dual_all_to_all_tablewise
  from colossalai.legacy.tensor import ProcessGroup
  from .cache_mgr import EvictionStrategy
  from .cached_embedding import CachedEmbeddingBag
  from .embedding_config import TablewiseEmbeddingBagConfig
label_desc: Use image node_id 4 for calling the ParallelCachedEmbeddingBagTablewiseSpiltCache obj's underlying member method code with example usage: obj.print_comm_stats_() without return types