o
    e&                     @   sB   d dl mZ d dlmZ ddlmZ ddlmZ G dd dZdS )	    )defaultdict)Thread   )DistributedProfilerData)ProfilerDatac                   @   sp   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )
RunManagerz
    Manage profile data for each run, each run may have multiple workers and spans.
    We should manage profile data of each (worker, span) unit.
    Besides, a special worker "all" is created to merge all profile data for distributed view.
    c                 C   s6   || _ tt| _t | _t | _i | _i | _d| _	d S )NF)
runr   dictprofiler_datasetall_filenameshandled_filenamesdistributed_datathreadsZhas_join)selfr    r   WD:\Projects\ConvertPro\env\Lib\site-packages\visualdl/component/profiler/run_manager.py__init__   s   

zRunManager.__init__c                 C   s.   || j v r|| j | v r| j | | S d S d S N)r
   )r   workerspanr   r   r   get_profiler_data+   s
   
zRunManager.get_profiler_datac                 C   s   || j v r
| j | S d S r   )r   )r   r   r   r   r   get_distributed_profiler_data0   s   

z(RunManager.get_distributed_profiler_datac           	      C   sf   t  }| j D ]\}}| D ]\}}||  qqg d}g }|D ]}||v r0|| q%|S )zA
        Return all views supported in current run data.
        )ZOverviewOperatorz
GPU KernelZDistributedTraceZMemory)r   r
   itemsupdate	get_viewsappend)	r   Z	all_viewsr   	span_datar   r
   Zordered_viewsZfinal_viewsviewr   r   r   r   4   s   
zRunManager.get_viewsc                 C   sH   g }| j  D ]\}}| D ]\}}|| v r ||  nqq|S )zD
        Return all workers(processes) in current run data.
        )r
   r   r   r   )r   Z	view_nameworkersr   r   r   r
   r   r   r   get_workersF   s   
zRunManager.get_workersc                 C   s6   t | j|  }tdd |D }dd |D }|S )aD  
        Return all spans in current run data.
        spans: Collecting profile data when training your model can be divided into several parts supported by            paddle.profiler api, for example,  you may profile steps 2-4, 6-8. Each range is called a span here.             And We index each span by orders.
        c                 S      g | ]}t |qS r   int.0r   r   r   r   
<listcomp>Z       z(RunManager.get_spans.<locals>.<listcomp>c                 S   r#   r   strr&   r   r   r   r(   [   r)   )listr
   keyssorted)r   worker_namespansr   r   r   	get_spansR   s   zRunManager.get_spansc                 C   s2   t | j }tdd |D }dd |D }|S )Nc                 S   r#   r   r$   r&   r   r   r   r(   `   r)   z4RunManager.get_distributed_spans.<locals>.<listcomp>c                 S   r#   r   r*   r&   r   r   r   r(   a   r)   )r,   r   r-   r.   )r   r0   r   r   r   get_distributed_spans^   s   z RunManager.get_distributed_spansc                 C   s&   |  }t| j|||| j| |< d S r   )Zget_span_idxr   r   r
   )r   r/   resultr   r   r   r   _parse_filed   s
   
zRunManager._parse_filec                 C   s~   | j  D ]}|  qtt}| j D ]\}}| D ]\}}|| | qq| D ]\}}t| j	||| j
|< q.d S r   )r   valuesjoinr   r,   r
   r   r   r   r   r   )r   threadZdistributed_profiler_datar/   r   Zspan_idxr
   Zprofiler_datasr   r   r   r6   j   s   
zRunManager.joinc                 C   s4   t | j||fd}|  | j| || j|< d S )N)targetargs)r   r4   startr   addr   )r   filenamer/   Zprofile_resultr7   r   r   r   add_profile_resultu   s   
zRunManager.add_profile_resultc                 C   s   | j | d S r   )r   r   )r   	filenamesr   r   r   set_all_filenames|   s   zRunManager.set_all_filenamesc                 C   s   || j v rdS dS )NTF)r   )r   r<   r   r   r   has_handled   s   
zRunManager.has_handledN)__name__
__module____qualname____doc__r   r   r   r   r"   r1   r2   r4   r6   r=   r?   r@   r   r   r   r   r      s    r   N)collectionsr   	threadingr   r
   r   r   r   r   r   r   r   <module>   s
   