class_docstr: Hold data for distributed view.
  Aggregate all data for distributed in ProfileData object.
class_docstr_tok: ["Hold","data","for","distributed","view",".","Aggregate","all","data","for","distributed","in","ProfileData","object","."]
code: def get_distributed_histogram(self, step, time_unit="ms"):
      data = {}
      data["order"] = [
          "ProfileStep",
          "Communication",
          "Computation",
          "Overlap",
          "Others",
      ]
      data["worker_name"] = []
      data["data"] = []
      new_data = defaultdict(list)
      for profile_data in self.profile_datas:
          if not profile_data.distributed_parser:
              continue
          data["worker_name"].append(profile_data.worker_name)
          if step != "All":
              new_data["ProfileStep"].append(
                  format_time(
                      profile_data.model_perspective_items[
                          "ProfileStep"
                      ].cpu_times[step],
                      time_unit,
                  )
              )
          else:
              new_data["ProfileStep"].append(
                  format_time(
                      profile_data.model_perspective_items[
                          "ProfileStep"
                      ].cpu_time,
                      time_unit,
                  )
              )
          new_data["Communication"].append(
              format_time(
                  profile_data.distributed_time[step][
                      "communication_time"
                  ],
                  time_unit,
              )
          )
          new_data["Computation"].append(
              format_time(
                  profile_data.distributed_time[step][
                      "computation_time"
                  ],
                  time_unit,
              )
          )
          new_data["Overlap"].append(
              format_time(
                  profile_data.distributed_time[step]["overlap_time"],
                  time_unit,
              )
          )
          new_data["Others"].append(
              format_time(
                  profile_data.distributed_time[step]["others_time"],
                  time_unit,
              )
          )
      for order in data["order"]:
          data["data"].append(new_data[order])
      return data
  
imports: from collections import defaultdict
  from collections import OrderedDict
  from .parser.distributed_parser import DistributedParser
  from .parser.kernel_parser import KernelParser
  from .parser.memory_parser import MemoryParser
  from .parser.operator_parser import OperatorParser
  from .parser.overview_parser import CPUType
  from .parser.overview_parser import GPUType
  from .parser.overview_parser import OverviewParser
  from .parser.trace_parser import TraceParser
  from .parser.utils import format_float
  from .parser.utils import format_memory
  from .parser.utils import format_ratio
  from .parser.utils import format_time
  from .parser.utils import traverse_tree
label_desc: Use image node_id 3 for calling the DistributedProfilerData obj's underlying member method code with example usage: obj.get_distributed_histogram(step, time_unit) and returns: data