+
    –°³j½Þ  ã                  óª  a € 0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHtHt ^ RIHtHtHt ^ RIHtHtHtHt ^ RI H!t!H"t"H#t# ^ RI$H%t% ^ RI&t&^ RI't&^ RI(H)t) ^ R	I*H+t+ ^ R
I,H-t- ^ RI.H/t/H0t0H1t1H2t2H3t3H4t4H5t5 ^ RI6H7t7 ^ RI8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@ ^ RIAHBtB ^ RICHDtD ]E! ]PŒ                  P�                  RR4      4      tH]#'       d   ^ RIIHJtJ ^ RIKHLtLHMtMHNtN ^RIOHPtP ^RIQHRtR ^RISHTtT RtURRRR/tVRdR R lltW]B! ]XR4      tY ! R R]Z4      t[R  R! lt\Rs]R"]^R#&   R$ R% lt_R& R' lt` ! R( R)4      ta ! R* R+4      tb]-PÆ                  ]-PÈ                  ,          te]PÌ                   ! R, R-4      4       tg]PÌ                   ! R. R/4      4       th ! R0 R1]h4      ti ! R2 R34      tj]; ! R4 R54      4       tk ! R6 R74      tl ! R8 R94      tm ! R: R;4      tn ! R< R=]h4      to ! R> R?]m]o4      tp ! R@ RA]n]o4      tq ! RB RC]h4      tr ! RD RE]m]r4      ts ! RF RG]n]r4      tt ! RH RI]h4      tu ! RJ RK]m]u4      tv ! RL RM]n]u4      tw ! RN RO]m]h4      tx ! RP RQ]n]h4      ty ! RR RS]m]h4      tz]Pö                  RT RU l4       t|RV RW lt} ! RX RY4      t~RZ R[ ltR\ R] lt€R^ R_ lt� ! R` Ra4      t‚ ! Rb Rc4      tƒR# )eé    )ÚannotationsN)ÚCallableÚIterableÚSequence)ÚFutureÚProcessPoolExecutorÚThreadPoolExecutor)ÚbyrefÚc_size_tÚc_void_pÚCDLL)ÚAnyÚIOÚTYPE_CHECKING)Úoverride)Úget_interface_for_device)Úrand_strided)Úir)ÚCppCodeCacheÚCUDACodeCacheÚ
DLLWrapperÚget_hashÚPyCodeCacheÚwriteÚXPUCodeCache)ÚTimer)Úapply_subprocess_envÚclear_cachesÚclear_on_fresh_cacheÚdo_bench_using_profilingÚget_gpu_typeÚget_ld_library_pathÚis_gpuÚpython_subprocess_env)ÚgetArtifactLogger)Ú
OrderedSetÚ.TORCHINDUCTOR_AUTOTUNE_POOL_INACTIVITY_TIMEOUTÚ600)Ú
ModuleType)ÚChoiceCallerÚPartialRenderÚTritonTemplateCaller)Úconfig)Úbenchmarker)ÚVÚCUDA_VISIBLE_DEVICESÚcudaÚxpuÚZE_AFFINITY_MASKc               ó    € V ^8„  d   QhRRRR/# )é   Úgpu_typeú
str | NoneÚreturnÚstr© )Úformats   "Úa/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/autotune_process.pyÚ__annotate__r=   T   s   € ÷ 2ñ 2¨*ð 2Àñ 2ó    c                ój   € V f   \        4       p V \        9  d   \        RV  24      h\        V ,          # )NzUnsupported gpu_type: )r!   Ú_visible_device_env_var_mapsÚ
ValueError)r6   s   &r<   Úget_visible_devices_env_varrB   T   s6   € ØÒÜ“>ˆØÔ3Ô3ÜÐ1°(°Ð<Ó=Ð=Ü'¨Õ1Ð1r>   Ú
autotuningc                  ó   € ] tR t^_tRtR# )Ú!NonzeroWorkspaceNotSupportedErrorr:   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r:   r>   r<   rE   rE   _   ó   † Ûr>   rE   c               ó   € V ^8„  d   QhRR/# )r5   r8   údict[str, str | None]r:   )r;   s   "r<   r=   r=   c   s   € ÷ 4ñ 4Ð#8ñ 4r>   c                 ór   € R R.p V  Uu/ uF"  q\         P                  P                  V4      bK$  	  up# u upi )ÚTORCHINDUCTOR_CACHE_DIRÚTRITON_CACHE_DIR)ÚosÚenvironÚget)Úenv_varsÚvs     r<   Ú_cache_env_for_subprocessrW   c   s5   € Ø)Ð+=Ð>€HÙ*2Ó3©( QŒr�z‰z�~‰~˜aÓ Ò ©(Ñ3Ð3ùÒ3s   ‰(4údict[str, str | None] | NoneÚ_last_applied_cache_envc               ó    € V ^8„  d   QhRRRR/# )r5   Ú	extra_envrX   r8   ÚNoner:   )r;   s   "r<   r=   r=   k   s   € ÷ $ñ $Ø+ð$à	ñ$r>   c                ór   € V f   R # V \         8w  d   \        4        V P                  4       s \        V 4       R # ©N)rY   r   Úcopyr   ©r[   s   &r<   Ú&_apply_subprocess_env_and_clear_cachesra   k   s0   € ð
 ÒÙàÔ+Ô+ÜŒØ"+§.¡.Ó"2ÐÜ˜Ö#r>   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r5   ÚfnzCallable[..., Any]r[   rN   Úargsr   Úkwargsr8   r:   )r;   s   "r<   r=   r=   y   s:   € ÷ ñ Øðà$ðð ðð ð	ð
 	ñr>   c                ó(   € \        V4       V ! V/ VB # r^   )ra   )rc   r[   rd   re   s   &&*,r<   Ú_run_with_subprocess_envrg   y   s   € ô +¨9Ô5ÙˆtÐ�vÑÐr>   c                  óÞ   € ] tR t^ƒtRt]R R l4       t]RR R ll4       t]R R l4       tR	 R
 lt	R t
R R ltRR R lltRR R lltRR R lltR R ltR R ltR R ltR R ltRtR# ) ÚTuningProcessz>
Class to launch and interact with a benchmarking subprocess.
c               ó$   € V ^8„  d   QhRRRRRR/# )r5   Ú	read_pipeú	IO[bytes]Ú
write_piper8   r\   r:   )r;   s   "r<   r=   ÚTuningProcess.__annotate__‰   s!   € ÷ ñ  	ð °yð ÀTñ r>   c                óê   a a€ \         P                  R\        P                  ! 4       \        P                  P                  \        4       4      4       V V3R lp V! 4        R#   \         d     R# i ; i)z$
Entry point for the child process.
z3Started autotune subprocess %s. Visible devices: %sc                 óÊ   <€  \         P                  S4      w  rV f   R#  \        V4       V ! 4       p\         P	                  VS4       KI    \         d   pTp Rp?L*Rp?ii ; i)TN)ri   Úrecvra   Ú	ExceptionÚsend)Újobr[   ÚresultÚerk   rm   s       €€r<   ÚworkloopÚ,TuningProcess.process_main.<locals>.workloop“   s]   ø€ ØÜ!.×!3Ñ!3°IÓ!>‘�Ø’;áðÜ:¸9ÔEÙ ›U�Fô ×"Ñ" 6¨:Ö6øô !ô Ø•Fûðús   ¡A ÁA"ÁAÁA"N)Úautotuning_logÚdebugrR   ÚgetpidrS   rT   rB   ÚEOFError)rk   rm   rw   s   ff r<   Úprocess_mainÚTuningProcess.process_mainˆ   sT   ù€ ô
 	×ÑØAÜ�IŠI‹KÜ�J‰J�N‰NÔ6Ó8Ó9ô	
ö	7ð	ÙŽJøÜô 	âð	ús   ÁA# Á#A2Á1A2Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r5   Úobjr   rm   rl   r[   rX   r8   r\   r:   )r;   s   "r<   r=   rn   §   s,   € ÷ ñ ØðØ'ðØ4Pðà	ñr>   c                	óV   € \         P                  ! W3V4       VP                  4        R # r^   )ÚpickleÚdumpÚflush)r€   rm   r[   s   &&&r<   rs   ÚTuningProcess.send¦   s!   € ô 	�Š�SÐ$ jÔ1Ø×ÑÖr>   c               ó    € V ^8„  d   QhRRRR/# )r5   rk   rl   r8   r   r:   )r;   s   "r<   r=   rn   ®   s   € ÷ &ñ &˜	ð & cñ &r>   c                	ó.   € \         P                  ! V 4      # r^   )r‚   Úload)rk   s   &r<   rq   ÚTuningProcess.recv­   s   € ä�{Š{˜9Ó%Ð%r>   c               ó   € V ^8„  d   QhRR/# )r5   Údeviceú
int | Noner:   )r;   s   "r<   r=   rn   ±   s   € ÷ ñ ˜zñ r>   c                	ó2   € Wn         V P                  4        R # r^   )r‹   Ústart)Úselfr‹   s   &&r<   Ú__init__ÚTuningProcess.__init__±   s   € ØŒØ�
‰
Žr>   c                óÞ  € \         P                  P                  \         P                  P                  \        4      R4      p\         P
                  ! 4       w  r#\         P
                  ! 4       w  rE\         P                  ! VR4      V n        \         P                  ! VR4      V n        \        P                  ! 4       V n        V P                  P                  V P                  \        P                  4       \        P                  VR\         P                   ! 4        2R\#        V4       2R\#        V4       2.p/ \%        4       CRRR	\'        4       R
\(        P*                  '       d   RMR/CpV P,                  e!   \#        V P,                  4      V\/        4       &   \0        P2                  ! VVW%3R7      V n        \         P6                  ! V4       \         P6                  ! V4       RV n        R# )z$
Start the benchmarking subprocess.
z__autotune_main__.pyÚwbÚrbz	--parent=z
--read-fd=z--write-fd=ÚTORCH_WARM_POOLÚ0ÚLD_LIBRARY_PATHÚ3TORCHINDUCTOR_PROFILE_WITH_DO_BENCH_USING_PROFILINGÚ1N)ÚenvÚpass_fdsT)rR   ÚpathÚjoinÚdirnameÚ__file__ÚpipeÚfdopenrm   rk   Ú	selectorsÚDefaultSelectorÚselectorÚregisterÚ
EVENT_READÚsysÚ
executabler{   r9   r$   r"   r-   Ú/profile_bandwidth_with_do_bench_using_profilingr‹   rB   Ú
subprocessÚPopenÚprocessÚcloseÚrunning)r�   ÚentryÚsubproc_read_fdÚwrite_fdÚread_fdÚsubproc_write_fdÚcmdrš   s   &       r<   rŽ   ÚTuningProcess.startµ   s{  € ô —‘—‘œRŸW™WŸ_™_¬XÓ6Ð8NÓOˆä$&§G¢G£IÑ!ˆÜ$&§G¢G£IÑ!ˆÜŸ)š) H¨dÓ3ˆŒÜŸš 7¨DÓ1ˆŒä!×1Ò1Ó3ˆŒØ�‰×Ñ˜tŸ~™~¬y×/CÑ/CÔDô �N‰NØØœŸ	š	›�}Ð%Øœ˜_Ó-Ð.Ð/Øœ#Ð.Ó/Ð0Ð1ð
ˆð
Ü#Ó%ð
ð ˜sàÔ2Ó4àAÜ×E×EÐEñ DGàñ
ˆð �;‰;Ò"Ü14°T·[±[Ó1AˆCÔ+Ó-Ñ.Ü!×'Ò'ØØØ%Ð8ô
ˆŒô
 	�Š�Ô!Ü
�ŠÐ!Ô"àˆŽr>   c               ó   € V ^8„  d   QhRR/# ©r5   r8   Úboolr:   )r;   s   "r<   r=   rn   â   s   € ÷ <ñ <�tñ <r>   c                ób   € V P                   ;'       d    V P                  P                  4       RJ # )z*
True if the subprocess is still running.
N)r®   r¬   Úpoll©r�   s   &r<   ÚaliveÚTuningProcess.aliveâ   s(   € ð �|‰|×;Ð; §¡× 1Ñ 1Ó 3°tÐ ;Ð;r>   c               ó$   € V ^8„  d   QhRRRRRR/# )r5   Úreqr   r[   rX   r8   r\   r:   )r;   s   "r<   r=   rn   è   s'   € ÷ Fñ F�sð FÐ'Cð FÈtñ Fr>   c                ó”   € V P                  4       '       g   V P                  4        \        P                  WP                  VR7       R# )z(
Push a work item to the child process.
r`   N)r¼   rŽ   ri   rs   rm   )r�   r¿   r[   s   &&&r<   ÚputÚTuningProcess.putè   s/   € ð �z‰z�|Š|Ø�J‰JŒLÜ×Ñ˜3§¡¸9ÐÖEr>   c               ó    € V ^8„  d   QhRRRR/# )r5   ÚtimeoutÚfloatr8   r   r:   )r;   s   "r<   r=   rn   ð   s   € ÷ ñ ˜5ð ¨Sñ r>   c                ó   €  V P                   P                  V4      '       g#   \        RV P                  P                   24      h\
        P                  V P                  4      w  r#\        T\        4      '       d   ThT#   \         d    T P                  4        h \         d    T P                  4        h \         d=    \        P                  RT P                  P                  4       T P                  4        h i ; i)zs
Get a response from the child process. Raises TimeoutError on timeout;
raises EOFError if the subprocess crashes.
zTimeout in autotune subprocess z.Unexpected exception in autotune subprocess %s)r¤   ÚselectÚTimeoutErrorr¬   Úpidri   rq   rk   Úkillr|   r­   rr   ry   Ú	exceptionÚ
isinstance)r�   rÄ   ru   Ú_s   &&  r<   rT   ÚTuningProcess.getð   sÍ   € ð
	Ø—=‘=×'Ñ'¨×0Ò0Ü"Ð%DÀTÇ\Á\×EUÑEUÐDVÐ#WÓXÐXÜ%×*Ñ*¨4¯>©>Ó:‰IˆFô �fœi×(Ò(ØˆLØˆøô! ô 	Ø�I‰IŒKØÜô 	à�J‰JŒLØÜô 	Ü×$Ñ$Ø@À$Ç,Á,×BRÑBRôð �I‰IŒKØð	ús   ‚ B  £AB  Â $C=Â%C=Ã =C=c               ó    € V ^8„  d   QhRRRR/# )r5   Úwaitr¸   r8   r\   r:   )r;   s   "r<   r=   rn     s   € ÷ ñ ˜Tð ¨Tñ r>   c                ó¦   € V P                  4       '       d!   \        P                  RV P                  4       V'       d   V P	                  4        R# R# )z3
Signal the child process to shut down gracefully.
N)r¼   ri   rs   rm   rÐ   ©r�   rÐ   s   &&r<   ÚshutdownÚTuningProcess.shutdown  s4   € ð �:‰:�<Š<Ü×Ñ˜t T§_¡_Ô5ßØ�I‰IŽKñ r>   c               ó   € V ^8„  d   QhRR/# ©r5   r8   r\   r:   )r;   s   "r<   r=   rn     s   € ÷ ñ �dñ r>   c                ó†   € V P                  4       '       d   V P                  P                  4        V P                  4        R# )z%
Wait for the child process to exit.
N)r¼   r¬   rÐ   r­   r»   s   &r<   rÐ   ÚTuningProcess.wait  s(   € ð �:‰:�<Š<Ø�L‰L×ÑÔØ�
‰
Žr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rn     s   € ÷ ñ �tñ r>   c                ó°   € V P                   P                  4        V P                  P                  4        V P                  P                  4        RV n        R# )z
Close resources.
FN)r¤   r­   rk   rm   r®   r»   s   &r<   r­   ÚTuningProcess.close  s;   € ð 	�‰×ÑÔØ�‰×ÑÔØ�‰×ÑÔØˆŽr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rn   %  s   € ÷ 
ñ 
�dñ 
r>   c                óÚ   € V P                  4       '       dE   \        P                  RV P                  P                  4       V P                  P                  4        V P                  4        R# )z&
Send a SIGKILL to the child process.
z)Sending SIGKILL to autotune subprocess %dN)r¼   ry   Úerrorr¬   rÉ   rÊ   r­   r»   s   &r<   rÊ   ÚTuningProcess.kill%  sH   € ð �:‰:�<Š<Ü× Ñ Ø;Ø—‘× Ñ ôð �L‰L×ÑÔØ�
‰
Žr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rn   1  s   € ÷ ñ ˜ñ r>   c                óJ   € V P                  RR7       V P                  4        R# )z(
Gracefully restarts the child process.
T©rÐ   N)rÓ   rŽ   r»   s   &r<   ÚrestartÚTuningProcess.restart1  s   € ð 	�‰˜4ˆÔ Ø�
‰
Žr>   )r‹   r¬   rk   r®   r¤   rm   r^   )g      ^@)T)rG   rH   rI   rJ   Ú__doc__Ústaticmethodr}   rs   rq   r�   rŽ   r¼   rÁ   rT   rÓ   rÐ   r­   rÊ   rã   rK   r:   r>   r<   ri   ri   ƒ   s|   † ñð ôó ðð: öó ðð ô&ó ð&õò+õZ<÷F÷÷6õõõ
÷ñ r>   ri   c                  ó`   € ] tR tRtRtR R lt]R R l4       tR R ltR	 R
 lt	R R lt
RtR# )ÚTuningProcessPooli9  zÏ
Maintains a pool of TuningProcesses to benchmark kernels in parallel
across devices. By default, we create one TuningProcess per device and
set the sub-process environment to make only that device visible.
c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   ÚTuningProcessPool.__annotate__@  s   € ÷ Eñ E˜$ñ Er>   c                ób  € V P                  4       p\        P                  RV4       V Uu. uF  p\        VR7      NK  	  upV n        \
        P                  ! 4       V n        V P                   F  pV P                  P                  V4       K   	  \        \        V4      R7      V n        R# u upi )z
Start the child processes.
z$Sub-process autotune device list: %s©r‹   ©Úmax_workersN)Úget_device_listry   rz   ri   Ú	processesÚqueueÚQueueÚprocess_queuerÁ   r	   ÚlenÚexecutor)r�   Údevicesr‹   Úps   &   r<   r�   ÚTuningProcessPool.__init__@  sŠ   € ð ×&Ñ&Ó(ˆÜ×ÑÐCÀWÔMñ FMÓMÁW¸6œ-¨v×6ÁWÑMˆŒä9>¿º»ˆÔØ—”ˆAØ×Ñ×"Ñ" 1Ö%ñ  ô +´s¸7³|ÔDˆŽùò Ns   «B,c               ó   € V ^8„  d   QhRR/# )r5   r8   zSequence[int | None]r:   )r;   s   "r<   r=   rê   T  s   € ÷ "ñ "Ð1ñ "r>   c                 óÊ  € \         P                  '       g   R.# \        4       p \        V 4      pVP	                  4       p\        V 4      pV\        P                  9   dn   \        P                  V,          P                  R4       Uu. uF  p\        V4      NK  	  pp\        V4      V8:  g   \        V R\        V4       RV R24      hV# \        \        V4      4      # u upi )z4
Gather the list of devices to be used in the pool.
NÚ,z specifies z devices, but only z devices are available)r-   Úautotune_multi_devicer!   r   Údevice_countrB   rR   rS   ÚsplitÚintrô   ÚAssertionErrorÚlistÚrange)r6   Údevice_interfaceÚcountÚvisible_devices_env_varÚdrö   s         r<   rï   Ú!TuningProcessPool.get_device_listS  sØ   € ô
 ×+×+Ð+à�6ˆMä“>ˆÜ3°HÓ=ÐØ ×-Ñ-Ó/ˆÜ"=¸hÓ"GÐð #¤b§j¡jÔ0Ü')§z¡zÐ2IÕ'J×'PÑ'PÐQTÔ'UÓVÑ'U !”s˜1–vÑ'UˆGÐVÜ�w“< 5Ô(Ü$Ø.Ð/¨{¼3¸w»<¸.ð I Ø %˜wÐ&<ð>óð ð ˆNä”E˜%“LÓ!Ð!ùò Ws   ÂC c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rê   m  s   € ÷ 	ñ 	˜$ñ 	r>   c                óÊ   € V P                   P                  4        V P                   F  pVP                  RR7       K  	  V P                   F  pVP                  4        K  	  R# )z%
Signal all child processes to exit.
Frâ   N)rõ   rÓ   rð   rÐ   )r�   r÷   s   & r<   rÓ   ÚTuningProcessPool.shutdownm  sG   € ð 	�‰×ÑÔ à—”ˆAØ�J‰J˜EˆJÖ"ñ  à—”ˆAØ�F‰FŽHó  r>   c               ó    € V ^8„  d   QhRRRR/# )r5   Úchoicer,   r8   rÅ   r:   )r;   s   "r<   r=   rê   x  s   € ÷ ),ñ ),Ð1ð ),°eñ ),r>   c                ó"  € VP                   f   \        RV R24      h\        4       pV P                  P	                  4       pVP                  VP                   P                  VR7        VP	                  \        P                  4      V P                  P                  V4       #   \         dD    \        P                  ! RT R24       \        R4      u T P                  P                  T4       # \         dt   p\        P                  ! RT R24       \        T4      pR	T9   g   R
T9   d   TP                  4        \        R4      u Rp?T P                  P                  T4       # Rp?ii ; i  T P                  P                  T4       i ; i)zÀ
Entry point for the thread-pool helper threads: Wait for an open TuningProcess,
remove it from the queue, execute the benchmark in that subprocess, and return
the TuningProcess to the queue.
Nz:Expected choice.bmreq to be set, but got None for choice 'Ú'r`   zTimed out benchmarking choice 'z['. It will be ignored. Please debug the root cause in case the choice can bring perf gains.ÚinfzFailed to benchmark choice 'ÚcudaErrorLaunchFailureÚcudaErrorIllegalAddress)Úbmreqr   rW   ró   rT   rÁ   Ú	benchmarkr-   Ú+max_autotune_subproc_result_timeout_secondsrÈ   ÚwarningsÚwarnrÅ   rr   r9   rã   )r�   r  r[   r¬   Úprocess_exceptionÚ	error_msgs   &&    r<   ÚtargetÚTuningProcessPool.targetx  sh  € ð �<‰<ÒÜ ØLÈVÈHÐTUÐVóð ô .Ó/ˆ	Ø×$Ñ$×(Ñ(Ó*ˆØ�‰�F—L‘L×*Ñ*°iˆÔ@ð	,Ø—;‘;Ü×BÑBóð4 ×Ñ×"Ñ" 7Õ+øô/ ô 	 Ü�MŠMØ1°&°ð :Wð Wôô
 ˜“<Ñð" ×Ñ×"Ñ" 7Õ+ô! ô 	 Ü�MŠMØ.¨v¨hð 7Wð Wôô Ð-Ó.ˆIà(¨IÔ5Ø,°	Ô9à—‘Ô!ä˜“<Ôà×Ñ×"Ñ" 7Õ+ûð!	 ûð  ×Ñ×"Ñ" 7Õ+úsC   Á*B$ Â$0E.ÃE1 Ã1E.Ã:E.Ã;AE)ÅE.Å	E1 Å)E.Å.E1 Å1Fc               ó    € V ^8„  d   QhRRRR/# ©r5   Úchoiceszlist[TritonTemplateCaller]r8   z!dict[TritonTemplateCaller, float]r:   )r;   s   "r<   r=   rê   £  s   € ÷ ñ à+ðð 
+ñr>   c           	     óv   € \        \        WP                  P                  V P                  V4      4      4      pV# )z.
Benchmark each choice in a separate process.
)ÚdictÚziprõ   Úmapr  )r�   r  Úresultss   && r<   r  ÚTuningProcessPool.benchmark£  s-   € ô ”s˜7§M¡M×$5Ñ$5°d·k±kÀ7Ó$KÓLÓMˆàˆr>   )rõ   ró   rð   N)rG   rH   rI   rJ   rå   r�   ræ   rï   rÓ   r  r  rK   r:   r>   r<   rè   rè   9  s6   † ñõEð& ô"ó ð"õ2	õ),÷Vñ r>   rè   c                  óz   € ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
]R&   RtR]R&   ]R R l4       tR R ltRt	R# )Ú
TensorMetaiµ  ztorch.devicer‹   ztorch.dtypeÚdtypeztorch._prims_common.ShapeTypeÚsizesztorch._prims_common.StrideTypeÚstridesrÿ   ÚoffsetNr7   Únamec               ó    € V ^8„  d   QhRRRR/# )r5   Úirnodesz)LayoutOrBuffer | Sequence[LayoutOrBuffer]r8   úTensorMeta | list[TensorMeta]r:   )r;   s   "r<   r=   ÚTensorMeta.__annotate__¿  s   € ÷ &
ñ &
Ø?ð&
à	&ñ&
r>   c           
     	ó  € ^ RI Hp \        V\        4      '       d›   V Uu. uF  q0P	                  V4      NK  	  pp\
        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g@   \        RV Uu. uF&  p\        V\        4      '       d   K  \        V4      NK(  	  up 24      hV# Tp\        V\        P                  4      '       d   \        P                  ! RVR7      pVP                  4       pVf   \        RV R	24      hVP                  4       pVf   \        R
V R	24      h\        VV\        P                  P                   P#                  VP%                  4       4      \        P                  P                   P#                  V! V4      4      \        P                  P                   P'                  VP)                  4       P*                  4      VP-                  4       R7      # u upi u upi )r   )Ú#get_strides_with_layout_constraintsc              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5ir^   )rÌ   r%  ©Ú.0Úxs   & r<   Ú	<genexpr>Ú*TensorMeta.from_irnodes.<locals>.<genexpr>Æ  s   é € ÐA¹&°Q”z !¤Z×0Ð0»&ùs   ‚FTz3Expected all elements to be TensorMeta, got types: Úfake)r*  ÚlayoutzGExpected node to have a dtype, but get_dtype() returned None for node 'r  zIExpected node to have a device, but get_device() returned None for node ')r‹   r&  r'  r(  r)  r*  )Ú torch._inductor.select_algorithmr0  rÌ   r   Úfrom_irnodesÚallr   r%  Útyper   ÚLayoutÚBufferÚ	get_dtypeÚ
get_devicer/   ÚgraphÚsizevarsÚoptimization_hintsÚget_sizeÚoptimization_hintÚ
get_layoutr)  Úget_name)Úclsr,  r0  r4  ru   Únoder&  r‹   s   &&      r<   r:  ÚTensorMeta.from_irnodes¾  s¥  € õ 	Yä�gœx×(Ò(Ù>EÓ F¹g¸×!1Ñ!1°!Ö!4¹gˆFÐ Fß“3ÑA¹&ÓA—3—3’3ÑA¹&ÓA×AÒAÜ$ØIÙ)/ÓQ© A´zÀ!ÄZ×7Pœœ˜Qž©ÑQÐRðTóð ð ˆMàˆÜ�dœBŸI™I×&Ò&Ü—9’9 &°Ô6ˆDà—‘Ó ˆØŠ=Ü ØYÐZ^ÐY_Ð_`Ðaóð ð —‘Ó"ˆØŠ>Ü Ø[Ð\`Ð[aÐabÐcóð ô ØØÜ—'‘'×"Ñ"×5Ñ5°d·m±m³oÓFÜ—G‘G×$Ñ$×7Ñ7Ù3°DÓ9óô —7‘7×#Ñ#×5Ñ5°d·o±oÓ6G×6NÑ6NÓOØ—‘“ô	
ð 		
ùò/ !Gùò Rs   ¡G7Â G<
ÂG<
c               ó   € V ^8„  d   QhRR/# )r5   r8   útorch.Tensorr:   )r;   s   "r<   r=   r.  ç  s   € ÷ 
ñ 
˜<ñ 
r>   c                	ó†   € \        V P                  V P                  V P                  V P                  V P
                  R 7      # ))r‹   r&  Ú
extra_size)r   r'  r(  r‹   r&  r)  r»   s   &r<   Ú	to_tensorÚTensorMeta.to_tensorç  s2   € ÜØ�J‰JØ�L‰LØ—;‘;Ø—*‘*Ø—{‘{ô
ð 	
r>   r:   )
rG   rH   rI   rJ   Ú__annotations__r*  Úclassmethodr:  rO  rK   r:   r>   r<   r%  r%  µ  sF   ‡ àÓØÓØ(Ó(Ø+Ó+ØƒKØ€Dˆ*Óàô&
ó ð&
÷P
ñ 
r>   r%  c                  óf   € ] tR tRtRtR R ltR R ltR R ltR	R
/R R lltR	R
/R R llt	Rt
R
# )ÚBenchmarkRequestiñ  a  
Only handle triton template benchmark for now. The extern kernel benchmark
can be done inside the same process since they usually don't cause crash.

Important: Instances of this class and subclasses have to be serializable
across process boundaries. Do not put CUDA Tensors in here!
c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r5   Úkernel_namer9   Úinput_tensor_metar-  Úoutput_tensor_metaÚ
extra_argsúIterable[Any]r8   r\   r:   )r;   s   "r<   r=   ÚBenchmarkRequest.__annotate__û  s<   € ÷ !/ñ !/àð!/ð 9ð!/ð :ð	!/ð
 "ð!/ð 
ñ!/r>   c                	ó¢  a€ Wn         \        V\        4      '       d
   V.V n        MW n        S'       d‡   \        S\        \
        34      '       dk   \        S4      ^8”  dL   \        ;QJ d    V3R lS 4       F  '       d   K   RM	  RM! V3R lS 4       4      '       g   \        R4      hS^ ,          V n	        MSV n	        W@n
        RV n        R# )é   c              3  ót   <"  € T F-  pR F$  p\        S^ ,          V4      \        W4      8H  x € K&  	  K/  	  R# 5i)r‹   N)r‹   r&  r'  r(  r)  )Úgetattr)r3  r4  ÚattrrX  s   &  €r<   r5  Ú,BenchmarkRequest.__init__.<locals>.<genexpr>  s=   øé € ð á/˜Û Q˜ô Ð.¨qÕ1°4Ó8¼GÀAÓ<LÖLá Qñ MÛ/ùs   ƒ58FTzfAll output tensor metas in a Grouped GEMM must have matching device, dtype, sizes, strides, and offsetN)rV  rÌ   r%  rW  Útupler  rô   r;  r   rX  rY  Úbenchmark_with_cudagraphs)r�   rV  rW  rX  rY  s   &&&f&r<   r�   ÚBenchmarkRequest.__init__û  s·   ø€ ð 'ÔäÐ'¬×4Ò4Ø8IÐ7JˆDÕ"à7HÔ"ç¤*Ð-?Ä%ÌÀ×"OÒ"OÜÐ%Ó&¨Ô*ç“sô á/ó—s—s’sô á/ó÷ ò ô
 )ðDóð ð '9¸Õ&;ˆDÕ#ð 3EˆDÔ#à$ŒØ).ˆÖ&r>   c               ó$   € V ^8„  d   QhRRRRRR/# ©r5   Úinput_tensorsrL  Úoutr8   zCallable[[], None]r:   )r;   s   "r<   r=   r[    s$   € ÷ "ñ "Ø*ð"Ø1=ð"à	ñ"r>   c               	ó   € \         hr^   ©ÚNotImplementedError©r�   rh  rg  s   &$*r<   Úmake_run_fnÚBenchmarkRequest.make_run_fn  s
   € ô "Ð!r>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   r[  #  s   € ÷ ñ  ñ r>   c                	ó   € R # r^   r:   r»   s   &r<   Úcleanup_run_fnÚBenchmarkRequest.cleanup_run_fn#  s   € Ùr>   rh  Nc               ó$   € V ^8„  d   QhRRRRRR/# ©r5   rg  rL  rh  útorch.Tensor | Noner8   rÅ   r:   )r;   s   "r<   r=   r[  &  s*   € ÷ "ñ "ð %ð"ð !ð	"ð
 
ñ"r>   c               	ó   € \         hr^   rj  ©r�   rc   rh  rg  s   &&$*r<   Údo_benchÚBenchmarkRequest.do_bench&  s
   € ô "Ð!r>   c               ó$   € V ^8„  d   QhRRRRRR/# rt  r:   )r;   s   "r<   r=   r[  .  s(   € ÷ 5"ñ 5"à$ð5"ð !ð5"ð 
ñ	5"r>   c               	ó¾  € \         P                  \        P                  4      pV'       d   \        P                  ! 4       pVf±   V P
                  '       d   V P                  '       g   \        R4      h\        V4      ^ 8X  g   \        R\        V4       24      h\        ;QJ d    . R V P
                   4       F  NK  	  5M! R V P
                   4       4      pV P                  P                  4       pV'       d2   \        P                  ! 4       X,
          p\        P                  ! 4       p  V P                  ! VRV/ pT'       d2   \        P                  ! 4       X,
          p\        P                  ! 4       pT P                   '       d   \"        P$                  ! T4      pMT P&                  ! T.TOTN5!  pT'       d6   \        P                  ! 4       X,
          p	\         P)                  RT XXT	4       TT P                  4        #   \         d4    \         P                  R4       \        R4      u T P                  4        # i ; i  T P                  4        i ; i)NzJInput and output tensor meta must be populated when input_tensors is emptyz4Expected no input_tensors when out is None, but got c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir^   )rO  r2  s   & r<   r5  Ú-BenchmarkRequest.benchmark.<locals>.<genexpr>A  s   é € Ð!PÑ9O°A§+¡+§- -Ó9Oùs   ‚rh  z0Skipping op due to nonzero workspace requirementr  z6InChildProcess %s: load %f, create tensor %f, bench %f)ry   ÚisEnabledForÚloggingÚDEBUGÚtimerW  rX  r   rô   rb  rO  rm  rE   ÚinforÅ   rq  rc  r.   Úbenchmark_gpu_with_cuda_graphrx  rz   )
r�   rh  rg  rz   Ústart_tsÚcreate_tensor_elapserc   Úload_elapseÚresÚbench_elapses
   &$*       r<   r  ÚBenchmarkRequest.benchmark.  sÚ  € ô
 ×+Ñ+¬G¯M©MÓ:ˆßÜ—y’y“{ˆHð Š;Ø×*×*Ð*¨t×/F×/FÐ/FÜ$Ø`óð ô �}Ó%¨Ô*Ü$ØJÌ3È}ÓK]ÐJ^Ð_óð ÷ "œEÑ!P¸×9OÒ9OÓ!PŸE™EÑ!P¸×9OÒ9OÓ!PÓPˆMØ×)Ñ)×3Ñ3Ó5ˆCçÜ#'§9¢9£;°Õ#9Ð Ü—y’y“{ˆHð	"ð$Ø×%Ò% }Ð>¸#Ñ>�÷ Ü"Ÿiši›k¨HÕ4�ÜŸ9š9›;�à×-×-Ð-Ü!×?Ò?ÀÓC‘à—m’m BÐ<¨Ð<¸Ó<�çÜ#Ÿyšy›{¨XÕ5�Ü×$Ñ$ØLØØØ(Ø ôð à×ÑÕ!øô3 5ô $ä×#Ñ#Ð$VÔWÜ˜U“|Ñ#ð, ×ÑÕ!ð3$ûð2 ×ÑÕ!ús=   Ä0H	 ÅI
 Å
AI
 Æ4I
 Ç6I
 È	+IÈ4I
 ÉIÉI
 É
I)rc  rY  rW  rV  rX  )rG   rH   rI   rJ   rå   r�   rm  rq  rx  r  rK   r:   r>   r<   rT  rT  ñ  s:   † ñõ!/õF"õ
ð"ð $(÷	"ð5"ð $(÷5"ó 5"r>   rT  c                  ó>   € ] tR tRtRtR
R R lltRR/R R lltR	tR# )Ú_TestBenchmarkRequestif  zƒ
Supports unit testing. Defined in this file instead of the test file so the
TuningProcess sub-process can unpickle these objects.
Nc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r5   ru   rÅ   r‹   rŒ   Úsleepzfloat | NoneÚexczException | NoneÚcrashr¸   r:   )r;   s   "r<   r=   Ú"_TestBenchmarkRequest.__annotate__l  s<   € ÷ ñ àðð ðð ð	ð
 ðð ñr>   c                	óB   € Wn         W n        W0n        W@n        WPn        R # r^   )ru   r‹   r�  rŽ  r�  )r�   ru   r‹   r�  rŽ  r�  s   &&&&&&r<   r�   Ú_TestBenchmarkRequest.__init__l  s   € ð ŒØŒØŒ
ØŒØŽ
r>   rh  c               ó$   € V ^8„  d   QhRRRRRR/# rt  r:   )r;   s   "r<   r=   r�  z  s$   € ÷ ñ Ø*ðØ1Dðà	ñr>   c               	ó$  € V P                   e€   \        4       p\        P                  P	                  VR 4      \        V P                   4      8w  d>   \        RV RV P                    R\        P                  P	                  VR 4       R24      hV P                  '       d!   \        P                  ! V P                  4       V P                  '       d   V P                  hV P                  '       d   \        P                  ! ^4       V P                  # )Nz	Expected z='z', but got 'r  )r‹   rB   rR   rS   rT   r9   r   r�  r�  rŽ  r�  r§   Úexitru   )r�   rh  rg  r  s   &$* r<   r  Ú_TestBenchmarkRequest.benchmarkz  sÇ   € ð �;‰;Ò"Ü&AÓ&CÐ#Ü�z‰z�~‰~Ð5°tÓ<ÄÀDÇKÁKÓ@PÔPÜ$ØÐ 7Ð8¸¸4¿;¹;¸-ð H Ü "§
¡
§¡Ð/FÈÓ MÐNÈaðQóð ð �:�:ˆ:Ü�JŠJ�t—z‘zÔ"Ø�8�8ˆ8Ø—(‘(ˆNØ�:�:ˆ:Ü�HŠH�QŒKØ�{‰{Ðr>   )r�  r‹   rŽ  ru   r�  )ç        NNNF©rG   rH   rI   rJ   rå   r�   r  rK   r:   r>   r<   r‹  r‹  f  s   † ñ÷
ðØGK÷ó r>   r‹  c                  ó:   € ] tR tRtRtR R ltRR/R R lltR	tR# )
Ú_TestEnvBenchmarkRequesti�  z;
Supports unit testing subprocess environment propagation.
c               ó   € V ^8„  d   QhRR/# )r5   Úkeyr9   r:   )r;   s   "r<   r=   Ú%_TestEnvBenchmarkRequest.__annotate__’  s   € ÷ ñ ˜Cñ r>   c                	ó   € Wn         R # r^   ©rœ  )r�   rœ  s   &&r<   r�   Ú!_TestEnvBenchmarkRequest.__init__’  s   € ØŽr>   rh  Nc               ó$   € V ^8„  d   QhRRRRRR/# )r5   rg  rL  rh  ru  r8   r7   r:   )r;   s   "r<   r=   r�  •  s$   € ÷ (ñ (Ø*ð(Ø1Dð(à	ñ(r>   c               	óT   € \         P                  P                  V P                  4      # r^   )rR   rS   rT   rœ  rl  s   &$*r<   r  Ú"_TestEnvBenchmarkRequest.benchmark•  s   € ô �z‰z�~‰~˜dŸh™hÓ'Ð'r>   rŸ  r˜  r:   r>   r<   rš  rš  �  s   † ñõð(ØGK÷(ó (r>   rš  c                  ól   € ] tR tRt]R R l4       t]]P                  ! R4      R R l4       4       tRt	R# )Ú_TestCodeCachei›  c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   Ú_TestCodeCache.__annotate__ž  s   € ÷  ñ  ˜Dñ  r>   c                	ó:   € V P                   P                  4        R # r^   )r   Úcache_clear©rH  s   &r<   r©  Ú_TestCodeCache.cache_clear�  s   € à�	‰	×ÑÖr>   Nc               ó    € V ^8„  d   QhRRRR/# )r5   Úsource_coder9   r8   ztuple[str, str]r:   )r;   s   "r<   r=   r§  £  s   € ÷ )ñ ) ð )¨ñ )r>   c                	ó   € \        VR 4      # )Útxt)r   )rH  r­  s   &&r<   r   Ú_TestCodeCache.write¡  s   € ô �[ %Ó(Ð(r>   r:   )
rG   rH   rI   rJ   rR  r©  Ú	functoolsÚ	lru_cacher   rK   r:   r>   r<   r¥  r¥  ›  s;   † àô ó ð ð Ø×Ò˜Óô)ó ó ô)r>   r¥  c                  ó2   € ] tR tRtRtRtRR/R R lltRtR# )	Ú_TestCodeCacheBenchmarkRequesti§  z4
Supports unit testing subprocess codecache resets.
ztest codecache contents
rh  Nc               ó$   € V ^8„  d   QhRRRRRR/# )r5   rg  rL  rh  ru  r8   r9   r:   )r;   s   "r<   r=   Ú+_TestCodeCacheBenchmarkRequest.__annotate__®  s$   € ÷ ñ Ø*ðØ1Dðà	ñr>   c               	óH   € \         P                  V P                  4      w  r4V# r^   )r¥  r   r­  )r�   rh  rg  rÍ   Ú
input_paths   &$*  r<   r  Ú(_TestCodeCacheBenchmarkRequest.benchmark®  s"   € ô '×,Ñ,¨T×-=Ñ-=Ó>‰ˆØÐr>   r:   )rG   rH   rI   rJ   rå   r­  r  rK   r:   r>   r<   r´  r´  §  s    † ñð .€KðØGK÷ó r>   r´  c                  ó*   € ] tR tRtRR/R R lltRtR# )ÚGPUDeviceBenchmarkMixiniµ  rh  Nc               ó$   € V ^8„  d   QhRRRRRR/# rt  r:   )r;   s   "r<   r=   Ú$GPUDeviceBenchmarkMixin.__annotate__¶  s*   € ÷  ñ  ð %ð ð !ð	 ð
 
ñ r>   c               	óÎ  € \        R  . VOVN 4       4      p\        V4      ^8:  g   \        RV 24      h\        R V 4       R4      p\	        V4      p\        V4      ^8X  d   \        \        V4      4      pMVP                  4       pVP                  V4      ;_uu_ 4        \        P                  ! WR7      pVP                  4        RRR4       V#   + '       g   i     X# ; i)c              3  ó  "  € T F~  p\        V\        P                  4      '       g   K%  \        VP                  P
                  4      '       g   KL  VP                  P                  f   Kf  VP                  P                  x € K€  	  R # 5ir^   )rÌ   ÚtorchÚTensorr#   r‹   r<  Úindex©r3  Útensors   & r<   r5  Ú3GPUDeviceBenchmarkMixin.do_bench.<locals>.<genexpr>¼  s^   é € ð $
á/�Ü˜&¤%§,¡,×/ô  ô �v—}‘}×)Ñ)×*ô  ð —‘×#Ñ#ô	  ˆF�M‰M×ÖÛ/ùs   ‚"B©"BÁBÁ*BzCan not mix devices c              3  óœ   "  € T FB  p\        VP                  P                  4      '       g   K*  VP                  P                  x € KD  	  R # 5ir^   )r#   r‹   r<  rÃ  s   & r<   r5  rÅ  Æ  s5   é € ð á+�FÜ˜&Ÿ-™-×,Ñ,×-ô #�—‘×"Ö"Û+ùs
   ‚'A®Ar1   rì   N)r&   rô   r   Únextr   ÚiterÚcurrent_devicer‹   r.   r  Úsynchronize)	r�   rc   rh  rg  Údevice_idx_setÚdevice_typer  Ú
device_idxr‡  s	   &&$*     r<   rx  Ú GPUDeviceBenchmarkMixin.do_bench¶  sä   € ô $ñ $
à/˜MÐ/¨3Ñ/ó$
ó 
ˆô �>Ó" aÔ'Ü Ð#7¸Ð7GÐ!HÓIÐIÜñá+óð
 ó
ˆô 4°KÓ@ÐÜˆ~Ó !Ô#Üœd >Ó2Ó3‰Jà)×8Ñ8Ó:ˆJØ×$Ñ$ Z×0Õ0Ü×'Ò'¨Ô?ˆCØ×(Ñ(Ô*÷ 1ð ˆ
÷	 1Ö0ð ˆ
ús   Â!(CÃC$	r:   ©rG   rH   rI   rJ   rx  rK   r:   r>   r<   r»  r»  µ  s   † ð ð $(÷	 ó  r>   r»  c                  ó*   € ] tR tRtRR/R R lltRtR# )ÚCPUDeviceBenchmarkMixiniÙ  rh  Nc               ó$   € V ^8„  d   QhRRRRRR/# rt  r:   )r;   s   "r<   r=   Ú$CPUDeviceBenchmarkMixin.__annotate__Ú  s*   € ÷ -ñ -ð %ð-ð !ð	-ð
 
ñ-r>   c               	ó.   € \         P                  ! V4      # r^   )r.   Úbenchmark_cpurw  s   &&$*r<   rx  Ú CPUDeviceBenchmarkMixin.do_benchÚ  s   € ô ×(Ò(¨Ó,Ð,r>   r:   rÏ  r:   r>   r<   rÑ  rÑ  Ù  s   † ð-ð $(÷	-ó -r>   rÑ  c                  ój   a € ] tR tRtRtRR V 3R lllt]R R l4       tR R ltR	 t	R
 R lt
RtV ;t# )ÚTritonBenchmarkRequestiã  zº
Represents a standalone benchmark request for a Triton Template.

Important: Instances of this class have to be serializable
across process boundaries. Do not put CUDA Tensors in here!
c                óX   € V ^8„  d   QhRRRRRRRRRRR	RR
RRRRRRRRRRRRRRRRRRR/# )r5   rV  r9   rW  r-  rX  rY  rZ  Úmodule_pathÚmodule_cache_keyÚ
num_stagesrÿ   Ú	num_warpsÚnum_consumer_groupsÚnum_buffers_warp_specÚmatrix_instr_nonkdimÚwaves_per_euÚkpackÚworkspace_sizerŒ   Úworkspace_zero_fillr¸   r8   r\   r:   )r;   s   "r<   r=   Ú#TritonBenchmarkRequest.__annotate__ë  sª   € ÷ 2ñ 2àð2ð 9ð2ð :ð	2ð
 "ð2ð ð2ð ð2ð ð2ð ð2ð !ð2ð  #ð2ð "ð2ð ð2ð ð2ð #ð2ð  "ð!2ð" 
ñ#2r>   c                	óº   <€ \         SV `  WW44       WPn        W`n        Wpn        W€n        W�n        W n        W°n        WÀn	        WÐn
        Wàn        Wðn        R V n        R # r^   )Úsuperr�   rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  Ú_benchmark_module)r�   rV  rW  rX  rY  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  Ú	__class__s   &&&&&&&&&&&&&&&&€r<   r�   ÚTritonBenchmarkRequest.__init__ë  s\   ø€ ô$ 	‰Ñ˜Ð9KÔXØ&ÔØ 0ÔØ$ŒØ"ŒØ#6Ô Ø%:Ô"Ø$8Ô!Ø(ÔØŒ
Ø,ÔØ#6Ô Ø-1ˆÖr>   c               ó$   € V ^8„  d   QhRRRRRR/# rf  r:   )r;   s   "r<   r=   rå    s)   € ÷ Sñ SØ*ðSØ1=ðSà	ñSr>   c          	     	ó:  aaa
aaaaa€ \         P                  ! V P                  V P                  R R7      pW0n        \
        P                  RV P                  V P                  4       \        W0P                  4      P                  o\        V P                  4      oV P                  e{   ^ RIHp \        P                   ! V P                  3\        P"                  SP$                  R7      pV P&                  '       d   VP)                  4        SP+                  V4      pVSV&   R SP,                  n        / o^ RIpRVP3                  S4      P4                  9   d   R SR&   SP$                  P6                  R8X  d   Ro^ o
MASP$                  P6                  p\9        V4      oV P:                  P$                  P*                  o
\=        \        W0P                  4      \        P>                  P@                  PB                  PD                  4      oR V
VVVVVVV3R	 llp	V	# )
F©Úset_sys_modulesz"benchmark module key: %s, path: %sN)ÚWORKSPACE_ARG_PLACEHOLDER©r&  r‹   ÚwarmupÚcpuc               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   Ú8TritonBenchmarkRequest.make_run_fn.<locals>.__annotate__G  s   € ÷ 	ñ 	˜ñ 	r>   c                 óš   <€ Sf   ^ MSP                  S4      p S'       d   S! . SOSNSO5/ SBRV /B  R # S! . SOSNSO5/ SBRV RR/B  R # )NÚstreamÚbenchmark_runT)Úget_raw_stream)	rö  Údevice_indexr  rY  rg  Úis_debug_autotunerrh  Ú
run_methodÚ
warmup_args	    €€€€€€€€r<   Úrun_fnÚ2TritonBenchmarkRequest.make_run_fn.<locals>.run_fnG  s    ø€ ð $Ò+ñ à%×4Ñ4°\ÓBð ÷
 "Ùð Ø"ðàðð  òð !ñ	ð
 "õñ ð Ø"ðàðð  òð !ñ	ð
 "ðð #'õr>   )#r   Úload_by_key_pathrÛ  rÚ  rè  ry   rz   r_  rV  Úrunr  rY  rã  r9  rï  rÀ  ÚemptyÚuint8r‹   rä  Úzero_rÂ  Ú__self__Úwith_bandwidth_infoÚinspectÚ	signatureÚ
parametersr<  r   rX  rÌ   Ú	_inductorÚruntimeÚtriton_heuristicsÚDebugAutotuner)r�   rh  rg  Úmodrï  Úworkspace_tensorÚworkspace_indexr  rÌ  rý  rù  r  rY  rú  rû  rü  s   &dj       @@@@@@r<   rm  Ú"TritonBenchmarkRequest.make_run_fn  s²  ÿ€ ô ×*Ò*Ø×!Ñ!Ø×ÑØ!ô
ˆð
 "%ÔÜ×ÑØ0Ø×!Ñ!Ø×Ñô	
ô ˜S×"2Ñ"2Ó3×7Ñ7ˆ
Ü˜$Ÿ/™/Ó*ˆ
ð
 ×ÑÒ*ÝRä$Ÿ{š{Ø×$Ñ$Ð&Ü—k‘kØ—z‘zô Ðð
 ×'×'Ð'Ø ×&Ñ&Ô(Ø(×.Ñ.Ð/HÓIˆOØ*:ˆJ�Ñ'à27ˆ
×ÑÔ/ð ˆ
Ûà�w×(Ñ(¨Ó4×?Ñ?Ô?Ø#(ˆJ�xÑ à�:‰:�?‰?˜eÔ#Ø#ÐØ‰LàŸ*™*Ÿ/™/ˆKÜ7¸ÓDÐØ×2Ñ2×9Ñ9×?Ñ?ˆLä'Ü�C×)Ñ)Ó*Ü�O‰O×#Ñ#×5Ñ5×DÑDó
Ð÷	÷ 	ð0 ˆr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rå  a  s   € ÷ *9ñ *9 ñ *9r>   c                	ó<  € V P                   pR V n         \        P                  P                  V P                  R 4      pVf   TpVe×   \        WP                  R 4      p\        VRR 4      pVe   V! 4        \        VRR 4      pVf   Ve
   V! R 4       MŠVf‡   \        VRR
4      ;'       g    R
 F(  p\        \        VRR 4      RR 4      pVf   K!  V! 4        K*  	  \        VRR
4      ;'       g    R
 F(  p\        \        VRR 4      RR 4      pVf   K!  V! 4        K*  	  \        P                   U	u. uF#  p	\        V	RR 4      V P                  8w  g   K!  V	NK%  	  up	\        P                  R	&   \        P                  P                  V P                  R 4       R # u up	i )NÚrelease_benchmark_artifactsÚ _release_static_launchers_exceptÚ	launchersr  r­   Úcompile_resultsÚkernelrŸ   :NNNr:   )	rè  r   Úmodules_no_attrÚpoprÚ  r_  rV  ÚmodulesÚlinemaps)
r�   r  Ú
cached_modr  r  Úrelease_static_launchersÚlauncherr­   Úcompile_resultÚmodules
   &         r<   rq  Ú%TritonBenchmarkRequest.cleanup_run_fna  sž  € ð ×$Ñ$ˆØ!%ˆÔä ×0Ñ0×4Ñ4°T×5EÑ5EÀtÓLˆ
ØŠ;ØˆCàŠ?Ü˜S×"2Ñ"2°DÓ9ˆFÜ*1ØÐ5°tó+Ð'ð +Ò6Ù+Ô-Ü'.ØÐ:¸Dó(Ð$ð ,Ò3Ø,Ò8á(¨Õ.Ø,Ò4Ü '¨°¸RÓ @× FÐ FÀBÒ F�HÜ#¤G¨H°jÀ$Ó$GÈÐRVÓW�EØÔ(Ùžñ !Gô '.¨fÐ6GÈÓ&L×&RÐ&RÐPRÒ&R�NÜ#Ü °¸$Ó?ÀÈ$ó�Eð Ô(Ùžñ 'Sô &×-Ò-ó"
á-�Ü�v˜z¨4Ó0°D×4DÑ4DÑD÷ ˆFÙ-ñ"
Œ×Ñ˜AÑô
 	×Ñ× Ñ  ×!1Ñ!1°4Ö8ùò"
s   Ä0FÅFc                	óF  €  \         P                  ! V P                  V P                  R R7      pWn        \        WP                  4      pVP                  4        VP                  ^ ,          P                  V n	        V P                  4        R#   T P                  4        i ; i)Frí  N)r   rÿ  rÛ  rÚ  rè  r_  rV  Ú
precompiler  Ún_regsrq  )r�   r  r  s   &  r<   r#  Ú!TritonBenchmarkRequest.precompile�  s�   € ð	"Ü×.Ò.Ø×%Ñ%Ø× Ñ Ø %ôˆCð
 &)Ô"Ü˜S×"2Ñ"2Ó3ˆFØ×ÑÔà ×*Ñ*¨1Õ-×4Ñ4ˆDŒKà×ÑÖ!øˆD×ÑÕ!ús   ‚A:B ÂB c               ó   € V ^8„  d   QhRR/# ©r5   r8   r9   r:   )r;   s   "r<   r=   rå  œ  s   € ÷ Uñ U˜ñ Ur>   c                	óZ   € R V P                   : RV P                  : RV P                  : 2# )úself.kernel_name=z, self.module_path=z, self.module_cache_key=)rV  rÚ  rÛ  r»   s   &r<   Ú__str__ÚTritonBenchmarkRequest.__str__œ  s2   € Ø#�$×"Ñ"Ñ$Ð$8 t×'7Ñ'7Ñ&9Ð9R¸D×<QÑ<QÑ;SÐTÐTr>   )rè  râ  rà  rÛ  rÚ  r$  rß  rÞ  rÜ  rÝ  rá  rã  rä  )r   r   r   r   r   NF)rG   rH   rI   rJ   rå   r�   r   rm  rq  r#  r*  rK   Ú__classcell__©ré  s   @r<   rØ  rØ  ã  sA   ø† ñ÷2ò 2ð@ ôSó ðSõj*9òX"÷Uó Ur>   rØ  c                  ó   € ] tR tRtRtR# )ÚTritonGPUBenchmarkRequesti   r:   NrF   r:   r>   r<   r/  r/     rL   r>   r/  c                  ó   € ] tR tRtRtR# )ÚTritonCPUBenchmarkRequesti¤  r:   NrF   r:   r>   r<   r1  r1  ¤  rL   r>   r1  c                  óz   a € ] tR tRtRtRR V 3R llltR R ltRR/R	 V 3R
 llltR R ltR t	R R lt
RtV ;t# )ÚExternKernelBenchmarkRequesti¨  a  
A class to handle extern kernel benchmark requests. This allows extern kernels
(like aten::mm) to be benchmarked in a subprocess, similar to Triton kernels.

Important: Instances of this class have to be serializable across
process boundaries. Do not put CUDA Tensors in here!
Nc               ó8   € V ^8„  d   QhRRRRRRRRRRR	R
RRRR/# )r5   rV  r9   rW  r-  rX  rY  rZ  Úcallable_pathre   zdict[str, Any] | NoneÚhas_out_variantr¸   r8   r\   r:   )r;   s   "r<   r=   Ú)ExternKernelBenchmarkRequest.__annotate__±  sZ   € ÷ /ñ /àð/ð 9ð/ð :ð	/ð
 "ð/ð ð/ð &ð/ð ð/ð 
ñ/r>   c                	ób   <€ \         SV `  WW44       WPn        T;'       g    / V n        Wpn        R # r^   )rç  r�   r5  re   r6  )	r�   rV  rW  rX  rY  r5  re   r6  ré  s	   &&&&&&&&€r<   r�   Ú%ExternKernelBenchmarkRequest.__init__±  s.   ø€ ô 	‰Ñ˜Ð9KÔXØ*ÔØ—l�l ˆŒØ.Ör>   c               ó$   € V ^8„  d   QhRRRRRR/# rf  r:   )r;   s   "r<   r=   r7  À  s$   € ÷ 	9ñ 	9Ø*ð	9Ø1=ð	9à	ñ	9r>   c               	óª   € V P                  4       pV P                  '       d   \        P                  ! V.VO5R V/ # \        P                  ! V.VO5!  # )rh  )Úto_callabler6  r±  Úpartial)r�   rh  rg  rc   s   &$* r<   rm  Ú(ExternKernelBenchmarkRequest.make_run_fnÀ  sQ   € ð ×ÑÓˆØ××Ðä×$Ò$ RÐA¨-ÒA¸SÑAÐAô ×$Ò$ RÐ8¨-Ó8Ð8r>   rh  c               ó    € V ^8„  d   QhRRRR/# )r5   rg  rL  rh  ru  r:   )r;   s   "r<   r=   r7  Ë  s   € ÷ Bñ B¨ð BÐ;Nñ Br>   c               	ó”  <aa€ Ve   VP                  4       ^ 8X  d   R# V P                  '       g   \        S4      ^ 8X  d   \        SV `  ! SRV/ # V P                  4       oS! S!  pVeu   \        P                  P                  P                  P                  V\        VP                  4       4      \        VP                  4       4      4       VP                  V4       V P                  '       d   \         P"                  ! VV3R l4      # \$        P&                  '       d   \)        VV3R l4      # \         P                  ! SS/ 4      # )Nr—  rh  c                 ó   <€ S ! S!  # r^   r:   ©Úalgorg  s   €€r<   Ú<lambda>Ú8ExternKernelBenchmarkRequest.benchmark.<locals>.<lambda>Û  s
   ø€ ™D -Ò0r>   c                 ó   <€ S ! S!  # r^   r:   rB  s   €€r<   rD  rE  Þ  s
   ø€ ¹¸mÒ8Lr>   )Únumelr6  rô   rç  r  r<  rÀ  Ú_CÚ_dynamoÚguardsÚassert_size_striderb  ÚsizeÚstrideÚcopy_rc  r.   rƒ  r-   r©   r    )r�   rh  rg  Úout_newrC  ré  s   &$j @€r<   r  Ú&ExternKernelBenchmarkRequest.benchmarkË  sü   ú€ ØŠ?˜sŸy™y›{¨aÔ/áØ××Ð¤3 }Ó#5¸Ô#:Ü‘7Ò$ mÐ=¸Ñ=Ð=à×#Ñ#Ó%ˆDÙ˜MÑ*ˆGØŠÜ—‘× Ñ ×'Ñ'×:Ñ:ØœU 3§8¡8£:Ó.´°c·j±j³lÓ0Côð —	‘	˜'Ô"Ø×-×-Ð-Ü"×@Ò@Ý0óð ô ×E×EÐEÜ/Õ0LÓMÐMÜ×(Ò(¨¨}¸bÓAÐAr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   r7  á  ó   € ÷ ñ ˜Dñ r>   c                	ó   € R # r^   r:   r»   s   &r<   r#  Ú'ExternKernelBenchmarkRequest.precompileá  ó   € ár>   c                	ó¢   € ^ RI Hp \        WP                  4      pV P                  '       d"   \
        P                  ! V3/ V P                  B # V# )r   )Úextern_kernels)r9  rW  r_  rV  re   r±  r=  )r�   rW  rc   s   &  r<   r<  Ú(ExternKernelBenchmarkRequest.to_callableå  s@   € õ 	Dä�^×%5Ñ%5Ó6ˆØ�;�;ˆ;Ü×$Ò$ RÑ7¨4¯;©;Ñ7Ð7àˆ	r>   c               ó   € V ^8„  d   QhRR/# r'  r:   )r;   s   "r<   r=   r7  ñ  s   € ÷ Eñ E˜ñ Er>   c                	ó"   € R V P                    R2# )zExternKernelBenchmarkRequest(Ú))r5  r»   s   &r<   r*  Ú$ExternKernelBenchmarkRequest.__str__ñ  s   € Ø.¨t×/AÑ/AÐ.BÀ!ÐDÐDr>   )r5  r6  re   )NT)rG   rH   rI   rJ   rå   r�   rm  r  r#  r<  r*  rK   r,  r-  s   @r<   r3  r3  ¨  sB   ø† ñ÷/ò /õ	9ðBÐQU÷ Bò Bõ,ò
÷Eó Er>   r3  c                  ó   € ] tR tRtRtR# )ÚExternKernelGPUBenchmarkRequestiõ  r:   NrF   r:   r>   r<   r^  r^  õ  ó   † ó 	r>   r^  c                  ó   € ] tR tRtRtR# )ÚExternKernelCPUBenchmarkRequestiû  r:   NrF   r:   r>   r<   ra  ra  û  r_  r>   ra  c                  óV   a € ] tR tRtRtR V 3R lltR R ltR R ltR	 R
 ltRt	V ;t
# )ÚSubgraphBenchmarkRequesti  z˜
Benchmark request for subgraph choices.

Pre-compiles the subgraph in the main process and stores
the module path/cache key for loading in subprocess.
c               ó8   € V ^8„  d   QhRRRRRRRRRRR	RR
RRR/# )r5   rV  r9   rW  r-  rX  rY  rZ  rÚ  rÛ  Úsym_input_valuesz	list[int]r8   r\   r:   )r;   s   "r<   r=   Ú%SubgraphBenchmarkRequest.__annotate__	  sZ   € ÷ 1ñ 1àð1ð 9ð1ð :ð	1ð
 "ð1ð ð1ð ð1ð $ð1ð 
ñ1r>   c                	óL   <€ \         SV `  WW44       WPn        W`n        Wpn        R # r^   )rç  r�   rÚ  rÛ  re  )	r�   rV  rW  rX  rY  rÚ  rÛ  re  ré  s	   &&&&&&&&€r<   r�   Ú!SubgraphBenchmarkRequest.__init__	  s'   ø€ ô 	‰Ñ˜Ð9KÔXØ&ÔØ 0ÔØ 0Ör>   c               ó$   € V ^8„  d   QhRRRRRR/# rf  r:   )r;   s   "r<   r=   rf    s)   € ÷ 
Eñ 
EØ*ð
EØ1=ð
Eà	ñ
Er>   c               	óŠ   aaa€ \         P                  ! V P                  V P                  R R7      oV P                  oVVV3R l# )Frí  c                 ó.   <€ SP                  . SOS O4      # r^   )Úcall)rg  r  re  s   €€€r<   rD  Ú6SubgraphBenchmarkRequest.make_run_fn.<locals>.<lambda>"  s   ø€ �s—x‘xÐ CÐ"2Ð C°]Ð CÔDr>   )r   rÿ  rÛ  rÚ  re  )r�   rh  rg  r  re  s   &$j@@r<   rm  Ú$SubgraphBenchmarkRequest.make_run_fn  s>   ú€ ô ×*Ò*Ø×!Ñ!Ø×ÑØ!ô
ˆð
  ×0Ñ0ÐæDÐDr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rf  $  rR  r>   c                	ó   € R # r^   r:   r»   s   &r<   r#  Ú#SubgraphBenchmarkRequest.precompile$  rU  r>   c               ó   € V ^8„  d   QhRR/# r'  r:   )r;   s   "r<   r=   rf  (  s   € ÷ Sñ S˜ñ Sr>   c                	ó<   € R V P                    RV P                   R2# )zSubgraphBenchmarkRequest(z, r[  )rV  rÚ  r»   s   &r<   r*  Ú SubgraphBenchmarkRequest.__str__(  s&   € Ø*¨4×+;Ñ+;Ð*<¸B¸t×?OÑ?OÐ>PÐPQÐRÐRr>   )rÛ  rÚ  re  )rG   rH   rI   rJ   rå   r�   rm  r#  r*  rK   r,  r-  s   @r<   rc  rc    s)   ø† ñ÷1ð 1õ
Eõ÷Só Sr>   rc  c                  ó   € ] tR tRtRtR# )ÚSubgraphGPUBenchmarkRequesti,  r:   NrF   r:   r>   r<   rv  rv  ,  rL   r>   rv  c                  ó   € ] tR tRtRtR# )ÚSubgraphCPUBenchmarkRequesti0  r:   NrF   r:   r>   r<   rx  rx  0  rL   r>   rx  c                  óŠ   a € ] tR tRtRtRR V 3R llltR tR R ltR R	 ltR
 t	R R lt
R R ltR R ltR R ltRtV ;t# )ÚCUTLASSBenchmarkRequesti4  aM  
A class to handle CUDA (CUTLASS) benchmark requests. This class is for
managing the lifecycle of a CUDA kernel benchmark, including compiling
the source code, managing workspace memory, and executing the kernel.

Important: Instances of this class have to be serializable across
process boundaries. Do not put CUDA Tensors in here!
c               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r5   rV  r9   rW  r-  rX  rY  rZ  r­  rÌ  r8   r\   r:   )r;   s   "r<   r=   Ú$CUTLASSBenchmarkRequest.__annotate__>  sP   € ÷ 
ñ 
àð
ð 9ð
ð :ð	
ð
 "ð
ð ð
ð ð
ð 
ñ
r>   c                	óJ  <€ \         SV `  WW44       WPn        ^ V n        RV n        RV n        RV n        RV n        RV n        W`n	        VR8X  d   \        M\        V n        \        V4      V n        V P                  P                  V P                  R4      w  V n        V n        R# )r   NFÚ r2   Úso)rç  r�   r­  rã  Ú	workspaceÚDLLÚ_workspace_size_updatedÚhash_keyÚsource_filerÌ  r   r   Úcodecache_clsr   r  r   )r�   rV  rW  rX  rY  r­  rÌ  ré  s   &&&&&&&€r<   r�   Ú CUTLASSBenchmarkRequest.__init__>  s—   ø€ ô 	‰Ñ˜Ð9KÔXØ&ÔØ#$ˆÔØ.2ˆŒØ&*ˆŒØ',ˆÔ$ØˆŒØ "ˆÔØ&ÔØ-8¸EÔ-A�\Ä}ˆÔÜ 8¸Ó EˆÔØ*.×*<Ñ*<×*BÑ*BØ×Ñ˜dó+
Ñ'ˆŒ�tÖ'r>   c                óª   € \         P                  RV 4       V P                  P                  V P                  R4       \         P                  RV 4       R# )zk
Precompile the CUDA source code to populate the CUDACodeCache.
This may happen in a separate thread pool.
úPrecompiling %sr  úDone precompiling %sN)ry   rz   r…  Úcompiler­  r»   s   &r<   r#  Ú"CUTLASSBenchmarkRequest.precompileV  sB   € ô
 	×ÑÐ.°Ô5Ø×Ñ×"Ñ" 4×#3Ñ#3°TÔ:Ü×ÑÐ3°TÖ:r>   c               ó$   € V ^8„  d   QhRRRRRR/# rf  r:   )r;   s   "r<   r=   r|  _  s$   € ÷ 6ñ 6Ø*ð6Ø1=ð6à	ñ6r>   c          	     ó
  a€ V P                  4        V P                  4        \        V4      V.,            Uu. uF  p\        VP	                  4       4      NK  	  pp\
        P                  RV P                  V P                  V P                  V P                  VV P                  4       \        V P                  P                  V P                  P                  4       4      4      p\        V P                  V P                  4      p\        ^ 4      pV P                   ^ 8”  dr   \"        P$                  ! V P                   ^,           ^,          \"        P&                  VP(                  R7      V n        \        V P*                  P	                  4       4      p\,        P.                  ! V.VOV P                  ORNVNVN5!  p V! 4        V# u upi   \0         d.   p	\3        T	4      oT3R lp
T P5                  4        T
u Rp	?	# Rp	?	ii ; i)zW
Create a function to run the CUDA/XPU kernel with the given input and output tensors.
zqmake_run_fn: self.kernel_name=%s, self.source_file=%s, self.hash_key=%s, self.DLL=%s, args=%s, self.extra_args=%srð  Nc                 ó   <€ \        S 4      hr^   )ÚRuntimeError)Úerr_msgs   €r<   Úraise_runtime_errorÚ@CUTLASSBenchmarkRequest.make_run_fn.<locals>.raise_runtime_error�  s   ø€ Ü" 7Ó+Ð+r>   )Úensure_dll_loadedÚupdate_workspace_sizer  r   Údata_ptrry   rz   rV  r„  rƒ  r�  rY  r  rø  rÉ  r_  rã  rÀ  ÚzerosÚfloat64r‹   r€  r±  r=  r�  r9   rq  )r�   rh  rg  rÄ  rd   Ú
stream_ptrrû  Úworkspace_ptrÚretrv   r‘  r�  s   &$*        @r<   rm  Ú#CUTLASSBenchmarkRequest.make_run_fn_  sÆ  ø€ ð 	×ÑÔ Ø×"Ñ"Ô$Ü:>¸}Ó:MÐQTÐPUÖ:UÓVÑ:U°”˜Ÿ™Ó*Ö+Ñ:UˆÐVÜ×ÑØØ×ÑØ×ÑØ�M‰MØ�H‰HØØ�O‰Oô	
ô Ø×!Ñ!×0Ñ0°×1FÑ1F×1UÑ1UÓ1WÓXó
ˆ
ô ˜TŸX™X t×'7Ñ'7Ó8ˆ
Ü  ›ˆØ×Ñ Ô"Ü"Ÿ[š[Ø×$Ñ$ qÕ(¨QÕ.Ü—m‘mØ—z‘zôˆDŒNô
 % T§^¡^×%<Ñ%<Ó%>Ó?ˆMô ×ÒØð
àð
ð �_‰_ð
ð ð	
ð
 ð
ð ó
ˆð		'ÙŒEð ˆ
ùò[ WøôH ô 	'Ü˜!“fˆGõ,ð ×ÑÔ!Ø&Õ&ûð	'ús#   ·"GÆ<G
 Ç
HÇ"G=Ç7HÇ=Hc               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   r|  —  s   € ÷ $,ñ $, tñ $,r>   c           
     	ó2  € V P                   '       d   R # V P                  4        \        \        P	                  R V P
                   4       4      4      p\        V^,           4       Uu. uF  p\        R 4      NK  	  pp\        V P                  P                  V P                  P                  4       4      4      p\        V P                  V P                  4      p\        4       pV! . VOV P                  O\!        V4      NR NVN5!   V P                  P#                  4        VP$                  V n        \(        P+                  RV P&                  V P                  V P,                  V P.                  V P                  VV P                  4       RV n         R # u upi )Nc              3  ó8   "  € T F  qP                   x € K  	  R # 5ir^   )r*  )r3  Úmetas   & r<   r5  Ú@CUTLASSBenchmarkRequest.update_workspace_size.<locals>.<genexpr>œ  s   é € ÐGÑ0F¨Ÿ)ž)Ó0Fùs   ‚z™update_workspace_size called: new workspace size=%d, self.kernel_name=%s, self.source_file=%s, self.hash_key=%s, self.DLL=%s, args=%s, self.extra_args=%sT)r‚  r“  rô   r  ÚfromkeysrW  r  r   r  rø  rÉ  r_  r�  rV  r   rY  r
   rÊ  Úvaluerã  ry   rz   r„  rƒ  )r�   Úunique_input_countrÍ   rd   r˜  rû  Úc_workspace_sizes   &      r<   r”  Ú-CUTLASSBenchmarkRequest.update_workspace_size—  so  € Ø×'×'Ð'ÙØ×ÑÔ Ü Ü�M‰MÑG°×0FÒ0FÓGÓGó
Ðô ).Ð.@À1Õ.DÔ(EÓFÑ(E 1”˜–Ñ(EˆÐFÜØ×!Ñ!×0Ñ0°×1FÑ1F×1UÑ1UÓ1WÓXó
ˆ
ô ˜TŸX™X t×'7Ñ'7Ó8ˆ
ä#›:ÐÙð 	
Øð	
à�_‰_ð	
ô Ø óð	
ð ð	
ð ô	
ð 	×Ñ×)Ñ)Ô+Ø.×4Ñ4ˆÔÜ×Ñð hØ×ÑØ×ÑØ×ÑØ�M‰MØ�H‰HØØ�O‰Oô		
ð (,ˆÖ$ùò; Gs   Á(Fc                	óÈ   € V P                   f:   V P                  P                  V P                  R4      w  V n         V n        V n        V P                   P                  4        R # )Nr  )r�  r…  rˆ   r­  rƒ  r„  Úopenr»   s   &r<   r“  Ú)CUTLASSBenchmarkRequest.ensure_dll_loaded½  sJ   € Ø�8‰8ÒØ8<×8JÑ8J×8OÑ8OØ× Ñ  $ó9Ñ5ˆDŒH�d”m TÔ%5ð 	�‰�‰Žr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   r|  Ä  s   € ÷ ñ  ñ r>   c                	ór   € V P                   e"   V P                   P                  4        R V n         R V n        R # r^   )r�  r­   r€  r»   s   &r<   rq  Ú&CUTLASSBenchmarkRequest.cleanup_run_fnÄ  s(   € Ø�8‰8ÒØ�H‰H�N‰NÔØˆDŒHØˆŽr>   c               ó   € V ^8„  d   QhRR/# r'  r:   )r;   s   "r<   r=   r|  Ê  s   € ÷ Mñ M˜ñ Mr>   c                	óZ   € R V P                   : RV P                  : RV P                  : 2# )r)  z, self.source_file=z, self.hash_key=)rV  r„  rƒ  r»   s   &r<   r*  ÚCUTLASSBenchmarkRequest.__str__Ê  s0   € Ø#�$×"Ñ"Ñ$Ð$8 t×'7Ñ'7Ñ&9Ð9J¸D¿M¹MÑ;KÐLÐLr>   c               ó   € V ^8„  d   QhRR/# )r5   r8   údict[str, Any]r:   )r;   s   "r<   r=   r|  Í  s   € ÷ ñ ˜nñ r>   c                	óX   € V P                   P                  4       pR VR&   R VR&   RVR&   V# )Nr�  r€  Fr‚  )Ú__dict__r_   ©r�   Ústates   & r<   Ú__getstate__Ú$CUTLASSBenchmarkRequest.__getstate__Í  s7   € Ø—‘×"Ñ"Ó$ˆØˆˆe‰Ø!ˆˆkÑØ+0ˆÐ'Ñ(Øˆr>   c               ó    € V ^8„  d   QhRRRR/# )r5   r´  r°  r8   r\   r:   )r;   s   "r<   r=   r|  Ô  s   € ÷ $ñ $ .ð $°Tñ $r>   c                	ó<   € V P                   P                  V4       R # r^   )r²  Úupdater³  s   &&r<   Ú__setstate__Ú$CUTLASSBenchmarkRequest.__setstate__Ô  s   € Ø�‰×Ñ˜UÖ#r>   )
r�  r‚  r…  r  rÌ  rƒ  r­  r„  r€  rã  )r1   )rG   rH   rI   rJ   rå   r�   r#  rm  r”  r“  rq  r*  rµ  rº  rK   r,  r-  s   @r<   rz  rz  4  sB   ø† ñ÷
ò 
ò0;õ6õp$,òLõõMõ÷$ó $r>   rz  c                  óL   a € ] tR tRtR V 3R lltR tR R ltR R ltR	tV ;t	# )
ÚCppBenchmarkRequestiØ  c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r5   rV  r9   rW  r-  rX  rY  rZ  r­  r8   r\   r:   )r;   s   "r<   r=   Ú CppBenchmarkRequest.__annotate__Ü  sF   € ÷ 2ñ 2àð2ð 9ð2ð :ð	2ð
 "ð2ð ð2ð 
ñ2r>   c                	ób   <€ \         SV `  WW44       WPn        \        V4      V n        R V n        R # r^   )rç  r�   r­  r   rƒ  r�  ©r�   rV  rW  rX  rY  r­  ré  s   &&&&&&€r<   r�   ÚCppBenchmarkRequest.__init__Ü  s.   ø€ ô 	‰Ñ˜Ð9KÔXØ&ÔÜ  Ó-ˆŒØ-1ˆŽr>   c                	ó¢   € \         P                  R V 4       \        P                  ! V P                  RR7       \         P                  RV 4       R# )rˆ  rò  ©rÌ  r‰  N)ry   rz   r   rˆ   r­  r»   s   &r<   r#  ÚCppBenchmarkRequest.precompileé  s<   € ô 	×ÑÐ.°Ô5Ü×Ò˜$×*Ñ*¸Õ>Ü×ÑÐ3°TÖ:r>   c               ó$   € V ^8„  d   QhRRRRRR/# rf  r:   )r;   s   "r<   r=   r¿  ð  s$   € ÷ 
ñ 
Ø*ð
Ø1=ð
à	ñ
r>   c          
     	óŒ  € \         P                  ! V P                  R R7      V n        \	        V4      V.,            Uu. uF  q3P                  4       NK  	  pp\        P                  RV P                  V P                  VV P                  4       \        V P                  V P                  4      p\        ;QJ d&    R V P                   4       F  '       d   K   RM	  RM! R V P                   4       4      '       gT   \        RV P                   Uu. uF0  p\        V\        P                  4      '       d   K%  \!        V4      NK2  	  up 24      h\        P                  .\#        V4      \#        \	        V P                  4      4      ,           ,          Vn        \&        P(                  ! V.VOV P                  O5!  # u upi u upi )rò  rÄ  zJmake_run_fn: self.kernel_name=%s, self.DLL=%s, args=%s, self.extra_args=%sc              3  óV   "  € T F  p\        V\        P                  4      x € K!  	  R # 5ir^   )rÌ   ÚctypesÚc_ulonglong)r3  Úargs   & r<   r5  Ú2CppBenchmarkRequest.make_run_fn.<locals>.<genexpr>ÿ  s    é € ÐRÁ/¸3”:˜c¤6×#5Ñ#5×6Ð6Ã/ùs   ‚')FTz=Expected all extra_args to be ctypes.c_ulonglong, got types: )r   rˆ   r­  r�  r  r•  ry   rz   rV  rY  r_  r;  r   rÌ   rÉ  rÊ  r<  rô   Úargtypesr±  r=  )r�   rh  rg  rÄ  rd   rû  rË  s   &$*    r<   rm  ÚCppBenchmarkRequest.make_run_fnð  sb  € ô  ×$Ò$ T×%5Ñ%5À5ÔIˆŒÜ04°]Ó0CÀsÀeÖ0KÓLÑ0K f—‘Ö!Ñ0KˆÐLÜ×ÑØXØ×ÑØ�H‰HØØ�O‰Oô	
ô ˜TŸX™X t×'7Ñ'7Ó8ˆ
ç‹sÑRÀ$Ç/Â/ÓR�s�sŠsÑRÀ$Ç/Â/ÓR×RÒRÜ ØOØ)-¯ªÓd© #Ä
È3ÔPV×PbÑPb×@c”I”D˜–I©ÑdÐeðgóð ô  &×1Ñ1Ð2Ü�‹IœœD §¡Ó1Ó2Õ2õ
ˆ
Ôô
 × Ò Øð
àð
ð �_‰_ó
ð 	
ùò) Mùò es   ½F<Ä"G
Ä7G
c               ó   € V ^8„  d   QhRR/# r'  r:   )r;   s   "r<   r=   r¿    s   € ÷ &ñ &˜ñ &r>   c                	ó"   € R V P                   : 2# )r)  )rV  r»   s   &r<   r*  ÚCppBenchmarkRequest.__str__  s   € Ø#�$×"Ñ"Ñ$Ð%Ð%r>   )r�  rƒ  r­  )
rG   rH   rI   rJ   r�   r#  rm  r*  rK   r,  r-  s   @r<   r½  r½  Ø  s!   ø† ÷2ð 2ò;õ
÷>&ó &r>   r½  c                  ó>   a € ] tR tRtRtR V 3R lltR R ltRtV ;t# )ÚCuteDSLBenchmarkRequesti  z;Benchmark request for CuteDSL (CUTLASS Python DSL) kernels.c               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r5   rV  r9   rW  r-  rX  rY  ztuple[Any, ...]r­  r+   r8   r\   r:   )r;   s   "r<   r=   Ú$CuteDSLBenchmarkRequest.__annotate__  sN   € ÷ Vñ VàðVð 9ðVð :ð	Vð
 $ðVð #ðVð 
ñVr>   c                	ó¬   <€ \         SV `  WW44       VP                  4       V n        \        P
                  ! V P                  4      w  V n        V n        R # r^   )rç  r�   Úfinalize_allr­  r   r   rÛ  rÚ  rÁ  s   &&&&&&€r<   r�   Ú CuteDSLBenchmarkRequest.__init__  sI   ø€ ô 	‰Ñ˜Ð9KÔXð '×3Ñ3Ó5ˆÔÜ2=×2CÒ2CÀD×DTÑDTÓ2UÑ/ˆÔ˜tÖ/r>   c               ó$   € V ^8„  d   QhRRRRRR/# rf  r:   )r;   s   "r<   r=   rÕ  $  s$   € ÷ ñ Ø*ðØ1=ðà	ñr>   c          	     óx  a aaa	€ \         P                  ! S P                  S P                  RR7      p^RIHp S P                   RV 2p\        W54      '       gH   \        V4       Uu. uF!  p\        \        W64      4      '       g   K  VNK#  	  pp\        RV RV 24      h\        W54      o	VV	VV 3R lpV# u upi )z�
Create a function to run the CuteDSL kernel with the given input and output tensors.
Similar to TritonBenchmarkRequest.make_run_fn but for CuteDSL kernels.
Frí  )ÚMAIN_SUFFIXrÍ   z-Could not find CuteDSL main kernel function 'z'. Available callables: c                 ó–   <€ \        R 4      p V P                  SP                  P                  4      pS! . SOSNSP                  O5RV/ # )r1   rö  )r   rø  r‹   rÂ  rY  )r  rö  rg  Úkernel_funcrh  r�   s     €€€€r<   Ú
run_kernelÚ7CuteDSLBenchmarkRequest.make_run_fn.<locals>.run_kernel>  sI   ø€ Ü7¸Ó?ÐØ%×4Ñ4°S·Z±Z×5EÑ5EÓFˆFÙÐT ÐT¨sÐT°T·_±_ÒTÈVÑTÐTr>   )r   rÿ  rÛ  rÚ  Úcodegen.cutedsl.cutedsl_kernelrÛ  rV  ÚhasattrÚdirÚcallabler_  r�  )
r�   rh  rg  r  rÛ  Úmain_func_namer*  Ú	availablerÞ  rÝ  s
   fdj      @r<   rm  Ú#CuteDSLBenchmarkRequest.make_run_fn$  s¿   û€ ô ×*Ò*Ø×!Ñ!Ø×ÑØ!ô
ˆõ 	@à ×,Ñ,Ð-¨Q¨{¨mÐ<ˆä�s×+Ò+Ü*-¨c¬(ÓS©( $´h¼wÀsÓ?Q×6RŸ˜©(ˆIÐSÜØ?ÀÐ?OÐOgÐhqÐgrÐsóð ô ˜cÓ2ˆ÷	Uð 	Uð
 Ðùò Ts   Á'B7ÂB7)rÛ  rÚ  r­  )	rG   rH   rI   rJ   rå   r�   rm  rK   r,  r-  s   @r<   rÓ  rÓ    s   ø† ÙE÷Vð V÷ó r>   rÓ  c               ó   € V ^8„  d   QhRR/# )r5   r8   rè   r:   )r;   s   "r<   r=   r=   G  s   € ÷ ñ Ð!2ñ r>   c                 óZ   € \        4       p \        P                  ! V P                  4       V # r^   )rè   Úatexitr¥   rÓ   )Úpools    r<   Úget_tuning_process_poolrë  F  s   € äÓ€DÜ
‡O‚O�D—M‘MÔ"Ø€Kr>   c               ó    € V ^8„  d   QhRRRR/# r  r:   )r;   s   "r<   r=   r=   M  s   € ÷ 8ñ 8Ø'ð8à&ñ8r>   c                ó4   € \        4       P                  V 4      # )zG
Do benchmarking in a subprocess and return the perf number (latency).
)rë  r  )r  s   &r<   Úbenchmark_in_sub_processrî  M  s   € ô #Ó$×.Ñ.¨wÓ7Ð7r>   c                  óî   € ] tR tRt$ RtRtR]R&   ]P                  ! 4       t	R]R&   Rt
R	]R
&   R t]R 4       t]R 4       tR R ltR R ltR R ltR tR R ltR R ltR R ltR t]R 4       tRtR# )ÚAutotuneProcessPooliV  zf
Singleton pool manager for running autotuning (precompilation + benchmarking)
in a separate process.
NzAutotuneProcessPool | NoneÚ	_instancezthreading.LockÚ_lockFr¸   Ú_shutdown_for_inactivityc                	óv   € V P                  4       V n        R V n        R V n        V P	                  4       V n        R # r^   )Ú
_init_poolÚ_poolÚ_warmup_futureÚ_warmup_start_timeÚ_init_timerÚ_timerr»   s   &r<   r�   ÚAutotuneProcessPool.__init__`  s0   € Ø15·±Ó1BˆŒ
Ø26ˆÔØ04ˆÔØ$(×$4Ñ$4Ó$6ˆŽr>   c                óø   € V P                   fD   V P                  ;_uu_ 4        V P                   f   V ! 4       V n         RRR4       V P                   # V P                   #   + '       g   i     T P                   # ; i)z*Get or create the singleton pool instance.N)rñ  rò  rª  s   &r<   Úget_instanceÚ AutotuneProcessPool.get_instancef  sX   € ð �=‰=Ò Ø——“Ø—=‘=Ò(á$'£E�C”M÷ ð �}‰}Ðˆs�}‰}Ð÷	 –ð �}‰}Ðús   £AÁA9	c                óÌ   € \         P                  '       g   \        R4      hV P                  f+   V P	                  4       V n        V P                  4       V n        V P                  # )zGet the process pool.zFTo use AutotuneProcessPool, pipeline_max_autotune_gemm must be enabled)r-   Úpipeline_max_autotune_gemmr   rö  rõ  rù  rú  r»   s   &r<   rê  ÚAutotuneProcessPool.poolp  sT   € ô ×0×0Ð0Ü ØXóð ð �:‰:ÒØŸ™Ó*ˆDŒJØ×*Ñ*Ó,ˆDŒKØ�z‰zÐr>   c               ó   € V ^8„  d   QhRR/# )r5   r8   zTimer | Noner:   )r;   s   "r<   r=   Ú AutotuneProcessPool.__annotate__|  s   € ÷ ñ ˜\ñ r>   c                	óP   € \         ^ 8”  d   \        \         V P                  4      # R# )r   N)Ú AUTOTUNE_POOL_INACTIVITY_TIMEOUTr   Ú_on_inactivity_timeoutr»   s   &r<   rù  ÚAutotuneProcessPool._init_timer|  s!   € Ü+¨aÔ/ÜÔ9¸4×;VÑ;VÓWÐWÙr>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   r  �  s   € ÷ &ñ & $ñ &r>   c                	óZ   € V P                   e   V P                   P                  4        R # R # r^   )rú  Úrecord_callr»   s   &r<   Ú_record_activityÚ$AutotuneProcessPool._record_activity�  s!   € Ø�;‰;Ò"Ø�K‰K×#Ñ#Ö%ñ #r>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   r  …  s   € ÷ @ñ @¨ñ @r>   c                	ó"  € \         P                  R \        4       V P                  ;_uu_ 4        V P                  e$   V P                  P                  RR7       RV n        RV n        R\        n        RRR4       R#   + '       g   i     R# ; i)zAAutotuneProcessPool shutting down due to inactivity (timeout=%ds)NFrâ   T)	ry   r‚  r  rò  rö  rÓ   rú  rð  ró  r»   s   &r<   r  Ú*AutotuneProcessPool._on_inactivity_timeout…  sf   € Ü×ÑØOÜ,ô	
ð
 �Z�Z‹ZØ�z‰zÒ%Ø—
‘
×#Ñ#¨Ð#Ô/Ø!�”
ØˆDŒKð
 <@ÔÔ8÷ �Z�ZŠZús   ¯AA=Á=B	c                ó¶   € \         P                  ! R4      p\        ^VR7      p\        P                  ! V P
                  4       \        P                  R4       V# )zç
Get or create the process pool.

Uses ProcessPoolExecutor with 'spawn' context for CUDA safety.
ProcessPoolExecutor is lazily initialized - workers are not spawned
until the first submit() call, making this property non-blocking.
Úspawn)rî   Ú
mp_contextz2AutotuneProcessPool created (workers spawn lazily))ÚmpÚget_contextr   ré  r¥   Ú	_shutdownry   r‚  )r�   Úctxrê  s   &  r<   rõ  ÚAutotuneProcessPool._init_pool–  sH   € ô �nŠn˜WÓ%ˆÜ"ØØô
ˆô 	�Š˜Ÿ™Ô'Ü×ÑÐPÔQàˆr>   c               ó   € V ^8„  d   QhRR/# ©r5   r8   úFuture[Any]r:   )r;   s   "r<   r=   r  ª  s   € ÷ #ñ #˜ñ #r>   c                ó  € V P                   fÔ   V P                  ;_uu_ 4        V P                   f�   \        P                  ! 4       V n        V P                  \        \        P                  P                  P                  P                  R7      V n         V P                   P                  V P                  4       \        P                  R4       RRR4       V P                   # V P                   #   + '       g   i     T P                   # ; i)z·
Submit a warmup job to eagerly spawn workers and initialize CUDA.

This is optional - call it early to hide spawn latency.
Returns the warmup future which can be ignored or awaited.
N)Úfp32_precisionzWarmup job submitted)r÷  rò  r�  Úperf_counterrø  ÚsubmitÚ_init_autotune_subprocessrÀ  Úbackendsr1   Úmatmulr  Úadd_done_callbackÚ_on_warmup_completery   r‚  r»   s   &r<   Úwarm_upÚAutotuneProcessPool.warm_upª  sÇ   € ð ×ÑÒ&Ø——“Ø×&Ñ&Ò.Ü.2×.?Ò.?Ó.A�DÔ+Ø*.¯+©+Ü1Ü',§~¡~×':Ñ':×'AÑ'A×'PÑ'Pð +6ó +�DÔ'ð ×'Ñ'×9Ñ9¸$×:RÑ:RÔSÜ"×'Ñ'Ð(>Ô?÷ ð ×"Ñ"Ð"ˆt×"Ñ"Ð"÷ –ð ×"Ñ"Ð"ús   £B+C.Ã.D		c               ó    € V ^8„  d   QhRRRR/# )r5   Úfuturer  r8   r\   r:   )r;   s   "r<   r=   r  ¾  s   € ÷ ñ ¨+ð ¸$ñ r>   c                ó8  € RpV P                   e'   \        P                  ! 4       V P                   ,
          p VP                  4       p\        P                  RVV4       V P                  4        R#   \         d   p\        P                  RT4       ThRp?ii ; i)z/Callback invoked when the warmup job completes.NzEAutotuneProcessPool warmup completed successfully in %.4f seconds: %sz4AutotuneProcessPool warmup failed after %.4f seconds)	rø  r�  r  ru   ry   r‚  r  rr   rÞ   )r�   r'  Úwarmup_elapsed_timeru   rv   s   &&   r<   r#  Ú'AutotuneProcessPool._on_warmup_complete¾  sŽ   € à"ÐØ×"Ñ"Ò.Ü"&×"3Ò"3Ó"5¸×8OÑ8OÕ"OÐð	Ø—]‘]“_ˆFÜ×ÑØWØ#Øôð
 ×!Ñ!Ö#øÜô 	Ü× Ñ ØFØ#ôð ˆGûð	ús   ¸7A1 Á1BÁ<BÂBc               ó   € V ^8„  d   QhRR/# r  r:   )r;   s   "r<   r=   r  Ó  s   € ÷ ñ ¨[ñ r>   c                óª   a € S P                   P                  ! \        V\        4       .VO5/ VB pS P                  e   VP                  V 3R l4       V# )z-Submit a job to the pool and return a Future.c                ó$   <€ SP                  4       # r^   )r  )rÍ   r�   s   &€r<   rD  Ú,AutotuneProcessPool.submit.<locals>.<lambda>Ý  s   ø€ ¨t×/DÑ/DÔ/Fr>   )rê  r  rg   rW   rú  r"  )r�   rc   rd   re   r'  s   f&*, r<   r  ÚAutotuneProcessPool.submitÓ  sW   ø€ à—‘×!Ò!Ü$ØÜ%Ó'ð
ð ò	
ð
 ñ
ˆð �;‰;Ò"Ø×$Ñ$Ô%FÔGØˆr>   c                óÊ   € V P                   e"   V P                   P                  4        RV n         V P                  e&   V P                  P                  RR7       RV n        R# R# )zShutdown the pool on exit.NFrâ   )rú  Úquitrö  rÓ   r»   s   &r<   r  ÚAutotuneProcessPool._shutdownà  sN   € à�;‰;Ò"Ø�K‰K×ÑÔØˆDŒKØ�:‰:Ò!Ø�J‰J×Ñ UÐÔ+ØˆDŽJñ "r>   c                óæ   € V P                   eO   V P                  ;_uu_ 4        V P                   e"   V P                   P                  4        RV n         RRR4       R# R#   + '       g   i     R# ; i)z+Explicitly shutdown the singleton instance.N©rñ  rò  r  rª  s   &r<   Úshutdown_instanceÚ%AutotuneProcessPool.shutdown_instanceé  sL   € ð �=‰=Ò$Ø——“Ø—=‘=Ò,Ø—M‘M×+Ñ+Ô-Ø$(�C”M÷ ‘ñ %ß—�ús   £0AÁA0	)rö  rú  r÷  rø  )rG   rH   rI   rJ   rå   rñ  rQ  Ú	threadingÚLockrò  ró  r�   rR  rý  Úpropertyrê  rù  r  r  rõ  r$  r#  r  r  r5  rK   r:   r>   r<   rð  rð  V  sš   ‡ ñð
 -1€IÐ)Ó0Ø%ŸNšNÓ,€Eˆ>Ó,Ø%*Ð˜dÓ*ò7ð ñó ðð ñ	ó ð	õõ
&õ@ò"õ(#õ(õ*òð ñ)ó ô)r>   rð  c               ó   € V ^8„  d   QhRR/# r·   r:   )r;   s   "r<   r=   r=   ó  s   € ÷ ñ  $ñ r>   c                 ó\   € \         P                  ;'       d    \        P                  '       * # r^   )r-   r   rð  ró  r:   r>   r<   Úuse_pipelined_autotuningr<  ó  s&   € ä×)Ñ)÷ 	=ð 	=Ü#×<Ñ<Ô<ðr>   c               ó    € V ^8„  d   QhRRRR/# )r5   r  r9   r8   r¸   r:   )r;   s   "r<   r=   r=   ú  s   € ÷ ñ ¨cð °dñ r>   c                ó¾   € ^ RI pVP                  P                  4       '       d   VP                  ! ^RR7       WP                  P                  P
                  n        R# )z1
Warmup function run in the autotune subprocess.
Nr1   rì   T)rÀ  r1   Úis_availabler–  r   r!  r  )r  rÀ  s   & r<   r  r  ú  sC   € ó ð ‡z�z×Ñ× Ò Ø�Š�A˜fÕ%à0>‡N�N×Ñ×ÑÔ-ár>   c               ó    € V ^8„  d   QhRRRR/# )r5   Úbenchmark_requestrT  r8   rÅ   r:   )r;   s   "r<   r=   r=   	  s   € ÷ ñ Ø'ðà
ñr>   c                ó�   €  V P                  4       pV#   \         d'    \        P                  RT RR7       \	        R4      u # i ; i)a
  
Run autotuning benchmarks in a subprocess.

This function is submitted to AutotuneProcessPool and runs in isolation
to prevent GPU contention with the main compilation process.

Args:
    picklable_choices: List of picklable choice information

Returns:
    timing
zFailed to benchmark choice %sT)Úexc_infor  )r  rr   ry   ÚwarningrÅ   )rA  Útimings   & r<   Úrun_autotune_in_subprocessrF  	  sQ   € ð à"×,Ñ,Ó.ˆàˆøäô Ü×ÑØ+ØØð 	ô 	
ô �U‹|Òðús   ‚ ”.AÁAc                  óž   € ] tR tRt$ RtRtR]R&   ]P                  ! 4       t	RR R llt
]R R	 l4       tR
 tRR R llt]R R l4       tRtR# )ÚPrecompileThreadPooli)  z¢
Thread pool for running precompilation asynchronously.

This allows the main compilation process to continue while
precompilation happens in background threads.
NzPrecompileThreadPool | Nonerñ  c               ó   € V ^8„  d   QhRR/# )r5   rî   rÿ   r:   )r;   s   "r<   r=   Ú!PrecompileThreadPool.__annotate__4  s   € ÷ Eñ E Cñ Er>   c                	ó(   € \        VR 7      V n        R# )rí   N)r	   Ú	_executor)r�   rî   s   &&r<   r�   ÚPrecompileThreadPool.__init__4  s   € Ü+¸ÔDˆŽr>   c               ó   € V ^8„  d   QhRR/# )r5   r8   rH  r:   )r;   s   "r<   r=   rJ  8  s   € ÷ ñ Ð1ñ r>   c                	ó  € ^ RI Hp V P                  fJ   V P                  ;_uu_ 4        V P                  f   V ! V! 4       4      V n        RRR4       V P                  # V P                  #   + '       g   i     T P                  # ; i)r   )Úget_num_workersN)r9  rP  rñ  rò  )rH  rP  s   & r<   rý  Ú!PrecompileThreadPool.get_instance7  s_   € åDà�=‰=Ò Ø——“Ø—=‘=Ò(Ù$'©Ó(9Ó$:�C”M÷ ð �}‰}Ðˆs�}‰}Ð÷ –ð �}‰}Ðús   ©!A*Á*B	c                	ó®   € \         P                  ! 4       p\        P                  ! VP                  V4      pV P
                  P                  ! V.VO5/ VB # r^   )ÚcontextvarsÚcopy_contextr±  r=  r   rL  r  )r�   rc   rd   re   r  s   &&*, r<   r  ÚPrecompileThreadPool.submitA  sE   € Ü×&Ò&Ó(ˆä×Ò˜sŸw™w¨Ó+ˆØ�~‰~×$Ò$ RÐ9¨$Ò9°&Ñ9Ð9r>   c               ó   € V ^8„  d   QhRR/# )r5   rÐ   r¸   r:   )r;   s   "r<   r=   rJ  G  s   € ÷ 2ñ 2˜dñ 2r>   c                	ó:   € V P                   P                  VR 7      # )râ   )rL  rÓ   rÒ   s   &&r<   r  ÚPrecompileThreadPool._shutdownG  s   € Ø�~‰~×&Ñ&¨DÐ&Ó1Ð1r>   c               ó   € V ^8„  d   QhRR/# rÖ   r:   )r;   s   "r<   r=   rJ  K  s   € ÷ )ñ ) $ñ )r>   c                	óê   € V P                   eQ   V P                  ;_uu_ 4        V P                   e$   V P                   P                  RR7       R V n         R R R 4       R # R #   + '       g   i     R # ; i)NFrâ   r4  rª  s   &r<   r5  Ú&PrecompileThreadPool.shutdown_instanceJ  sO   € à�=‰=Ò$Ø——“Ø—=‘=Ò,Ø—M‘M×+Ñ+°Ð+Ô7Ø$(�C”M÷ ‘ñ %ß—�ús   £2A!Á!A2	)rL  )é   )F)rG   rH   rI   rJ   rå   rñ  rQ  r7  r8  rò  r�   rR  rý  r  r  r5  rK   r:   r>   r<   rH  rH  )  sX   ‡ ñð .2€IÐ*Ó1Ø�NŠNÓ€E÷Eð ôó ðò:÷2ð ô)ó ô)r>   rH  c                  ó`   € ] tR tRtRt/ t]R R l4       t]R R l4       t	]R R l4       t
R	tR
# )ÚAsyncAutotuneriS  a©  
Handles asynchronous autotuning of kernel choices in a separate process.

This class manages the lifecycle of autotuning:
1. Accepts precompiled choices from the main process
2. Submits benchmarking work to AutotuneProcessPool
3. Returns results via a Future

Usage:
    autotuner = AsyncAutotuner(choices)
    autotuner.start()  # Kicks off async benchmarking
    timings = autotuner.get_results()  # Blocks until complete
c               ó$   € V ^8„  d   QhRRRRRR/# )r5   r  r*   Ú
inputs_keyr9   r8   r:   )r;   s   "r<   r=   ÚAsyncAutotuner.__annotate__e  s!   € ÷ .ñ . ð .¸#ð .À#ñ .r>   c                	ó0   € V P                  4       V,           # r^   )rƒ  )r  r`  s   &&r<   Úget_choice_hashÚAsyncAutotuner.get_choice_hashd  s   € à�‰Ó  :Õ-Ð-r>   c               ó    € V ^8„  d   QhRRRR/# )r5   r  úlist[ChoiceCaller]r`  r9   r:   )r;   s   "r<   r=   ra  i  s   € ÷ Pñ PÐ.ð P¸Cñ Pr>   c                ó.  € V FŽ  p\         P                  W24      pV\         P                  9   d   K/  \        VRR4      f   \	        R4      h\
        P                  4       P                  \        VP                  4      pV\         P                  V&   K�  	  R# )zÎ
Start asynchronous autotuning in a subprocess.

This method:
1. Extracts picklable benchmark requests from choices
2. Submits benchmarking work to AutotuneProcessPool
3. Returns immediately (non-blocking)
r  Nzbmreq is None for choice)
r^  rc  Úchoice_hash_to_futurer_  r   rð  rý  r  rF  r  )rH  r  r`  r  Úchoice_hashÚautotune_futures   &&&   r<   rŽ   ÚAsyncAutotuner.starth  s�   € ó ˆFÜ(×8Ñ8¸ÓLˆKàœn×BÑBÔBÙä˜6 7¨DÓ1Ò=Ü$Ð%?Ó@Ð@ä1×>Ñ>Ó@×GÑGÜ*Ø—‘óˆOð
 APŒN×0Ñ0°Ó=ó r>   c               ó$   € V ^8„  d   QhRRRRRR/# )r5   r  rf  r`  r9   r8   zdict[ChoiceCaller, float]r:   )r;   s   "r<   r=   ra  „  s$   € ÷ ñ Ø(ðØ69ðà	"ñr>   c                ó”   € / pV F?  p\         P                  WB4      p\         P                  V,          P                  4       W4&   KA  	  V# )z¼
Get autotuning results, blocking until complete.

Args:
    timeout: Maximum time to wait in seconds. None means wait forever.

Returns:
    Dict mapping ChoiceCaller to benchmark timing
)r^  rc  rh  ru   )rH  r  r`  Útimingsr  ri  s   &&&   r<   Úget_resultsÚAsyncAutotuner.get_resultsƒ  sE   € ð ˆÛˆFÜ(×8Ñ8¸ÓLˆKÜ,×BÑBÀ;ÕO×VÑVÓXˆG‹Oñ ð ˆr>   r:   N)rG   rH   rI   rJ   rå   rh  ræ   rc  rR  rŽ   ro  rK   r:   r>   r<   r^  r^  S  sK   † ñð Ðàô.ó ð.ð ôPó ðPð4 ôó ôr>   r^  r^   )„Ú__conditional_annotations__Ú
__future__r   ré  rS  rÉ  Údataclassesr±  r  Úmultiprocessingr  rR   r‚   rñ   r¢   rª   r§   r7  r�  r  Úcollections.abcr   r   r   Úconcurrent.futuresr   r   r	   r
   r   r   r   Útypingr   r   r   Útyping_extensionsr   rÀ  Útorch._inductor.async_compileÚtorch._dynamo.device_interfacer   Útorch._dynamo.testingr   Útorch._inductorr   Útorch._inductor.codecacher   r   r   r   r   r   r   Ú$torch._inductor.compile_worker.timerr   Útorch._inductor.utilsr   r   r   r    r!   r"   r#   r$   Útorch._loggingr%   Útorch.utils._ordered_setr&   rÿ   rS   rT   r  Útypesr)   r9  r*   r+   r,   r~  r-   Úruntime.benchmarkingr.   Úvirtualizedr/   r0   r@   rB   rG   ry   rr   rE   rW   rY   rQ  ra   rg   ri   rè   r=  r>  ÚLayoutOrBufferÚ	dataclassr%  rT  r‹  rš  r¥  r´  r»  rÑ  rØ  r/  r1  r3  r^  ra  rc  rv  rx  rz  r½  rÓ  Úcacherë  rî  rð  r<  r  rF  rH  r^  )rq  s   @r<   Ú<module>rˆ     s  øðç "Ð "ã Û Û Û Û Û Û Û 	Û Û Û Û Û 
Û Û Û ß 8Ñ 8ß NÑ Nß 2Ó 2ß )Ñ )Ý &ã Û $Ý CÝ .Ý ÷÷ ñ õ 7÷	÷ 	ó 	õ -Ý /ñ
 $'Ø‡J�J‡N�NÐCÀUÓKó$Ð  ÷ Ý ÷ñ õ Ý -Ý ð .Ð ð Ð"Ø	Ðð Ð ÷2ñ # 8¨\Ó:€ô	¨	ô 	õ4ð
 9=Ð Ð5Ó <õ$õ÷sñ s÷lvñ vðr —‘˜RŸY™YÕ&€ð ×Ñ÷8
ð 8
ó ð8
ðv ×Ñ÷q"ð q"ó ðq"ôh$Ð,ô $÷N(ñ (ð ÷)ð )ó ð)÷ñ ÷!ñ !÷H-ñ -ôzUÐ-ô zUôz	Ð 7Ð9Oô 	ô	Ð 7Ð9Oô 	ôJEÐ#3ô JEôZ	ØÐ9ô	ô	ØÐ9ô	ô(SÐ/ô (SôV	Ð"9Ð;Sô 	ô	Ð"9Ð;Sô 	ôa$Ð5Ð7Gô a$ôH8&Ð1Ð3Cô 8&ôv0Ð5Ð7Gô 0ðf ‡�ôó ðõ8÷Z)ñ Z)õzõõ÷@')ñ ')÷TBó Br>   