
    Pi;                     f   d dl Z d dlmZmZmZmZ d dlZd dlmZ	 d dlm
Z d dlmZ d dlmZ d dlmZ d dlm
Z d dlmZ d d	lmZ d d
lmZmZ d dlmZ ddlmZ ddlm Z m!Z! ddl"m#Z# dZ$ G d d          Z% G d d          Z&dee'e#j(        f         de#j(        fdZ)de'fdZ* G d de          Z+dS )    N)DictOptionalUnionAny)ir)proton)amd)nvidia)passes)LazyDict)JITFunction)set_profile_allocatorNullAllocator)backends   )Hook   )set_instrumentation_onset_instrumentation_off)modec                   4    e Zd Zd Zdededee         fdZdS )CudaAllocatorc                     || _         d S N)instrumentation_hook)selfr   s     }/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/triton/profiler/hooks/instrumentation.py__init__zCudaAllocator.__init__   s    $8!!!    size	alignmentstreamc                    || j         j        k    rt          d| d| j         j                   ||z   dz
  |z  |z  }t          || j         j                  }dd l}|                    |f|j        d          }|| j         _        |S )NzAlignment mismatch: z != r   r   cudadtypedevice)	r   profile_buffer_alignmentRuntimeErrormaxprofile_buffer_sizetorchemptyuint8buffer)r   r    r!   r"   aligned_sizer,   r/   s          r   __call__zCudaAllocator.__call__   s    1JJJjyjjd6O6hjjl l ly(1,:YF
 <)B)VWW 	l-U[PP+1!(r   N)__name__
__module____qualname__r   intr   r1    r   r   r   r      sP        9 9 9S S (3-      r   r   c                   H    e Zd Zdeeef         fdZdefdZdefdZd Z	dS )Instrumentationir_mapc                     || _         d S r   )manager)r   r9   s     r   r   zInstrumentation.__init__1   s    r   r   c                 P    || j         v rt          d|           || j         |<   d S )NzIR already registered: )r;   r)   )r   r   funcs      r   registerzInstrumentation.register4   s8    ===>>>Rr   c                 r    |                      |           || j        v r | j        |         |           d S d S r   )load_dialectsr;   )r   r   pmcontexts       r   patchzInstrumentation.patch9   sH    7###DLR      r   c                 .    t          j        |           d S r   )triton_protonr@   )r   ctxs     r   r@   zInstrumentation.load_dialects>   s    #C(((((r   N)
r2   r3   r4   r   strr   r   r>   rC   r@   r6   r   r   r8   r8   /   s|        tCH~     3        
! ! ! ! !
) ) ) ) )r   r8   mode_objreturnc                   
 t          | t          j                  r| S | sd} |                     d          }|d         }i }|dd          D ]7}d|v r|                    dd          \  }}|||<   %t	          d| d          |                    dd	          |                    d
d          |                    dd          t          |                    dd                    |                    dd          |                    dd          |                    dd          |                    dd          d

fd} |dt          j                  
d<    |d
t          j                  
d
<    |dt          j	                  
d<    |dt          j
                  
d<    |dt          j                  
d<   t          
d                   dk    r%d 
d                             d          D             ng }|D ]"}	|	t          j        vrt	          d|	           #d |D             
d<   |dk    rt          j        di 
S |dk    rt          j        di 
S t	          d|            ) Ndefault:r   r   =z#Malformed instrumentation option: ''metric_typecyclebuffer_typesharedbuffer_strategycircularbuffer_size0granularitywarpsampling_strategynonesampling_options optimizations)rO   rQ   rS   rU   rW   rY   r[   r]   c                 b    |          }|r||vrt          d|  d|           |r||         n|S )NzUnknown z: )
ValueError)opt_namemappingvalueoptionss      r   get_option_valuez)_interpret_mode.<locals>.get_option_value[   sQ    ! 	=U'));;;E;;<<<!&1wu~~E1r   c                 6    g | ]}|                                 S r6   )strip.0rb   s     r   
<listcomp>z#_interpret_mode.<locals>.<listcomp>h   s6     A A A {{}} A A Ar   ,zUnknown optimization: c                 2    g | ]}t           j        |         S r6   )r   r]   rg   s     r   ri   z#_interpret_mode.<locals>.<listcomp>m   s     NNNe 25 9NNNr   mmazUnknown mode: r6   )
isinstancer   InstrumentationModesplitr_   getr5   metric_typesbuffer_typesbuffer_strategiesgranularitiessampling_strategieslenr]   DefaultMMA)rH   parts	mode_nameoptsoptkeyvalrd   valuesrb   rc   s             @r   _interpret_moder   B   s   (D455  NN3EaIDQRRy K K#::yya((HCDIII3IIIJJJ xxw77Q^`hHiHi88$5zBBSVW[W_W_`morWsWsStStxxv66TXXVikqMrMr HH%7<<txxXgikOlOl	 G2 2 2 2 2 .-mT=NOOGM--mT=NOOGM!1!12CTE[!\!\G--mT=OPPGM#3#34GIa#b#bG  EHP_H`DaDadeDeDeA A#O4::3??A A A Akm  ? ?***=e==>>> +NNvNNNGO I|&&g&&&	e		x""'"""4(44555r   c                      t           j        j        j                                        j        } | dk    rdS | dk    rdS t          d|            )Nr$   r
   hipr	   zUnsupported backend: )tritonruntimedriveractiveget_current_targetbackendr)   )r   s    r   _get_backend_namer   x   sU    n#*==??GG&x	E		u<7<<===r   c                      e Zd ZU dZeed<   dZeed<   dZeed<   dZ	e
e         ed<   dZeed	<   d
Zeed<   dedeej        f         fdZd Zd Zdedededeeef         deddfdZdefdZdeddfdZdeddfdZdeddfdZdS )InstrumentationHookr   priorityactive_countFenable_host_bufferNhost_bufferr   r+      r(   rH   c                 r    t          |          | _        t          |           | _        d | _        i | _        d S r   )r   r   r   	allocatorr/   metadata_path)r   rH   s     r   r   zInstrumentationHook.__init__   s5    .=h.G.G	&t,,79r   c                     t           j        dk    rt          d          t           xj        dz  c_        t                       t          j        j        j                                        t          j        j        j        j	        
                              d         t                       fdfdt          fdfdd	          t                   j        _        t!           j                   t$          j         j        t+          j                  fd
            }|t$          _        d S )Nr   zFOnly one instance of the instrumentation hook can be active at a time.r   max_shared_memc                 f   t           j        j        j         j        v rdnd}t	          j        | j         j        j         j        j         j        j         j	        j         j
        j         j        j         j        j        j        |           t          j                            |            t           j        j        j         j        v rt	          j        |            t	          j        |            t           j        j        j         j        v rdk    rt	          j        |            d S d S d S )NFTr	   )r   OptimizeCLOCK32r]   rE   add_convert_proton_to_protongpurO   rY   r[   rW   rS   rQ   rU   r+   r(   triton_passescommonadd_cseSCHED_STORESadd_schedule_buffer_store!add_allocate_proton_shared_memorySCHED_BARRIERSadd_sched_barriers)rA   is_long_clkbackend_namer   r   s     r   to_llvmir_passesz6InstrumentationHook.activate.<locals>.to_llvmir_passes   s   #'=#8DI<S#S#S%%Y]K9"di>SUYU^Up:>):TVZV_Vk:>):SUYU^Uj:>):OQ_:>:RTXTq:EG G G  ((,,,})TY-DDD7;;;;B???}+ty/FFF<[`K`K`044444 GFK`K`r   c                 <   t          j        |            dk    rt          j        |            d S dk    rdt          j        j        j        j                                      d         	                    d          d         }t          j
        | |           d S d S )Nr
   r	   archrL   r   )rE   )add_allocate_proton_global_scratch_buffer%add_convert_proton_nvidia_gpu_to_llvmr   r   r   r   utilsget_device_propertiesro   "add_convert_proton_amd_gpu_to_llvm)rA   r   r   r'   s     r   to_llvm_passesz4InstrumentationHook.activate.<locals>.to_llvm_passes   s    CBGGGx''CBGGGGG&&~,39OOPVWWX^_eefijjklm@TJJJJJ '&r   c                      |           S r   r6   )rA   r   s    r   <lambda>z.InstrumentationHook.activate.<locals>.<lambda>   s    ''++ r   c                      |           S r   r6   )rA   r   s    r   r   z.InstrumentationHook.activate.<locals>.<lambda>   s    ~~b)) r   )ttgpuir_to_llvmirllvmir_to_llvmc                 @    t                    |d<    | g|R i |S )Ninstrumentation_mode)rG   )r   argskwargsoriginal_modeoriginal_runs      r   instrumented_runz6InstrumentationHook.activate.<locals>.instrumented_run   s6    -0-?-?F)*<6t666v666r   )r   r   r)   r   r   r   r   r   get_current_devicer   r   r   r8   r   compilerinstrumentationr   r   r   runr   	functoolswraps)	r   r   r   r'   r   r   r   r   r   s	   ` @@@@@@@r   activatezInstrumentationHook.activate   sx   +a//ghhh((A-((   &-@@BB.5;QQRXYYZjk(**	5 	5 	5 	5 	5 	5 	5$	K 	K 	K 	K 	K 	K ;J++++))))	K
 K
 ; ;'7 	dn---"			&	&	7 	7 	7 	7 	7 
'	&	7 +r   c                    t           j        dk    rd S t           xj        dz  c_        t                      }i t          |         j        _        t                       t          t          j	        d          rt          j	        j
        t          _	        t          t                                 t           j        rd t           _        d | _        d S )Nr   r   __wrapped__)r   r   r   r   r   r   r   hasattrr   r   r   r   r   r   r   r/   )r   r   s     r   
deactivatezInstrumentationHook.deactivate   s    +q00F((A-(((** ;='7 	 !!! ;?M22 	:)o9KO 	moo... 1 	3.2+ r   modulefunctionnamemetadata_grouphashrI   c                    |sd S t          d |                                D             d           }t          d |                                D             d           }|| j        |<   |rt          j                    }t          j        |           t                      }	|	dk    rt          j        |           n|	dk    rt          j        |           t          j        |           t          j
        ||          }||_        t          j        |          }
t          j        |          }t          j        |||
||           d S t          d|           )Nc              3   J   K   | ]\  }}|                     d           |V  dS )ttgirNendswithrh   r}   paths      r   	<genexpr>z2InstrumentationHook.init_handle.<locals>.<genexpr>   s8      ``dV]H_H_```````r   c              3   J   K   | ]\  }}|                     d           |V  dS )jsonNr   r   s      r   r   z2InstrumentationHook.init_handle.<locals>.<genexpr>   s8      eeysDcll\bNdNdedeeeeeer   r
   r	   z+IR path not found in metadata for function )nextitemsr   	triton_irrB   r@   r   triton_nvidia
triton_amdrE   parse_mlir_moduleget_scope_id_namesget_scope_id_parents	libprotoninit_function_metadatar)   )r   r   r   r   r   r   ir_pathr   rB   r   scope_id_namesscope_id_parentss               r   init_handlezInstrumentationHook.init_handle   se    	F ``n.B.B.D.D```bfggeeN4H4H4J4Jeeegkll'48$ 	Y'))G#G,,,,..Lx''+G4444&&(111'0000'BBF$FN*=fEEN,A&II,Xt^M]_lmmmmmWXWWXXXr   c                 F    | j         dn| j                                         S )Nr   )r/   data_ptr)r   s    r   	_data_ptrzInstrumentationHook._data_ptr  s!    K'qqT[-A-A-C-CCr   metadatac                 l   |j                             d          }|j                             d          }| j        dn2| j                                        | j                                        z  }t          j        |||                                 |           t          j	        rd t          _
        d S d S Nr   r"   r   )datarp   r/   element_sizenumelr   enter_instrumented_opr   r   r   r   r   r   r=   r"   
alloc_sizes        r   enterzInstrumentationHook.enter	  s    }  ,,""8,,+-QQ4;3K3K3M3MPTP[PaPaPcPc3c
'dnn6F6F
SSS1 	3.2+++	3 	3r   c                 ~   |j                             d          }|j                             d          }| j        dn2| j                                        | j                                        z  }t          j        |||                                 |           t          j	        r| 
                    |           d S d S r   )r   rp   r/   r   r   r   exit_instrumented_opr   r   r   _populate_host_bufferr   s        r   exitzInstrumentationHook.exit  s    }  ,,""8,,+-QQ4;3K3K3M3MPTP[PaPaPcPc3c
&vtT^^5E5EzRRR1 	-&&t,,,,,	- 	-r   c           
         |r| j         |         rdd l}dd l}dd l}dt          t
          t          f         dt          fd}| j        dn2| j        	                                | j        
                                z  }| j        j                                                            d          }i }t          | j         |         d          5 }	|                    |	          }d d d            n# 1 swxY w Y    ||d                   }
|d         }|d         }| j        j        t$          j        j        k    r|nt+          |          }t          ||z            }| j        j        d	k    o| j        j        t$          j        j        k    }|rd
 t3          |          D             }nd |D             }d|dz  z   }d}|}|}t4          |||||
||||g
|} |j        dt+          |          z  g|R  }|                    ||z   |j        d          t<          _        t<          j        d |         }|                     |!                    tE          |          |j                             t<          j        |d          #                    | j                  }|                     | j        $                                           d S d S d S )Nr   targetrI   c                 >    | d         dk    rdS | d         dk    rdS dS )Nr   r$   r   r   r   r   r6   )r   s    r   encode_targetz@InstrumentationHook._populate_host_buffer.<locals>.encode_target   s1    )$..1I&%//1qr   rj   rprofile_scratch_size	num_warpsr\   c                     g | ]}|S r6   r6   rh   is     r   ri   z=InstrumentationHook._populate_host_buffer.<locals>.<listcomp>V  s    8881888r   c                 ,    g | ]}t          |          S r6   )r5   r   s     r   ri   z=InstrumentationHook._populate_host_buffer.<locals>.<listcomp>X  s    999a3q66999r   (      Icpur%   )r&   )%r   r,   structr   r   rG   r   r5   r/   r   r   r   r[   rf   ro   openloadrY   rE   SAMPLING_STRATEGYNONErv   rW   GRANULARITYWARPrangeVERSIONpackr-   r.   r   r   copy_tensorlistview_asr   )r   r   r,   r  r   r   r   sampled_warpsr   filedevice_typescratch_mem_size
total_unituid_num	block_numis_all_warpsuid_vecheader_sizeheader_offsetpayload_offsetpayload_sizeheader_valuesheader_bytesconfig_portiondata_portions                            r   r   z)InstrumentationHook._populate_host_buffer  s6    M	2*84 M	2LLLMMMKKKd38n      #k1t{7O7O7Q7QTXT_TeTeTgTg7gJ I6<<>>DDSIIMDd(2C88 'Dyy' ' ' ' ' ' ' ' ' ' ' ' ' ' ' (-X77K#$:;k*J$(I$?=CbCg$g$gjjmpn nGJ)99::IB  95;w	@UYfYrYw@wL :88eJ&7&788899=999w{*KM(N%L^\S^`iku ',3M '6;sS-?-?'?P-PPPL.3kk+
:RZ_Zensk.t.t+0<\k\JN  d<.@.@!T!TUUU.:;<<HPPQUQ\]]Lt{0011111[M	2 M	2 M	2 M	2s   C..C25C2)r2   r3   r4   r   r5   __annotations__r   r   boolr   r   r   r+   r(   r   rG   r   rn   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   r      s        HcL#$$$$!%K#%%%    $'c''':tS$2J'J!K : : : :9+ 9+ 9+v  8Y# Y YC YQUVY[^V^Q_ Ygj Yos Y Y Y Y6D3 D D D D3h 34 3 3 3 3-X -$ - - - -N2c N2d N2 N2 N2 N2 N2 N2r   r   ),r   typingr   r   r   r   r   triton._C.libtritonr   r   r   rE   r	   r   r
   r   r   r   triton._C.libprotonr   triton.compilerr   triton.runtime.jitr   triton.runtime._allocationr   r   triton.backendsr   hookr   flagsr   r   r\   r   r	  r   r8   rG   rn   r   r   r   r6   r   r   <module>r+     s       - - - - - - - - - - - -  / / / / / / 7 7 7 7 7 7 1 1 1 1 1 1 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3 $ $ $ $ $ $ * * * * * * K K K K K K K K $ $ $ $ $ $       C C C C C C C C              .) ) ) ) ) ) ) )&36eC)A$AB 36tG_ 36 36 36 36l>3 > > > >f2 f2 f2 f2 f2$ f2 f2 f2 f2 f2r   