ó
    Eñil¸  ã                  ó¦  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJrJrJr  S SKJrJrJr  S SKJrJrJrJr  S SKJrJ r J!r!J"r"J#r#  S SK$r$S SK%r$S SK&J'r'  S SK(J)r)  S S	K*J+r+  S S
K,J-r-J.r.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5J6r6J7r7J8r8J9r9  S SK:J;r;  S SK<J=r=  \>" \	R~                  R�                  SS5      5      rA\"(       a  S SKBJCrC  S SKDJErEJFrFJGrG  SSKHJIrI  SSKJJKrK  SSKLJMrM  SrN\;" \OS5      rP " S S\Q5      rR " S S5      rS " S S5      rT\#\+Rª                  \+R¬                  4   rW\R°                   " S S 5      5       rY\R°                   " S! S"5      5       rZ " S# S$\Z5      r[ " S% S&5      r\ " S' S(5      r] " S) S*\Z5      r^ " S+ S,\\\^5      r_ " S- S.\]\^5      r` " S/ S0\Z5      ra " S1 S2\\\a5      rb " S3 S4\]\a5      rc " S5 S6\\\Z5      rd " S7 S8\]\Z5      re " S9 S:\\\Z5      rf\RÎ                  SFS; j5       rh    SGS< jri " S= S>5      rjSHS? jrkSIS@ jrl    SJSA jrm " SB SC5      rn " SD SE5      rog)Ké    )ÚannotationsN)ÚCallableÚIterableÚSequence)ÚFutureÚProcessPoolExecutorÚThreadPoolExecutor)ÚbyrefÚc_size_tÚc_void_pÚCDLL)ÚAnyÚIOÚOptionalÚTYPE_CHECKINGÚUnion)Úget_interface_for_device)Úrand_strided)Úir)ÚCppCodeCacheÚCUDACodeCacheÚ
DLLWrapperÚget_hashÚPyCodeCache)ÚTimer)Ú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Ú
autotuningc                  ó   • \ rS rSrSrg)Ú!NonzeroWorkspaceNotSupportedErroréI   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r2   ó    Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/autotune_process.pyr0   r0   I   ó   † Úr9   r0   c                  óÔ   • \ rS rSrSr\SS j5       r\ S       SS jj5       r\SS j5       rSS jr	S r
SS	 jrSSS
 jjrSSS jjrSSS jjrSS jrSS jrSS jrSS jrSrg)ÚTuningProcesséM   z>
Class to launch and interact with a benchmarking subprocess.
c                óÜ   ^ ^• [         R                  S[        R                  " 5       [        R                  R                  [        5      5        U U4S jn U" 5         g! [         a     gf = f)z$
Entry point for the child process.
z3Started autotune subprocess %s. Visible devices: %sc                 óú   >•  [         R                  T5      u  pU c  g  U(       a  [        R                  R	                  U5        U " 5       n[         R                  UT5        Ma  ! [
         a  nUn S nAN)S nAff = f©N)r=   ÚrecvÚosÚenvironÚupdateÚ	ExceptionÚsend)ÚjobÚ	extra_envÚresultÚeÚ	read_pipeÚ
write_pipes       €€r:   ÚworkloopÚ,TuningProcess.process_main.<locals>.workloop]   so   ø€ ØÜ!.×!3Ñ!3°IÓ!>‘�Ø‘;àðÞ ÜŸ
™
×)Ñ)¨)Ô4Ù ›U�Fô ×"Ñ" 6¨:Ô6ñ øô !ó Ø•Fûðús   Ÿ-A$ Á$
A:Á.A5Á5A:N)Úautotuning_logÚdebugrC   ÚgetpidrD   Úgetr-   ÚEOFError)rL   rM   rN   s   `` r:   Úprocess_mainÚTuningProcess.process_mainR   sQ   ù€ ô
 	×ÑØAÜ�IŠI‹KÜ�J‰J�N‰NÔ/Ó0ô	
ö	7ð	Ù�JøÜó 	áð	ús   ÁA Á
A+Á*A+Nc                óT   • [         R                  " X4U5        UR                  5         g rA   )ÚpickleÚdumpÚflush)ÚobjrM   rI   s      r:   rG   ÚTuningProcess.sendq   s!   € ô 	�Š�SÐ$ jÔ1Ø×ÑÕr9   c                ó.   • [         R                  " U 5      $ rA   )rX   Úload)rL   s    r:   rB   ÚTuningProcess.recvx   s   € ä�{Š{˜9Ó%Ð%r9   c                ó0   • Xl         U R                  5         g rA   )ÚdeviceÚstart)Úselfra   s     r:   Ú__init__ÚTuningProcess.__init__|   s   € ØŒØ�
‰
�r9   c                óÆ  • [         R                  R                  [         R                  R                  [        5      S5      n[         R
                  " 5       u  p#[         R
                  " 5       u  pE[         R                  " US5      U l        [         R                  " US5      U l        [        R                  " 5       U l        U R                  R                  U R                  [        R                  5        [        R                  US[         R                   " 5        3S[#        U5       3S[#        U5       3/n0 [%        5       ES['        5       [(        R*                  (       a  SOSS	.EnU R,                  b  [#        U R,                  5      U[.        '   [0        R2                  " UUX%4S9U l        [         R6                  " U5        [         R6                  " U5        SU l        g
)z$
Start the benchmarking subprocess.
z__autotune_main__.pyÚwbÚrbz	--parent=z
--read-fd=z--write-fd=Ú0Ú1)ÚTORCH_WARM_POOLÚLD_LIBRARY_PATHÚ3TORCHINDUCTOR_PROFILE_WITH_DO_BENCH_USING_PROFILINGN)ÚenvÚpass_fdsT)rC   ÚpathÚjoinÚdirnameÚ__file__ÚpipeÚfdopenrM   rL   Ú	selectorsÚDefaultSelectorÚselectorÚregisterÚ
EVENT_READÚsysÚ
executablerR   Ústrr    r   r*   Ú/profile_bandwidth_with_do_bench_using_profilingra   r-   Ú
subprocessÚPopenÚprocessÚcloseÚrunning)rc   ÚentryÚsubproc_read_fdÚwrite_fdÚread_fdÚsubproc_write_fdÚcmdrn   s           r:   rb   ÚTuningProcess.start€   so  € ô —‘—‘œ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ð
ˆð
Ü#Ó%ð
ð  #ä2Ó4ô ×E×Eñ DGàò
ˆð �;‰;Ñ"Ü(+¨D¯K©KÓ(8ˆCÔ$Ñ%Ü!×'Ò'ØØØ%Ð8ñ
ˆŒô
 	�Š�Ô!Ü
�ŠÐ!Ô"àˆ�r9   c                ó`   • U R                   =(       a    U R                  R                  5       SL $ )z*
True if the subprocess is still running.
N)rƒ   r�   Úpoll©rc   s    r:   ÚaliveÚTuningProcess.alive­   s%   € ð �|‰|×; §¡× 1Ñ 1Ó 3°tÐ ;Ð;r9   c                óŠ   • U R                  5       (       d  U R                  5         [        R                  XR                  US9  g)z(
Push a work item to the child process.
©rI   N)rŽ   rb   r=   rG   rM   )rc   ÚreqrI   s      r:   ÚputÚTuningProcess.put³   s/   € ð �z‰z�|‰|Ø�J‰JŒLÜ×Ñ˜3§¡¸9ÐÒEr9   c                óö  •  U R                   R                  U5      (       d"  [        SU R                  R                   35      e[
        R                  U R                  5      u  p#[        U[        5      (       a  UeU$ ! [         a    U R                  5         e [         a    U R                  5         e [         a<    [        R                  SU R                  R                  5        U R                  5         e f = f)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)rx   ÚselectÚTimeoutErrorr�   Úpidr=   rB   rL   ÚkillrT   r‚   rF   rP   Ú	exceptionÚ
isinstance)rc   ÚtimeoutrJ   Ú_s       r:   rS   Ú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   ‚A#A> Á>A:C8c                óž   • U R                  5       (       a   [        R                  SU R                  5        U(       a  U R	                  5         gg)z3
Signal the child process to shut down gracefully.
N)rŽ   r=   rG   rM   Úwait©rc   r    s     r:   ÚshutdownÚTuningProcess.shutdownÖ   s4   € ð �:‰:�<‰<Ü×Ñ˜t T§_¡_Ô5ÞØ�I‰I�Kð r9   c                ó‚   • U R                  5       (       a  U R                  R                  5         U R                  5         g)z%
Wait for the child process to exit.
N)rŽ   r�   r    r‚   r�   s    r:   r    ÚTuningProcess.waitß   s(   € ð �:‰:�<‰<Ø�L‰L×ÑÔØ�
‰
�r9   c                ó®   • U R                   R                  5         U R                  R                  5         U R                  R                  5         SU l        g)z
Close resources.
FN)rx   r‚   rL   rM   rƒ   r�   s    r:   r‚   ÚTuningProcess.closeç   s;   € ð 	�‰×ÑÔØ�‰×ÑÔØ�‰×ÑÔØˆ�r9   c                óÖ   • U R                  5       (       aD  [        R                  SU R                  R                  5        U R                  R                  5         U R                  5         g)z&
Send a SIGKILL to the child process.
z)Sending SIGKILL to autotune subprocess %dN)rŽ   rP   Úerrorr�   r˜   r™   r‚   r�   s    r:   r™   ÚTuningProcess.killð   sH   € ð �:‰:�<‰<Ü× Ñ Ø;Ø—‘× Ñ ôð �L‰L×ÑÔØ�
‰
�r9   c                óB   • U R                  SS9  U R                  5         g)z(
Gracefully restarts the child process.
T©r    N)r¢   rb   r�   s    r:   ÚrestartÚTuningProcess.restartü   s   € ð 	�‰˜4ˆÑ Ø�
‰
�r9   )ra   r�   rL   rƒ   rx   rM   )rL   ú	IO[bytes]rM   r¯   ÚreturnÚNonerA   )r[   r   rM   r¯   rI   údict[str, str] | Noner°   r±   )rL   r¯   r°   r   )ra   úOptional[int]©r°   Úbool)r’   r   rI   r²   r°   r±   )g      ^@)rœ   Úfloatr°   r   )T)r    rµ   r°   r±   ©r°   r±   )r4   r5   r6   r7   Ú__doc__ÚstaticmethodrU   rG   rB   rd   rb   rŽ   r“   rS   r¢   r    r‚   r™   r­   r8   r2   r9   r:   r=   r=   M   sš   † ñð óó ðð< àLPðØðØ'ðØ4Iðà	ôó ðð ó&ó ð&ôò+ôZ<öFöö6ôôô
÷r9   r=   c                  ó\   • \ rS rSrSrS
S jr\SS j5       rS
S jrSS jr	    SS jr
Srg	)ÚTuningProcessPooli  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  • U R                  5       n[        R                  SU5        U Vs/ s H  n[        US9PM     snU l        [
        R                  " 5       U l        U R                   H  nU R                  R                  U5        M      [        [        U5      S9U l        gs  snf )z
Start the child processes.
z$Sub-process autotune device list: %s©ra   ©Úmax_workersN)Úget_device_listrP   rQ   r=   Ú	processesÚqueueÚQueueÚprocess_queuer“   r	   ÚlenÚexecutor)rc   Údevicesra   Úps       r:   rd   Ú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                 ó‚  • [         R                  (       d  S/$ [        5       n [        U 5      nUR	                  5       n[
        [        R                  ;   aR  [        R                  [
           R                  S5       Vs/ s H  n[        U5      PM     nn[        U5      U::  d   eU$ [        [        U5      5      $ s  snf )z4
Gather the list of devices to be used in the pool.
NÚ,)r*   Úautotune_multi_devicer   r   Údevice_countr-   rC   rD   ÚsplitÚintrÅ   ÚlistÚrange)Úgpu_typeÚdevice_interfaceÚcountÚdrÇ   s        r:   rÀ   Ú!TuningProcessPool.get_device_list  s�   € ô
 ×+×+à�6ˆMä“>ˆÜ3°HÓ=ÐØ ×-Ñ-Ó/ˆô  ¤2§:¡:Ó-Ü')§z¡zÔ2FÑ'G×'MÑ'MÈcÔ'RÓSÒ'R !”s˜1–vÑ'RˆGÐSÜ�w“< 5Ó(Ð(Ð(ØˆNä”E˜%“LÓ!Ð!ùò	 Ts   Á>B<c                óÂ   • U R                   R                  5         U R                   H  nUR                  SS9  M     U R                   H  nUR                  5         M     g)z%
Signal all child processes to exit.
Fr¬   N)rÆ   r¢   rÁ   r    )rc   rÈ   s     r:   r¢   ÚTuningProcessPool.shutdown3  sG   € ð 	�‰×ÑÔ à—”ˆAØ�J‰J˜EˆJÓ"ñ  à—”ˆAØ�F‰FŽHò  r9   c                óX  • UR                   c   eSS/nU Vs0 s H,  o3[        R                  ;   d  M  U[        R                  U   _M.     nnU R                  R	                  5       nUR                  UR                   R                  US9   UR	                  [        R                  5      U R                  R                  U5        $ s  snf ! [         aC    [        R                  " SU S35        [        S5      s U R                  R                  U5        $ [         ai  n[        R                  " SU S35        S	[        U5      ;   a  UR                  5         [        S5      s SnAU R                  R                  U5        $ SnAff = f! U R                  R                  U5        f = f)
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.
NÚTORCHINDUCTOR_CACHE_DIRÚTRITON_CACHE_DIRr‘   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)ÚbmreqrC   rD   rÄ   rS   r“   Ú	benchmarkr*   Ú+max_autotune_subproc_result_timeout_secondsr—   ÚwarningsÚwarnr¶   rF   r}   r­   )rc   ÚchoiceÚenv_varsÚvrI   r�   Úprocess_exceptions          r:   ÚtargetÚTuningProcessPool.target>  sz  € ð �|‰|Ñ'Ð'Ð'à-Ð/AÐBˆÙ/7ÓKªx¨!ÄÇ
Á
¹?Ó%�QœŸ
™
 1™Ò%©xˆ	ÐKØ×$Ñ$×(Ñ(Ó*ˆØ�‰�F—L‘L×*Ñ*°iˆÑ@ð	,Ø—;‘;Ü×BÑBóð. ×Ñ×"Ñ" 7Õ+ùò7 Løô ó 	 Ü�MŠMØ1°&°ð :Wð Wôô
 ˜“<Ñð ×Ñ×"Ñ" 7Õ+ô ó 	 Ü�MŠMØ.¨v¨hð 7Wð Wôð (¬3Ð/@Ó+AÓAØ—‘Ô!ä˜“<Ôà×Ñ×"Ñ" 7Õ+ûð	 ûð ×Ñ×"Ñ" 7Õ+úsG   ˜C³CÂC Ã/F	Ã:F Ä	F	Ä AFÅ#F	Å$F ÆF	Æ	F ÆF)c           	     óv   • [        [        XR                  R                  U R                  U5      5      5      nU$ )z.
Benchmark each choice in a separate process.
)ÚdictÚziprÆ   Úmaprç   )rc   ÚchoicesÚresultss      r:   rß   ÚTuningProcessPool.benchmarkd  s-   € ô ”s˜7§M¡M×$5Ñ$5°d·k±kÀ7Ó$KÓLÓMˆàˆr9   )rÆ   rÄ   rÁ   Nr·   )r°   zSequence[Optional[int]])rã   r(   r°   r¶   ©rí   zlist[TritonTemplateCaller]r°   z!dict[TritonTemplateCaller, float])r4   r5   r6   r7   r¸   rd   r¹   rÀ   r¢   rç   rß   r8   r2   r9   r:   r»   r»     sC   † ñôEð& ó"ó ð"ô(	ô$,ðLà+ðð 
+÷r9   r»   c                  ó|   • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   SrS\S'   \    SS j5       rSS jrSr	g)Ú
TensorMetaiv  ztorch.devicera   ztorch.dtypeÚdtypeztorch._prims_common.ShapeTypeÚsizesztorch._prims_common.StrideTypeÚstridesrÏ   ÚoffsetNzOptional[str]Únamec           
     óö  • [        U[        5      (       a;  U Vs/ s H  o R                  U5      PM     nn[        S U 5       5      (       d   eU$ Un[        U[        R
                  5      (       a  [        R                  " SUS9nUR                  5       nUc   eUR                  5       nUc   e[        UU[        R                  R                  R                  UR                  5       5      [        R                  R                  R                  UR                  5       5      [        R                  R                  R!                  UR#                  5       R$                  5      UR'                  5       S9$ s  snf )Nc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frA   )r›   rò   ©Ú.0Úxs     r:   Ú	<genexpr>Ú*TensorMeta.from_irnodes.<locals>.<genexpr>…  s   é € ÐAº&°Q”z !¤Z×0Ð0º&ùs   ‚Úfake)r÷   Úlayout)ra   ró   rô   rõ   rö   r÷   )r›   r   Úfrom_irnodesÚallr   ÚLayoutÚBufferÚ	get_dtypeÚ
get_devicerò   r,   ÚgraphÚsizevarsÚoptimization_hintsÚget_sizeÚ
get_strideÚoptimization_hintÚ
get_layoutrö   Úget_name)ÚclsÚirnodesrü   rJ   Únoderó   ra   s          r:   r  ÚTensorMeta.from_irnodes  s$  € ô �gœx×(Ñ(Ù>EÓ Fºg¸×!1Ñ!1°!Ö!4¹gˆFÐ FÜÑA¹&ÓA×AÑAÐAÐAØˆMàˆÜ�dœBŸI™I×&Ñ&Ü—9’9 &°Ñ6ˆDà—‘Ó ˆØÑ Ð Ð Ø—‘Ó"ˆØÑ!Ð!Ð!äØØÜ—'‘'×"Ñ"×5Ñ5°d·m±m³oÓFÜ—G‘G×$Ñ$×7Ñ7¸¿¹Ó8IÓJÜ—7‘7×#Ñ#×5Ñ5°d·o±oÓ6G×6NÑ6NÓOØ—‘“ñ
ð 	
ùò !Gs   šE6c                ó€   • [        U R                  U R                  U R                  U R                  U R
                  S9$ )N)ra   ró   Ú
extra_size)r   rô   rõ   ra   ró   rö   r�   s    r:   Ú	to_tensorÚTensorMeta.to_tensorš  s2   € ÜØ�J‰JØ�L‰LØ—;‘;Ø—*‘*Ø—{‘{ñ
ð 	
r9   r2   )r  z/Union[LayoutOrBuffer, Sequence[LayoutOrBuffer]]r°   ú#Union[TensorMeta, list[TensorMeta]])r°   útorch.Tensor)
r4   r5   r6   r7   Ú__annotations__r÷   Úclassmethodr  r  r8   r2   r9   r:   rò   rò   v  sP   ‡ àÓØÓØ(Ó(Ø+Ó+ØƒKØ€Dˆ-Óàð
ØEð
à	,ó
ó ð
÷4
r9   rò   c                  óŽ   • \ rS rSrSr          SS jr      SS jrSS jrSS.     SS jjrSS.     SS	 jjr	S
r
g)Ú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                ó$  ^• Xl         [        U[        5      (       a	  U/U l        OX l        T(       aQ  [        T[        [
        45      (       a6  [        T5      S:”  a  [        U4S jT 5       5      (       d   eTS   U l        OTU l        X@l	        g )Nr)   c              3  ón   >#   • U  H*  nS   H   n[        TS   U5      [        X5      :H  v •  M"     M,     g7f))ra   ró   rô   rõ   rö   r   N)Úgetattr)rû   rü   ÚattrÚoutput_tensor_metas      €r:   rý   Ú,BenchmarkRequest.__init__.<locals>.<genexpr>À  s=   øé € ð â/˜Ü Q˜ô Ð.¨qÑ1°4Ó8¼GÀAÓ<LÖLá Qñ MÚ/ùs   ƒ25r   )
Úkernel_namer›   rò   Úinput_tensor_metaÚtuplerÐ   rÅ   r  r!  Ú
extra_args)rc   r#  r$  r!  r&  s      ` r:   rd   ÚBenchmarkRequest.__init__®  s�   ø€ ð 'ÔäÐ'¬×4Ñ4Ø8IÐ7JˆDÕ"à7HÔ"æ¤*Ð-?Ä%ÌÀ×"OÑ"OÜÐ%Ó&¨Ó*äô á/ó÷ ñ ð ð ð
 '9¸Ñ&;ˆDÕ#ð 3EˆDÔ#à$�r9   c               ó   • [         erA   ©ÚNotImplementedError©rc   ÚoutÚinput_tensorss      r:   Úmake_run_fnÚBenchmarkRequest.make_run_fnÌ  s
   € ô "Ð!r9   c                ó   • g rA   r2   r�   s    r:   Úcleanup_run_fnÚBenchmarkRequest.cleanup_run_fnÑ  s   € Ør9   N©r,  c               ó   • [         erA   r)  ©rc   Úfnr,  r-  s       r:   Údo_benchÚBenchmarkRequest.do_benchÔ  s
   € ô "Ð!r9   c               óŒ  • [         R                  [        R                  5      nU(       a  [        R                  " 5       nUcp  U R
                  (       a  U R                  (       d   S5       e[        U5      S:X  d   e[        S U R
                   5       5      nU R                  R                  5       nU(       a-  [        R                  " 5       W-
  n[        R                  " 5       n U R                  " USU06nU(       a-  [        R                  " 5       W-
  n[        R                  " 5       nU R                  " U/UQUP76 nU(       a:  [        R                  " 5       W-
  n	[         R                  S[!        U 5      WWU	5        U R#                  5         U$ ! [         a#    [         R                  S5        [        S5      s $ f = f)NzJInput and output tensor meta must be populated when input_tensors is emptyr   c              3  ó@   #   • U  H  oR                  5       v •  M     g 7frA   )r  rú   s     r:   rý   Ú-BenchmarkRequest.benchmark.<locals>.<genexpr>ë  s   é € Ð!PÒ9O°A§+¡+§- -Ò9Oùs   ‚r,  z0Skipping op due to nonzero workspace requirementrÜ   z6InChildProcess %s: load %f, create tensor %f, bench %f)rP   ÚisEnabledForÚloggingÚDEBUGÚtimer$  r!  rÅ   r%  r  r.  r0   Úinfor¶   r7  rQ   r}   r1  )
rc   r,  r-  rQ   Ústart_tsÚcreate_tensor_elapser6  Úload_elapseÚresÚbench_elapses
             r:   rß   ÚBenchmarkRequest.benchmarkÜ  so  € ô
 ×+Ñ+¬G¯M©MÓ:ˆÞÜ—y’y“{ˆHð ‰;Ø×)×)¨d×.E×.Eð Ø\óÐEô �}Ó%¨Ó*Ð*Ð*Ü!Ñ!P¸×9OÒ9OÓ!PÓPˆMØ×)Ñ)×3Ñ3Ó5ˆCæÜ#'§9¢9£;°Ñ#9Ð Ü—y’y“{ˆHð	 Ø×!Ò! =Ð:°cÑ:ˆBö ÜŸ)š)›+¨Ñ0ˆKÜ—y’y“{ˆHà�mŠm˜BÐ4 Ð4°Ò4ˆæÜŸ9š9›;¨Ñ1ˆLÜ× Ñ ØHÜ�D“	ØØ$Øôð 	×ÑÔØˆ
øô+ 1ó 	 ä×ÑÐ RÔSÜ˜“<Òð	 ús   Ã(F Æ*GÇG)r&  r$  r#  r!  )
r#  r}   r$  r  r!  r  r&  úIterable[Any]r°   r±   ©r-  r  r,  r  r°   zCallable[[], None]r·   ©r-  r  r,  úOptional[torch.Tensor]r°   r¶   )r4   r5   r6   r7   r¸   rd   r.  r1  r7  rß   r8   r2   r9   r:   r  r  ¤  s²   † ñð%àð%ð ?ð%ð @ð	%ð
 "ð%ð 
ô%ð<"Ø*ð"Ø1=ð"à	ô"ô
ð '+ñ	"ð %ð"ð $ð	"ð
 
õ"ð '+ñ,à$ð,ð $ð,ð 
÷	,ð ,r9   r  c                  ó^   • \ rS rSrSr     S         S	S jjrSS.     S
S jjrSrg)Ú_TestBenchmarkRequesti  zƒ
Supports unit testing. Defined in this file instead of the test file so the
TuningProcess sub-process can unpickle these objects.
Nc                ó@   • Xl         X l        X0l        X@l        XPl        g rA   )rJ   ra   ÚsleepÚexcÚcrash)rc   rJ   ra   rN  rO  rP  s         r:   rd   Ú_TestBenchmarkRequest.__init__  s   € ð ŒØŒØŒ
ØŒØ�
r9   r3  c               ó˜  • U R                   b=  [        R                  R                  [        S 5      [        U R                   5      :X  d   eU R                  (       a   [        R                  " U R                  5        U R                  (       a  U R                  eU R                  (       a  [        R                  " S5        U R                  $ )Nr)   )ra   rC   rD   rS   r-   r}   rN  r?  rO  rP  r{   ÚexitrJ   r+  s      r:   rß   Ú_TestBenchmarkRequest.benchmark  sx   € ð �;‰;Ñ"Ü—:‘:—>‘>Ô"6¸Ó=ÄÀTÇ[Á[ÓAQÓQÐQÐQØ�:�:Ü�JŠJ�t—z‘zÔ"Ø�8�8Ø—(‘(ˆNØ�:�:Ü�HŠH�QŒKØ�{‰{Ðr9   )rP  ra   rO  rJ   rN  )ç        NNNF)
rJ   r¶   ra   r³   rN  zOptional[float]rO  zOptional[Exception]rP  rµ   rI  )r4   r5   r6   r7   r¸   rd   rß   r8   r2   r9   r:   rL  rL    sv   † ñð Ø $Ø!%Ø#'Øðàðð ðð ð	ð
 !ðð õð KOñØ*ðØ1Gðà	÷ð r9   rL  c                  ó0   • \ rS rSrSS.     SS jjrSrg)ÚGPUDeviceBenchmarkMixini-  Nr3  c               ó¨  • [        S / UQUP 5       5      n[        U5      S::  d
   SU 35       e[        S U 5       S5      n[        U5      n[        U5      S:X  a  [        [	        U5      5      nOUR                  5       nUR                  U5         [        R                  " XS9nUR                  5         S S S 5        U$ ! , (       d  f       W$ = f)Nc              3  ó  #   • U  H{  n[        U[        R                  5      (       d  M$  [        UR                  R
                  5      (       d  MJ  UR                  R                  c  Mc  UR                  R                  v •  M}     g 7frA   )r›   ÚtorchÚTensorr   ra   ÚtypeÚindex©rû   Útensors     r:   rý   Ú3GPUDeviceBenchmarkMixin.do_bench.<locals>.<genexpr>4  s^   é € ð $
â/�Ü˜&¤%§,¡,×/ó  ô �v—}‘}×)Ñ)×*ó  ð —‘×#Ñ#ó	  ˆF�M‰M×ÖÚ/ùs   ‚#B©"BÁBÁ(Br)   zCan not mix devices c              3  óš   #   • U  HA  n[        UR                  R                  5      (       d  M)  UR                  R                  v •  MC     g 7frA   )r   ra   r\  r^  s     r:   rý   r`  =  s5   é € ð â+�FÜ˜&Ÿ-™-×,Ñ,×-ó #�—‘×"Ö"Ú+ùs
   ‚(A®AÚcudar½   )
r"   rÅ   Únextr   ÚiterÚcurrent_devicera   r+   rß   Úsynchronize)	rc   r6  r,  r-  Údevice_idx_setÚdevice_typerÓ   Ú
device_idxrD  s	            r:   r7  Ú GPUDeviceBenchmarkMixin.do_bench.  sá   € ô $ñ $
à/˜MÐ/¨3Ñ/ó$
ó 
ˆô �>Ó" aÓ'ÐPÐ+?ÀÐ?OÐ)PÓPÐ'Üñá+óð
 ó
ˆô 4°KÓ@ÐÜˆ~Ó !Ó#Üœd >Ó2Ó3‰Jà)×8Ñ8Ó:ˆJØ×$Ñ$ ZÕ0Ü×'Ò'¨Ñ?ˆCØ×(Ñ(Ô*÷ 1ð ˆ
÷	 1Ô0ð ˆ
ús   Â%CÃ
Cr2   rI  ©r4   r5   r6   r7   r7  r8   r2   r9   r:   rW  rW  -  s/   † ð
 '+ñ	ð %ðð $ð	ð
 
÷ð r9   rW  c                  ó0   • \ rS rSrSS.     SS jjrSrg)ÚCPUDeviceBenchmarkMixiniP  Nr3  c               ó.   • [         R                  " U5      $ rA   )r+   Úbenchmark_cpur5  s       r:   r7  Ú CPUDeviceBenchmarkMixin.do_benchQ  s   € ô ×(Ò(¨Ó,Ð,r9   r2   rI  rk  r2   r9   r:   rm  rm  P  s/   † ð
 '+ñ	-ð %ð-ð $ð	-ð
 
÷-ð -r9   rm  c                  ó¦   ^ • \ rS rSrSr       S                               S	U 4S jjjr      S
S jrS rSS jrSr	U =r
$ )ÚTritonBenchmarkRequestiZ  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                óª   >• [         TU ]  XX45        XPl        X`l        Xpl        X€l        X�l        X l        X°l        XÀl	        XÐl
        Xàl        Xðl        g rA   )Úsuperrd   Úmodule_pathÚmodule_cache_keyÚ
num_stagesÚ	num_warpsÚnum_consumer_groupsÚnum_buffers_warp_specÚmatrix_instr_nonkdimÚwaves_per_euÚkpackÚworkspace_sizeÚworkspace_zero_fill)rc   r#  r$  r!  r&  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  Ú	__class__s                   €r:   rd   ÚTritonBenchmarkRequest.__init__b  sT   ø€ ô$ 	‰Ñ˜Ð9KÔXØ&ÔØ 0ÔØ$ŒØ"ŒØ#6Ô Ø%:Ô"Ø$8Ô!Ø(ÔØŒ
Ø,ÔØ#6Õ r9   c               ó”  • [         R                  " U R                  U R                  5      n[        R                  SU R                  U R                  5        [        X0R                  5      R                  n[        U R                  5      nU R                  bu  SSKJn  [        R                  " U R                  4[        R                   UR"                  S9nU R$                  (       a  UR'                  5         UR)                  U5      nXuU'   SUR*                  l        0 n	SS Kn
SU
R1                  U5      R2                  ;   a  SU	S'   UR"                  R4                  S:X  a  SnOPUR"                  R4                  n[7        U5      nUR9                  U R:                  R"                  R(                  5      n[=        [        X0R                  5      [        R>                  R@                  RB                  RD                  5      (       a"  [F        RH                  " U/UQUPUQ70 U	DSU0D6$ [F        RH                  " U/UQUPUQ70 U	DUS	S
.D6$ )Nz"benchmark module key: %s, path: %sr   )ÚWORKSPACE_ARG_PLACEHOLDER©ró   ra   FÚwarmupÚcpuÚstreamT)r‡  Úbenchmark_run)%r   Úload_by_key_pathrv  ru  rP   rQ   r  r#  ÚrunrÐ   r&  r~  Ú torch._inductor.select_algorithmrƒ  rZ  ÚemptyÚuint8ra   r  Úzero_r]  Ú__self__Úwith_bandwidth_infoÚinspectÚ	signatureÚ
parametersr\  r   Úget_raw_streamr!  r›   Ú	_inductorÚruntimeÚtriton_heuristicsÚDebugAutotunerÚ	functoolsÚpartial)rc   r,  r-  ÚmodÚ
run_methodr&  rƒ  Úworkspace_tensorÚworkspace_indexÚ
warmup_argr‘  r‡  rh  rÓ   s                 r:   r.  Ú"TritonBenchmarkRequest.make_run_fn�  s+  € ô ×*Ò*¨4×+@Ñ+@À$×BRÑBRÓSˆÜ×ÑØ0Ø×!Ñ!Ø×Ñô	
ô ˜S×"2Ñ"2Ó3×7Ñ7ˆ
Ü˜$Ÿ/™/Ó*ˆ
ð
 ×ÑÑ*ÝRä$Ÿ{š{Ø×$Ñ$Ð&Ü—k‘kØ—z‘zñ Ðð
 ×'×'Ø ×&Ñ&Ô(Ø(×.Ñ.Ð/HÓIˆOØ*:�Ñ'à27ˆ
×ÑÔ/ð ˆ
Ûà�w×(Ñ(¨Ó4×?Ñ?Ó?Ø#(ˆJ�xÑ à�:‰:�?‰?˜eÓ#Ø‰FàŸ*™*Ÿ/™/ˆKÜ7¸ÓDÐØ%×4Ñ4Ø×'Ñ'×.Ñ.×4Ñ4óˆFô Ü�C×)Ñ)Ó*Ü�O‰O×#Ñ#×5Ñ5×DÑD÷
ñ 
ô ×$Ò$Øðàðð ðð ò	ð
 ñð òð ô ×$Ò$Øðàðð ðð ò	ð
 ðð Ø"óð r9   c                ó    • [         R                  " U R                  U R                  5      n[	        XR
                  5      R                  5         g rA   )r   r‰  rv  ru  r  r#  Ú
precompile)rc   r›  s     r:   r¢  Ú!TritonBenchmarkRequest.precompileÈ  s7   € Ü×*Ò*¨4×+@Ñ+@À$×BRÑBRÓSˆÜ�×%Ñ%Ó&×1Ñ1Õ3r9   c                óZ   • SU R                   < SU R                  < SU R                  < 3$ )Núself.kernel_name=z, self.module_path=z, self.module_cache_key=)r#  ru  rv  r�   s    r:   Ú__str__ÚTritonBenchmarkRequest.__str__Ì  s2   € Ø#�$×"Ñ"Ñ$Ð$8 t×'7Ñ'7Ñ&9Ð9R¸D×<QÑ<QÑ;SÐTÐTr9   )r}  r{  rv  ru  rz  ry  rw  rx  r|  r~  r  )r   r   r   r   r   NF) r#  r}   r$  r  r!  r  r&  rG  ru  r}   rv  r}   rw  rÏ   rx  rÏ   ry  rÏ   rz  rÏ   r{  rÏ   r|  rÏ   r}  rÏ   r~  r³   r  rµ   r°   r±   rH  ©r°   r}   )r4   r5   r6   r7   r¸   rd   r.  r¢  r¦  r8   Ú__classcell__©r€  s   @r:   rr  rr  Z  sû   ø† ñð" $%Ø%&Ø$%ØØØ(,Ø$)ð!7àð7ð ?ð7ð @ð	7ð
 "ð7ð ð7ð ð7ð ð7ð ð7ð !ð7ð  #ð7ð "ð7ð ð7ð ð7ð &ð7ð  "ð!7ð" 
÷#7ð 7ð>EØ*ðEØ1=ðEà	ôEòN4÷Uò Ur9   rr  c                  ó   • \ rS rSrSrg)ÚTritonGPUBenchmarkRequestiÐ  r2   Nr3   r2   r9   r:   r¬  r¬  Ð  r;   r9   r¬  c                  ó   • \ rS rSrSrg)ÚTritonCPUBenchmarkRequestiÔ  r2   Nr3   r2   r9   r:   r®  r®  Ô  r;   r9   r®  c                  ó¤   ^ • \ rS rSrSr  S               SU 4S jjjr      SS jrSS.   SU 4S jjjrSS jrS	 r	SS
 jr
SrU =r$ )Ú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                ó^   >• [         TU ]  XX45        XPl        U=(       d    0 U l        Xpl        g rA   )rt  rd   Úcallable_pathÚkwargsÚhas_out_variant)	rc   r#  r$  r!  r&  r²  r³  r´  r€  s	           €r:   rd   Ú%ExternKernelBenchmarkRequest.__init__á  s,   ø€ ô 	‰Ñ˜Ð9KÔXØ*ÔØ—l ˆŒØ.Õr9   c               ó¦   • U R                  5       nU R                  (       a  [        R                  " U/UQ7SU06$ [        R                  " U/UQ76 $ )Nr,  )Úto_callabler´  r™  rš  )rc   r,  r-  r6  s       r:   r.  Ú(ExternKernelBenchmarkRequest.make_run_fnð  sN   € ð ×ÑÓˆØ××ä×$Ò$ RÐA¨-ÒA¸SÑAÐAô ×$Ò$ RÐ8¨-Ò8Ð8r9   r3  c               ó*  >^^• Ub  UR                  5       S:X  a  gU R                  (       d  [        T5      S:X  a  [        TU ]  " TSU06$ U R                  5       mT" T6 nUbt  [        R                  R                  R                  R                  U[        UR                  5       5      [        UR                  5       5      5        UR                  U5        [        R                   (       a  [#        UU4S j5      $ [$        R                  " TT0 5      $ )Nr   rU  r,  c                 ó   >• T " T6 $ rA   r2   )Úalgor-  s   €€r:   Ú<lambda>Ú8ExternKernelBenchmarkRequest.benchmark.<locals>.<lambda>  s
   ø€ ¹¸mÑ8Lr9   )Únumelr´  rÅ   rt  rß   r·  rZ  Ú_CÚ_dynamoÚguardsÚassert_size_strider%  ÚsizeÚstrideÚcopy_r*   r~   r   r+   )rc   r,  r-  Úout_newr»  r€  s     ` @€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ôð —	‘	˜'Ô"Ü×E×EÜ/Õ0LÓMÐMÜ×(Ò(¨¨}¸bÓAÐAr9   c                ó   • g rA   r2   r�   s    r:   r¢  Ú'ExternKernelBenchmarkRequest.precompile  s   € àr9   c                ó    • SSK Jn  [        XR                  5      nU R                  (       a!  [
        R                  " U40 U R                  D6$ U$ )Nr   )Úextern_kernels)r‹  rË  r  r#  r³  r™  rš  )rc   rË  r6  s      r:   r·  Ú(ExternKernelBenchmarkRequest.to_callable  s>   € õ 	Dä�^×%5Ñ%5Ó6ˆØ�;�;Ü×$Ò$ RÑ7¨4¯;©;Ñ7Ð7àˆ	r9   c                ó"   • SU R                    S3$ )NzExternKernelBenchmarkRequest(Ú))r²  r�   s    r:   r¦  Ú$ExternKernelBenchmarkRequest.__str__  s   € Ø.¨t×/AÑ/AÐ.BÀ!ÐDÐDr9   )r²  r´  r³  )NT)r#  r}   r$  r  r!  r  r&  rG  r²  r}   r³  zOptional[dict[str, Any]]r´  rµ   r°   r±   rH  )r-  r  r,  rJ  r·   r¨  )r4   r5   r6   r7   r¸   rd   r.  rß   r¢  r·  r¦  r8   r©  rª  s   @r:   r°  r°  Ø  sÁ   ø† ñð ,0Ø $ð/àð/ð ?ð/ð @ð	/ð
 "ð/ð ð/ð )ð/ð ð/ð 
÷/ð /ð	9Ø*ð	9Ø1=ð	9à	ô	9ð KOñBØ*ðBØ1G÷Bð Bô(ò
÷Eò Er9   r°  c                  ó   • \ rS rSrSrg)ÚExternKernelGPUBenchmarkRequesti#  r2   Nr3   r2   r9   r:   rÑ  rÑ  #  ó   † ò 	r9   rÑ  c                  ó   • \ rS rSrSrg)ÚExternKernelCPUBenchmarkRequesti)  r2   Nr3   r2   r9   r:   rÔ  rÔ  )  rÒ  r9   rÔ  c                  ó�   ^ • \ rS rSrSr S             SU 4S jjjrS r      SS jrSS jrS r	SS jr
SS	 jrS
rU =r$ )ÚCUTLASSBenchmarkRequesti/  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                ó.  >• [         TU ]  XX45        XPl        SU l        S U l        S U l        SU l        SU l        SU l        X`l	        [        U l        [        U5      U l        U R                  R                  U R                  S5      u  U l        U l        g )Nr   FÚ Úso)rt  rd   Úsource_coder~  Ú	workspaceÚDLLÚ_workspace_size_updatedÚhash_keyÚsource_filerh  r   Úcodecache_clsr   rÓ   Úwrite)rc   r#  r$  r!  r&  rÚ  rh  r€  s          €r:   rd   Ú CUTLASSBenchmarkRequest.__init__9  sŽ   ø€ ô 	‰Ñ˜Ð9KÔXØ&ÔØ#$ˆÔØ15ˆŒØ)-ˆŒØ',ˆÔ$ØˆŒØ "ˆÔØ&ÔÜ*ˆÔÜ 8¸Ó EˆÔØ*.×*<Ñ*<×*BÑ*BØ×Ñ˜dó+
Ñ'ˆŒ�tÕ'r9   c                óž   • [         R                  SU 5        [        R                  " U R                  S5        [         R                  SU 5        g)zk
Precompile the CUDA source code to populate the CUDACodeCache.
This may happen in a separate thread pool.
úPrecompiling %srÙ  úDone precompiling %sN)rP   rQ   r   ÚcompilerÚ  r�   s    r:   r¢  Ú"CUTLASSBenchmarkRequest.precompileQ  s<   € ô
 	×ÑÐ.°Ô5Ü×Ò˜d×.Ñ.°Ô5Ü×ÑÐ3°TÕ:r9   c          	     óÎ  ^• U R                  5         U R                  5         [        U5      U/-    Vs/ s H  n[        UR	                  5       5      PM     nn[
        R                  SU R                  U R                  U R                  U R                  UU R                  5        U R                  R                  5       n[        UR                  5      n[        U R                  U R                  5      n[        S5      nU R                   S:”  af  ["        R$                  " U R                   S-   S-  ["        R&                  UR(                  S9U l        [        U R*                  R	                  5       5      n[,        R.                  " U/UQU R                  QSPUPUP76 n	 U	" 5         U	$ s  snf ! [0         a-  n
[3        U
5      mU4S jnU R5                  5         Us Sn
A
$ Sn
A
ff = f)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   é   é   r„  Nc                 ó   >• [        T 5      erA   )ÚRuntimeError)Úerr_msgs   €r:   Úraise_runtime_errorÚ@CUTLASSBenchmarkRequest.make_run_fn.<locals>.raise_runtime_error‰  s   ø€ Ü" 7Ó+Ð+r9   )Úensure_dll_loadedÚupdate_workspace_sizerÐ   r   Údata_ptrrP   rQ   r#  rß  rÞ  rÜ  r&  rÓ   Úcurrent_streamÚcuda_streamr  r~  rZ  ÚzerosÚfloat64ra   rÛ  r™  rš  rì  r}   r1  )rc   r,  r-  r_  Úargsró  Ú
stream_ptrrœ  Úworkspace_ptrÚretrK   rî  rí  s               @r:   r.  Ú#CUTLASSBenchmarkRequest.make_run_fnZ  s»  ø€ ð 	×ÑÔ Ø×"Ñ"Ô$Ü:>¸}Ó:MÐQTÐPUÒ:UÓVÒ:U°”˜Ÿ™Ó*Ö+Ñ:UˆÐVÜ×ÑØØ×ÑØ×ÑØ�M‰MØ�H‰HØØ�O‰Oô	
ð ×.Ñ.×=Ñ=Ó?ˆÜ˜n×8Ñ8Ó9ˆ
Ü˜TŸX™X t×'7Ñ'7Ó8ˆ
Ü  ›ˆØ×Ñ Ó"Ü"Ÿ[š[Ø×$Ñ$ qÑ(¨QÑ.Ü—m‘mØ—z‘zñˆDŒNô
 % T§^¡^×%<Ñ%<Ó%>Ó?ˆMô ×ÒØð
àð
ð �_‰_ð
ð ð	
ð
 ð
ð ò
ˆð		'ÙŒEð ˆ
ùòY WøôF ó 	'Ü˜!“fˆGõ,ð ×ÑÔ!Ø&Õ&ûð	'ús#   ³#F(ÆF- Æ-
G$Æ7"GÇG$ÇG$c           
     ó
  • U R                   (       a  g U R                  5         [        [        R	                  S U R
                   5       5      5      n[        US-   5       Vs/ s H  n[        S 5      PM     nnU R                  R                  5       n[        UR                  5      n[        U R                  U R                  5      n[        5       nU" / UQU R                  Q[!        U5      PS PUP76   U R                  R#                  5         UR$                  U l        [(        R+                  SU R&                  U R                  U R,                  U R.                  U R                  UU R                  5        SU l         g s  snf )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frA   )r÷   )rû   Úmetas     r:   rý   Ú@CUTLASSBenchmarkRequest.update_workspace_size.<locals>.<genexpr>–  s   é € ÐGÒ0F¨Ÿ)ž)Ò0Fùs   ‚r)   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ê   Úfromkeysr$  rÑ   r   rÓ   ró  rô  r  rÜ  r#  r   r&  r
   rf  Úvaluer~  rP   rQ   rß  rÞ  )rc   Úunique_input_countr�   r÷  ró  rø  rœ  Úc_workspace_sizes           r:   rñ  Ú-CUTLASSBenchmarkRequest.update_workspace_size‘  sa  € Ø×'×'ØØ×ÑÔ Ü Ü�M‰MÑG°×0FÒ0FÓGÓGó
Ðô ).Ð.@À1Ñ.DÔ(EÓFÒ(E 1”˜–Ñ(EˆÐFØ×.Ñ.×=Ñ=Ó?ˆÜ˜n×8Ñ8Ó9ˆ
ä˜TŸX™X t×'7Ñ'7Ó8ˆ
ä#›:ÐÙð 	
Øð	
à�_‰_ð	
ô Ø óð	
ð ð	
ð ó	
ð 	×Ñ×)Ñ)Ô+Ø.×4Ñ4ˆÔÜ×Ñð hØ×ÑØ×ÑØ×ÑØ�M‰MØ�H‰HØØ�O‰Oô		
ð (,ˆÕ$ùò9 Gs   Á"F c                ó’   • U R                   c:  U R                  R                  U R                  S5      u  U l         U l        U l        g g )NrÙ  )rÜ  rà  r^   rÚ  rÞ  rß  r�   s    r:   rð  Ú)CUTLASSBenchmarkRequest.ensure_dll_loaded¶  s@   € Ø�8‰8ÑØ8<×8JÑ8J×8OÑ8OØ× Ñ  $ó9Ñ5ˆDŒH�d”m TÕ%5ð r9   c                ón   • U R                   b!  U R                   R                  5         S U l         S U l        g rA   )rÜ  r‚   rÛ  r�   s    r:   r1  Ú&CUTLASSBenchmarkRequest.cleanup_run_fn¼  s(   € Ø�8‰8ÑØ�H‰H�N‰NÔØˆDŒHØˆ�r9   c                óZ   • SU R                   < SU R                  < SU R                  < 3$ )Nr¥  z, self.source_file=z, self.hash_key=)r#  rß  rÞ  r�   s    r:   r¦  ÚCUTLASSBenchmarkRequest.__str__Â  s0   € Ø#�$×"Ñ"Ñ$Ð$8 t×'7Ñ'7Ñ&9Ð9J¸D¿M¹MÑ;KÐLÐLr9   )
rÜ  rÝ  rà  rÓ   rh  rÞ  rÚ  rß  rÛ  r~  )rb  )r#  r}   r$  r  r!  r  r&  rG  rÚ  r}   rh  r}   r°   r±   rH  r·   r¨  )r4   r5   r6   r7   r¸   rd   r¢  r.  rñ  rð  r1  r¦  r8   r©  rª  s   @r:   rÖ  rÖ  /  s›   ø† ñð  "ð
àð
ð ?ð
ð @ð	
ð
 "ð
ð ð
ð ð
ð 
÷
ð 
ò0;ð5Ø*ð5Ø1=ð5à	ô5ôn#,òJô÷Mò Mr9   rÖ  c                  ój   ^ • \ rS rSr            SU 4S jjrS r      SS jrS	S jrSrU =r	$ )
ÚCppBenchmarkRequestiÆ  c                ó`   >• [         TU ]  XX45        XPl        [        U5      U l        S U l        g rA   )rt  rd   rÚ  r   rÞ  rÜ  )rc   r#  r$  r!  r&  rÚ  r€  s         €r:   rd   ÚCppBenchmarkRequest.__init__Ê  s.   ø€ ô 	‰Ñ˜Ð9KÔXØ&ÔÜ  Ó-ˆŒØ6:ˆ�r9   c                óš   • [         R                  SU 5        [        R                  " U R                  SS9  [         R                  SU 5        g )Nrä  r†  ©rh  rå  )rP   rQ   r   r^   rÚ  r�   s    r:   r¢  ÚCppBenchmarkRequest.precompile×  s<   € ô 	×ÑÐ.°Ô5Ü×Ò˜$×*Ñ*¸Ò>Ü×ÑÐ3°TÕ:r9   c               óh  • [         R                  " U R                  SS9U l        [	        U5      U/-    Vs/ s H  o3R                  5       PM     nn[        R                  SU R                  U R                  UU R                  5        [        U R                  U R                  5      n[        S U R                   5       5      (       d   e[        R                  /[        U5      [        [	        U R                  5      5      -   -  Ul        [         R"                  " U/UQU R                  Q76 $ s  snf )Nr†  r  zJmake_run_fn: self.kernel_name=%s, self.DLL=%s, args=%s, self.extra_args=%sc              3  óV   #   • U  H  n[        U[        R                  5      v •  M!     g 7frA   )r›   ÚctypesÚc_ulonglong)rû   Úargs     r:   rý   Ú2CppBenchmarkRequest.make_run_fn.<locals>.<genexpr>í  s    é € ÐRÂ/¸3”:˜c¤6×#5Ñ#5×6Ð6Â/ùs   ‚'))r   r^   rÚ  rÜ  rÐ   rò  rP   rQ   r#  r&  r  r  r  r  rÅ   Úargtypesr™  rš  )rc   r,  r-  r_  r÷  rœ  s         r:   r.  ÚCppBenchmarkRequest.make_run_fnÞ  s  € ô  ×$Ò$ 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ˆ
äÑRÀ$Ç/Â/ÓR×RÑRÐRÐRÜ%×1Ñ1Ð2Ü�‹IœœD §¡Ó1Ó2Ñ2ñ
ˆ
Ôô
 × Ò Øð
àð
ð �_‰_ò
ð 	
ùò! Ms   ¶D/c                ó"   • SU R                   < 3$ )Nr¥  )r#  r�   s    r:   r¦  ÚCppBenchmarkRequest.__str__ù  s   € Ø#�$×"Ñ"Ñ$Ð%Ð%r9   )rÜ  rÞ  rÚ  )r#  r}   r$  r  r!  r  r&  rG  rÚ  r}   r°   r±   rH  r¨  )
r4   r5   r6   r7   rd   r¢  r.  r¦  r8   r©  rª  s   @r:   r  r  Æ  so   ø† ð;àð;ð ?ð;ð @ð	;ð
 "ð;ð ð;ð 
÷;ò;ð
Ø*ð
Ø1=ð
à	ô
÷6&ò &r9   r  c                  ó^   ^ • \ rS rSrSr            SU 4S jjr      SS jrSrU =r$ )ÚCuteDSLBenchmarkRequestiý  z;Benchmark request for CuteDSL (CUTLASS Python DSL) kernels.c                óŒ   >• [         TU ]  XX45        UR                  5       n[        R                  " U5      u  U l        U l        g rA   )rt  rd   Úfinalize_allr   rá  rv  ru  )rc   r#  r$  r!  r&  rÚ  Úfinalized_coder€  s          €r:   rd   Ú CuteDSLBenchmarkRequest.__init__   s>   ø€ ô 	‰Ñ˜Ð9KÔXà$×1Ñ1Ó3ˆÜ2=×2CÒ2CÀNÓ2SÑ/ˆÔ˜tÕ/r9   c          	     ón  ^^^	• [         R                  " U R                  U R                  5      nSSKJn  U R                   SU 3n[        X55      (       dG  [        U5       Vs/ s H   n[        [        X65      5      (       d  M  UPM"     nn[        SU SU 35      e[        X55      m	UU	U4S jnU$ s  snf )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.
r)   )ÚMAIN_SUFFIXr�   z-Could not find CuteDSL main kernel function 'z'. Available callables: c                 ó~   >• [        S5      n U R                  TR                  R                  5      nT" / TQTP7SU06$ )Nrb  r‡  )r   r”  ra   r]  )rÓ   r‡  r-  Úkernel_funcr,  s     €€€r:   Ú
run_kernelÚ7CuteDSLBenchmarkRequest.make_run_fn.<locals>.run_kernel#  s@   ø€ Ü7¸Ó?ÐØ%×4Ñ4°S·Z±Z×5EÑ5EÓFˆFÙÐB ÐB¨sÒB¸6ÑBÐBr9   )r   r‰  rv  ru  Úcodegen.cutedsl.cutedsl_kernelr#  r#  ÚhasattrÚdirÚcallabler  rì  )
rc   r,  r-  r›  r#  Úmain_func_namer÷   Ú	availabler&  r%  s
    ``      @r:   r.  Ú#CuteDSLBenchmarkRequest.make_run_fn  s°   ú€ ô ×*Ò*¨4×+@Ñ+@À$×BRÑBRÓSˆõ 	@à ×,Ñ,Ð-¨Q¨{¨mÐ<ˆä�s×+Ñ+Ü*-¨c¬(ÓSª( $´h¼wÀsÓ?Q×6RŸ©(ˆIÐSÜØ?ÀÐ?OÐOgÐhqÐgrÐsóð ô ˜cÓ2ˆ÷	Cð
 Ðùò Ts   Á#B2ÂB2)rv  ru  )r#  r}   r$  r  r!  r  r&  ztuple[Any, ...]rÚ  r'   r°   r±   rH  )	r4   r5   r6   r7   r¸   rd   r.  r8   r©  rª  s   @r:   r  r  ý  so   ø† ÙEðTàðTð ?ðTð @ð	Tð
 $ðTð #ðTð 
÷TðØ*ðØ1=ðà	÷ò r9   r  c                 óZ   • [        5       n [        R                  " U R                  5        U $ rA   )r»   Úatexitry   r¢   )Úpools    r:   Úget_tuning_process_poolr2  +  s   € äÓ€DÜ
‡O‚O�D—M‘MÔ"Ø€Kr9   c                ó4   • [        5       R                  U 5      $ )zG
Do benchmarking in a subprocess and return the perf number (latency).
)r2  rß   )rí   s    r:   Úbenchmark_in_sub_processr4  2  s   € ô #Ó$×.Ñ.¨wÓ7Ð7r9   c                  óà   • \ rS rSr% SrSrS\S'   \R                  " 5       r	S\S'   Sr
S	\S
'   S r\S 5       r\S 5       rSS jrSS jrSS jrS rSS jrSS jrSS jrS r\S 5       rSrg)ÚAutotuneProcessPooli;  zf
Singleton pool manager for running autotuning (precompilation + benchmarking)
in a separate process.
NzOptional[AutotuneProcessPool]Ú	_instancezthreading.LockÚ_lockFrµ   Ú_shutdown_for_inactivityc                ót   • U R                  5       U l        S U l        S U l        U R	                  5       U l        g rA   )Ú
_init_poolÚ_poolÚ_warmup_futureÚ_warmup_start_timeÚ_init_timerÚ_timerr�   s    r:   rd   ÚAutotuneProcessPool.__init__E  s0   € Ø15·±Ó1BˆŒ
Ø26ˆÔØ04ˆÔØ$(×$4Ñ$4Ó$6ˆ�r9   c                óà   • U R                   c:  U R                     U R                   c  U " 5       U l         SSS5        U R                   $ U R                   $ ! , (       d  f       U R                   $ = f)z*Get or create the singleton pool instance.N)r7  r8  ©r  s    r:   Úget_instanceÚ AutotuneProcessPool.get_instanceK  sV   € ð �=‰=Ñ Ø—“Ø—=‘=Ñ(á$'£E�C”M÷ ð �}‰}Ðˆs�}‰}Ð÷	 ”ð �}‰}Ðús   šAÁ
A-c                óÀ   • [         R                  (       d   S5       eU R                  c*  U R                  5       U l        U R	                  5       U l        U R                  $ )zGet the process pool.zFTo use AutotuneProcessPool, pipeline_max_autotune_gemm must be enabled)r*   Úpipeline_max_autotune_gemmr<  r;  r?  r@  r�   s    r:   r1  ÚAutotuneProcessPool.poolU  sQ   € ô ×0×0ð 	
ØTó	
Ð0ð �:‰:ÑØŸ™Ó*ˆDŒJØ×*Ñ*Ó,ˆDŒKØ�z‰zÐr9   c                óL   • [         S:”  a  [        [         U R                  5      $ g )Nr   )Ú AUTOTUNE_POOL_INACTIVITY_TIMEOUTr   Ú_on_inactivity_timeoutr�   s    r:   r?  ÚAutotuneProcessPool._init_timer`  s!   € Ü+¨aÓ/ÜÔ9¸4×;VÑ;VÓWÐWØr9   c                óT   • U R                   b  U R                   R                  5         g g rA   )r@  Úrecord_callr�   s    r:   Ú_record_activityÚ$AutotuneProcessPool._record_activitye  s!   € Ø�;‰;Ñ"Ø�K‰K×#Ñ#Õ%ð #r9   c                ó  • [         R                  S[        5        U R                     U R                  b   U R                  R                  SS9  S U l        S U l        S[        l        S S S 5        g ! , (       d  f       g = f)NzAAutotuneProcessPool shutting down due to inactivity (timeout=%ds)Fr¬   T)	rP   r@  rJ  r8  r<  r¢   r@  r6  r9  r�   s    r:   rK  Ú*AutotuneProcessPool._on_inactivity_timeouti  sb   € Ü×ÑØOÜ,ô	
ð
 �Z‹ZØ�z‰zÑ%Ø—
‘
×#Ñ#¨Ð#Ñ/Ø!�”
ØˆDŒKð
 <@ÔÔ8÷ �ZŽZús   §A A0Á0
A>c                ó°   • [         R                  " S5      n[        SUS9n[        R                  " U R
                  5        [        R                  S5        U$ )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.
Úspawnr)   )r¿   Ú
mp_contextz2AutotuneProcessPool created (workers spawn lazily))ÚmpÚget_contextr   r0  ry   Ú	_shutdownrP   r@  )rc   Úctxr1  s      r:   r;  ÚAutotuneProcessPool._init_poolz  sH   € ô �nŠn˜WÓ%ˆÜ"ØØñ
ˆô 	�Š˜Ÿ™Ô'Ü×ÑÐPÔQàˆr9   c                ó  • U R                   cÑ  U R                     U R                   c£  [        R                  " 5       U l        U R
                  R                  [        [        R                  R                  R                  R                  S9U l         U R                   R                  U R                  5        [        R!                  S5        SSS5        U R                   $ U R                   $ ! , (       d  f       U R                   $ = f)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)Ú
allow_tf32zWarmup job submitted)r=  r8  r?  Úperf_counterr>  r1  ÚsubmitÚ_init_autotune_subprocessrZ  Úbackendsrb  Úmatmulr\  Úadd_done_callbackÚ_on_warmup_completerP   r@  r�   s    r:   Úwarm_upÚAutotuneProcessPool.warm_upŽ  sË   € ð ×ÑÑ&Ø—“Ø×&Ñ&Ñ.Ü.2×.?Ò.?Ó.A�DÔ+Ø*.¯)©)×*:Ñ*:Ü1Ü#(§>¡>×#6Ñ#6×#=Ñ#=×#HÑ#Hð +;ð +�DÔ'ð ×'Ñ'×9Ñ9¸$×:RÑ:RÔSÜ"×'Ñ'Ð(>Ô?÷ ð ×"Ñ"Ð"ˆt×"Ñ"Ð"÷ ”ð ×"Ñ"Ð"ús   šB1C+Ã+
Dc                ó
  • SnU R                   b"  [        R                  " 5       U R                   -
  n UR                  5       n[        R                  SUU5        g! [         a  n[        R                  SU5        UeSnAff = f)z/Callback invoked when the warmup job completes.NzEAutotuneProcessPool warmup completed successfully in %.4f seconds: %sz4AutotuneProcessPool warmup failed after %.4f seconds)r>  r?  r]  rJ   rP   r@  rF   r©   )rc   ÚfutureÚwarmup_elapsed_timerJ   rK   s        r:   rc  Ú'AutotuneProcessPool._on_warmup_complete¢  s‚   € à"ÐØ×"Ñ"Ñ.Ü"&×"3Ò"3Ó"5¸×8OÑ8OÑ"OÐð	Ø—]‘]“_ˆFÜ×ÑØWØ#Øõøô
 ó 	Ü× Ñ ØFØ#ôð ˆGûð	ús   ³'A Á
BÁ%A=Á=Bc                óŒ   ^ • T R                   R                  " U/UQ70 UD6nT R                  b  UR                  U 4S j5        U$ )z-Submit a job to the pool and return a Future.c                ó$   >• TR                  5       $ rA   )rO  )r�   rc   s    €r:   r¼  Ú,AutotuneProcessPool.submit.<locals>.<lambda>º  s   ø€ ¨t×/DÑ/DÔ/Fr9   )r1  r^  r@  rb  )rc   r6  r÷  r³  rg  s   `    r:   r^  ÚAutotuneProcessPool.submit¶  s?   ø€ à—‘×!Ò! "Ð6 tÒ6¨vÑ6ˆØ�;‰;Ñ"Ø×$Ñ$Ô%FÔGØˆr9   c                ó¼   • U R                   b!  U R                   R                  5         SU l         U R                  b!  U R                  R                  SS9  SU l        gg)zShutdown the pool on exit.NFr¬   )r@  Úquitr<  r¢   r�   s    r:   rX  ÚAutotuneProcessPool._shutdown½  sN   € à�;‰;Ñ"Ø�K‰K×ÑÔØˆDŒKØ�:‰:Ñ!Ø�J‰J×Ñ UÐÑ+ØˆD�Jð "r9   c                óÈ   • U R                   bD  U R                     U R                   b!  U R                   R                  5         SU l         SSS5        gg! , (       d  f       g= f)z+Explicitly shutdown the singleton instance.N©r7  r8  rX  rC  s    r:   Úshutdown_instanceÚ%AutotuneProcessPool.shutdown_instanceÆ  sH   € ð �=‰=Ñ$Ø—“Ø—=‘=Ñ,Ø—M‘M×+Ñ+Ô-Ø$(�C”M÷ �ð %ß•ús   š/AÁ
A!)r<  r@  r=  r>  )r°   zTimer | Noner·   )r°   úFuture[Any])rg  ru  r°   r±   )r4   r5   r6   r7   r¸   r7  r  Ú	threadingÚLockr8  r9  rd   r  rD  Úpropertyr1  r?  rO  rK  r;  rd  rc  r^  rX  rs  r8   r2   r9   r:   r6  r6  ;  sš   ‡ ñð
 04€IÐ,Ó3Ø%ŸNšNÓ,€Eˆ>Ó,Ø%*Ð˜dÓ*ò7ð ñó ðð ñó ðôô
&ô@ò"ô(#ô(ô(òð ñ)ó ó)r9   r6  c                 óZ   • [         R                  =(       a    [        R                  (       + $ rA   )r*   rG  r6  r9  r2   r9   r:   Úuse_pipelined_autotuningrz  Ð  s!   € ä×)Ñ)÷ 	=Ü#×<Ñ<Ô<ðr9   c                ó´   • SSK nUR                  R                  5       (       a  UR                  " SSS9  XR                  R                  R
                  l        g)z1
Warmup function run in the autotune subprocess.
r   Nr)   rb  r½   T)rZ  rb  Úis_availablerõ  r`  ra  r\  )r\  rZ  s     r:   r_  r_  ×  sC   € ó ð ‡z�z×Ñ× Ñ Ø�Š�A˜fÒ%à,6‡N�N×Ñ×ÑÔ)àr9   c                óŠ   •  U R                  5       nU$ ! [         a$    [        R                  SU 5        [	        S5      s $ f = f)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 %srÜ   )rß   rF   rP   r©   r¶   )Úbenchmark_requestÚtimings     r:   Úrun_autotune_in_subprocessr€  æ  sI   € ð à"×,Ñ,Ó.ˆàˆøäó Ü×ÑØ+Øô	
ô
 �U‹|Òðús   ‚ ”+AÁAc                  ó”   • \ rS rSr% SrSrS\S'   \R                  " 5       r	SSS jjr
\SS j5       rS rSSS	 jjr\SS
 j5       rSrg)ÚPrecompileThreadPooli  z¢
Thread pool for running precompilation asynchronously.

This allows the main compilation process to continue while
precompilation happens in background threads.
NzOptional[PrecompileThreadPool]r7  c                ó    • [        US9U l        g )Nr¾   )r	   Ú	_executor)rc   r¿   s     r:   rd   ÚPrecompileThreadPool.__init__  s   € Ü+¸ÑDˆ�r9   c                óø   • SSK Jn  U R                  c@  U R                     U R                  c  U " U" 5       5      U l        S S S 5        U R                  $ U R                  $ ! , (       d  f       U R                  $ = f)Nr   )Úget_num_workers)r‹  r‡  r7  r8  )r  r‡  s     r:   rD  Ú!PrecompileThreadPool.get_instance  s]   € åDà�=‰=Ñ Ø—“Ø—=‘=Ñ(Ù$'©Ó(9Ó$:�C”M÷ ð �}‰}Ðˆs�}‰}Ð÷ ”ð �}‰}Ðús     A Á 
A9c                óB   • U R                   R                  " U/UQ70 UD6$ rA   )r„  r^  )rc   r6  r÷  r³  s       r:   r^  ÚPrecompileThreadPool.submit  s!   € Ø�~‰~×$Ò$ RÐ9¨$Ò9°&Ñ9Ð9r9   c                ó4   • U R                   R                  US9$ )Nr¬   )r„  r¢   r¡   s     r:   rX  ÚPrecompileThreadPool._shutdown   s   € Ø�~‰~×&Ñ&¨DÐ&Ð1Ð1r9   c                óÆ   • U R                   bC  U R                     U R                   b   U R                   R                  SS9  S U l         S S S 5        g g ! , (       d  f       g = f)NFr¬   rr  rC  s    r:   rs  Ú&PrecompileThreadPool.shutdown_instance#  sK   € à�=‰=Ñ$Ø—“Ø—=‘=Ñ,Ø—M‘M×+Ñ+°Ð+Ñ7Ø$(�C”M÷ �ð %ß•ús   š.AÁ
A )r„  )é   )r¿   rÏ   )r°   r‚  )F)r    rµ   r·   )r4   r5   r6   r7   r¸   r7  r  rv  rw  r8  rd   r  rD  r^  rX  rs  r8   r2   r9   r:   r‚  r‚    sX   ‡ ñð 15€IÐ-Ó4Ø�NŠNÓ€EöEð óó ðò:ö2ð ó)ó ó)r9   r‚  c                  ód   • \ rS rSrSr0 r\SS j5       r\S	S j5       r	\      S
S j5       r
Srg)ÚAsyncAutotuneri,  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                ó(   • U R                  5       U-   $ rA   )rÞ  )rã   Ú
inputs_keys     r:   Úget_choice_hashÚAsyncAutotuner.get_choice_hash=  s   € à�‰Ó  :Ñ-Ð-r9   c                ó   • U Hˆ  n[         R                  X25      nU[         R                  ;   a  M.  [        USS5      c   S5       e[        R                  5       R                  [        UR                  5      nU[         R                  U'   MŠ     g)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‘  r”  Úchoice_hash_to_futurer  r6  rD  r^  r€  rÞ   )r  rí   r“  rã   Úchoice_hashÚautotune_futures         r:   rb   ÚAsyncAutotuner.startA  s‡   € ó ˆFÜ(×8Ñ8¸ÓLˆKàœn×BÑBÓBÙä˜6 7¨DÓ1Ñ=ð Ø*óÐ=ô 2×>Ñ>Ó@×GÑGÜ*Ø—‘óˆOð
 APŒN×0Ñ0°Ó=ò r9   c                óŒ   • 0 nU H;  n[         R                  XB5      n[         R                  U   R                  5       X4'   M=     U$ )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‘  r”  r—  rJ   )r  rí   r“  Útimingsrã   r˜  s         r:   Úget_resultsÚAsyncAutotuner.get_results]  sE   € ð ˆÛˆFÜ(×8Ñ8¸ÓLˆKÜ,×BÑBÀ;ÑO×VÑVÓXˆG‹Oñ ð ˆr9   r2   N)rã   r&   r“  r}   r°   r}   )rí   úlist[ChoiceCaller]r“  r}   )rí   rŸ  r“  r}   r°   zdict[ChoiceCaller, float])r4   r5   r6   r7   r¸   r—  r¹   r”  r  rb   r�  r8   r2   r9   r:   r‘  r‘  ,  sc   † ñð Ðàó.ó ð.ð óPó ðPð6 ðØ(ðØ69ðà	"óó ór9   r‘  )r°   r»   rð   r´   )r\  rµ   r°   rµ   )r~  r  r°   r¶   )pÚ
__future__r   r0  r  Údataclassesr™  r=  ÚmultiprocessingrV  rC   rX   rÂ   rv   r   r{   rv  r?  rá   Úcollections.abcr   r   r   Úconcurrent.futuresr   r   r	   r
   r   r   r   Útypingr   r   r   r   r   rZ  Útorch._inductor.async_compileÚtorch._dynamo.device_interfacer   Útorch._dynamo.testingr   Útorch._inductorr   Útorch._inductor.codecacher   r   r   r   r   Ú$torch._inductor.compile_worker.timerr   Útorch._inductor.utilsr   r   r   r   r    Útorch._loggingr!   Útorch.utils._ordered_setr"   rÏ   rD   rS   rJ  Útypesr%   r‹  r&   r'   r(   rØ  r*   Úruntime.benchmarkingr+   Úvirtualizedr,   r-   r4   rP   rF   r0   r=   r»   r  r  ÚLayoutOrBufferÚ	dataclassrò   r  rL  rW  rm  rr  r¬  r®  r°  rÑ  rÔ  rÖ  r  r  Úcacher2  r4  r6  rz  r_  r€  r‚  r‘  r2   r9   r:   Ú<module>rµ     s~  ðå "ã Û Û Û Û Û Û 	Û Û Û Û Û 
Û Û Û ß 8Ñ 8ß NÑ Nß 2Ó 2ß :Õ :ã Û $Ý CÝ .Ý ÷õ õ 7÷õ õ -Ý /ñ
 $'Ø‡J�J‡N�NÐCÀUÓKó$Ð  ö Ý ÷ñ õ Ý -Ý ð .Ð á" 8¨\Ó:€ô	¨	ô 	÷tñ t÷nlñ lð^ �r—y‘y "§)¡)Ð+Ñ,€ð ×Ñ÷*
ð *
ó ð*
ðZ ×Ñ÷cð có ðcôLÐ,ô ÷D ñ  ÷F-ñ -ôsUÐ-ô sUôl	Ð 7Ð9Oô 	ô	Ð 7Ð9Oô 	ôHEÐ#3ô HEôV	ØÐ9ô	ô	ØÐ9ô	ôTMÐ5Ð7Gô TMôn4&Ð1Ð3Cô 4&ôn+Ð5Ð7Gô +ð\ ‡�óó ðð8Ø'ð8à&ô8÷R)ñ R)ôjôðØ'ðà
ô÷>$)ñ $)÷NCò Cr9   