Ë
    g^(h €  ã                  ó  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZmZmZmZ d dlZd dlZd dlmZ d dlmZ d d	lm Z  d d
l!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ erd dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl8m<Z< ddl=m>Z> ddl?m@Z@ dZAdaB e-eCd«      ZD ejŠ                  eC«      ZF G d„ d«      ZG G d„ d«      ZH G d „ d!eI«      ZJej–                  d<d"„«       ZLejš                   G d#„ d$«      «       ZNejš                   G d%„ d&«      «       ZO eO«       ZPee"j¢                  e"j¤                  f   ZSejš                   G d'„ d(«      «       ZTejš                   G d)„ d*«      «       ZU G d+„ d,eU«      ZV G d-„ d.«      ZW G d/„ d0«      ZX G d1„ d2eU«      ZY G d3„ d4eWeY«      ZZ G d5„ d6eXeY«      Z[ G d7„ d8eWeU«      Z\ G d9„ d:eXeU«      Z]	 	 	 	 d=d;„Z^y)>é    )ÚannotationsN)ÚIterableÚSequence)ÚThreadPoolExecutor)ÚbyrefÚc_size_tÚc_void_pÚCDLL)ÚAnyÚCallableÚOptionalÚTYPE_CHECKINGÚUnion)Úmultiprocessing)Úget_interface_for_device)Úrand_strided)Úir)ÚCppCodeCacheÚCUDACodeCacheÚ
DLLWrapperÚget_hashÚPyCodeCache)Úget_gpu_typeÚis_gpu)ÚgetArtifactLogger)Ú
OrderedSet)ÚBaseProcess)ÚQueue)Ú
ModuleType)ÚTritonTemplateCalleré   )ÚWorkspaceArg)Úconfig)ÚWorkspaceZeroMode)Úbenchmarker)ÚVÚCUDA_VISIBLE_DEVICESFÚ
autotuningc                  ó   — e Zd Zy)ÚPingN©Ú__name__Ú
__module__Ú__qualname__© ó    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/autotune_process.pyr*   r*   ;   ó   „ Ør0   r*   c                  ó   — e Zd Zy)ÚPongNr+   r/   r0   r1   r4   r4   ?   r2   r0   r4   c                  ó   — e Zd Zy)Ú!NonzeroWorkspaceNotSupportedErrorNr+   r/   r0   r1   r6   r6   C   r2   r0   r6   c              #  óp  K  — | €d–— yt         j                  j                  t        «      }t	        | «      t         j                  t        <   	 d–— |€t         j                  t        = y|t         j                  t        <   y# |€t         j                  t        = w |t         j                  t        <   w xY w­w)z§
    Context manager to set the CUDA_VISIBLE_DEVICES environment variable to the
    specified single device. If device is None, don't manipulate the environment.
    N)ÚosÚenvironÚgetr'   Ústr)ÚdeviceÚcurrents     r1   Úset_cuda_visible_devicer>   G   s†   è ø€ ð €~ÛØä�j‰j�n‰nÔ1Ó2€GÜ'*¨6£{„B‡J�JÔ#Ñ$ð7Ûàˆ?Ü—
‘
Ô/Ñ0à/6ŒB�J‰JÔ+Ò,øð ˆ?Ü—
‘
Ô/Ñ0à/6ŒB�J‰JÔ+Ò,üs   ‚AB6ÁB Á0B6Â1B3Â3B6c                  óÂ   — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   e		 	 	 	 	 	 dd
„«       Z
e	dd„«       Zdd„Zdd„Zdd„Zdd„Z	 d	 dd„Zdd„Zdd„Zddd„Zy)ÚTuningProcessz»
    Abstraction for launching a helper process to benchmark kernels. Spawns
    the parent process and uses multiprocessing queues to send benchmark
    requests and return results.
    NúOptional[int]r<   zOptional[BaseProcess]ÚprocesszOptional[Queue[Any]]Úrequest_queueÚresponse_queuec                óè   — t         j                  dt        j                  j	                  t
        «      «       	 t        j                  | |«       y# t        $ r t         j                  d«       Y yw xY w)z4
        Entry point for the child process.
        z2Entering TuningProcess child. Visible devices = %szException in TuningProcessN)
Úautotuning_logÚdebugr8   r9   r:   r'   r@   ÚworkloopÚ	ExceptionÚ	exception)rC   rD   s     r1   Úprocess_mainzTuningProcess.process_maini   s\   € ô 	×ÑØ@Ü�J‰J�N‰NÔ/Ó0ô	
ð	CÜ×"Ñ" =°.ÕAøÜò 	CÜ×$Ñ$Ð%AÖBð	Cús   ¹A ÁA1Á0A1c                ó  — 	 | j                  «       }|€yt        |t        «      r|j                  t	        «       «       nGt        |t
        «      r |j                  |j                  «       «       nt        dt        |«      › �«      ‚Œ…)z<
        Work loop for the benchmarking subprocess.
        NzInvalid request type )	r:   Ú
isinstancer*   Úputr4   ÚBenchmarkRequestÚ	benchmarkÚRuntimeErrorÚtype)rC   rD   Úobjs      r1   rH   zTuningProcess.workloopz   sr   € ð
 Ø×#Ñ#Ó%ˆCàˆ{ØÜ˜C¤Ô&Ø×"Ñ"¤4£6Õ*Ü˜CÔ!1Ô2Ø×"Ñ" 3§=¡=£?Õ3ä"Ð%:¼4À»9¸+Ð#FÓGÐGð r0   c                ó^   — | j                   duxr | j                  duxr | j                  duS )z?
        True if the sub-process has been initialized.
        N©rB   rC   rD   ©Úselfs    r1   ÚvalidzTuningProcess.valid‹   s;   € ð
 �L‰L Ð$ò 0Ø×"Ñ"¨$Ð.ò0à×#Ñ#¨4Ð/ð	
r0   c                ó.   — dx| _         x| _        | _        y)z2
        Reset to an uninitialized state.
        NrU   rV   s    r1   ÚclearzTuningProcess.clear•   s   € ð CGÐFˆŒÐF�tÔ)¨DÕ,?r0   c                ó¸  — | j                  «       ryt        j                  d«      }|j                  «       | _        |j                  «       | _        |j                  | j                  | j                  | j
                  f¬«      | _        | j                  €J ‚t        | j                  «      5  | j                  j                  «        ddd«       y# 1 sw Y   yxY w)zµ
        Create child process, request/response queues, and do the warm up.
        Set the environment to make only the provided GPU device visible
        to the process.
        NÚspawn)ÚtargetÚargs)rX   r   Úget_contextr   rC   rD   ÚProcessrK   rB   r>   r<   Ústart)rW   Úctxs     r1   Ú
initializezTuningProcess.initialize›   s¶   € ð �:‰:Œ<Øô ×)Ñ)¨'Ó2ˆØ ŸY™Y›[ˆÔØ!Ÿi™i›kˆÔà—{‘{Ø×$Ñ$à×"Ñ"Ø×#Ñ#ðð #ó 
ˆŒð �|‰|Ð'Ð'Ð'Ü$ T§[¡[Ó1ñ 	!Ø�L‰L×ÑÔ ÷	!÷ 	!ñ 	!ús   Â,CÃCc                óv   — | j                  «        | j                  €J ‚| j                  j                  |«       y)z8
        Push a work item to the child process.
        N)rc   rC   rN   )rW   rS   s     r1   rN   zTuningProcess.put´   s4   € ð
 	�‰ÔØ×!Ñ!Ð-Ð-Ð-Ø×Ñ×Ñ˜sÕ#r0   c                óþ  — | j                   €J ‚| j                  €J ‚	 	 |}d}|�(|dk\  r#|dz  }	 | j                  j                  d¬«      }	 |€| j                  j                  |¬«      }|S # t        j                  $ r | j                   j                  «       s‚ Y nw xY w|€ŒW|dk\  rŒ€Œ^# t        j                  $ r> | j                   j                  }|€| j                  ||¬«       ‚ | j                  «        ‚ w xY w)a,  
        Get a response from the child process. Raises queue.Empty on timeout
        or if the process dies.

        This method is (so far) only used by TuningProcessPool, where torch._inductor.config entries are being used
        to populate the timeouts:

        Arguments:

            @param result_timeout: Timeout in seconds, defaults to 120.0 or to
                                   config.max_autotune_subproc_result_timeout_seconds when called by TuningProcessPool
            @param graceful_timeout: Timeout in seconds to allow graceful shutdown (SIGTERM is sent after this time).
                                    Defaults to 3.0 or to config.max_autotune_subproc_graceful_timeout_seconds
            @param terminate_timeout: Timeout in seconds after SIGTERM, until we send SIGKILL if the process
                                      remains alive. Defaults to 1.0 or to
                                      config.max_autotune_subproc_terminate_timeout_seconds.
        Returns:
            A response from the child process (Any type)
        Nç      ð?g      à?©Útimeout)Úgraceful_timeoutÚterminate_timeout)	rB   rD   r:   ÚqueueÚEmptyÚis_aliveÚexitcodeÚkillrZ   )rW   Úresult_timeoutri   rj   Úremaining_timeoutÚresÚstatuss          r1   r:   zTuningProcess.get½   s)  € ð, �|‰|Ð'Ð'Ð'Ø×"Ñ"Ð.Ð.Ð.ØðØ$2Ð!Ø�Ø'Ð3Ð8IÈSÒ8PØ%¨Ñ,Ð%ð"Ø"×1Ñ1×5Ñ5¸cÐ5ÓB˜Øð �;Ø×-Ñ-×1Ñ1Ð:KÐ1ÓL�CØ�
øô !Ÿ;™;ò "Ø#Ÿ|™|×4Ñ4Ô6Ø!ñ  7ð"úð (Ñ3Ð8IÈSÓ8Pùô —;‘;ò 
ØŸ™×.Ñ.�Ø�>Ø—I‘IØ)9Ø*;ð ô ð ð —J‘J”LØð
ús5   ŸB+ °A- Á B+ Á-.BÂB+ ÂBÂB+ Â$B+ Â+AC<c                ó”   — | j                  «       r8| j                  €J ‚| j                  €J ‚| j                  j                  d«       yy)z8
        Signal the child process to terminate.
        N)rX   rB   rC   rN   rV   s    r1   Ú	terminatezTuningProcess.terminateð   sH   € ð �:‰:Œ<Ø—<‘<Ð+Ð+Ð+Ø×%Ñ%Ð1Ð1Ð1Ø×Ñ×"Ñ" 4Õ(ð r0   c                ór   — | j                   �+| j                   j                  «        | j                  «        yy)z5
        Wait for the child process to exit.
        N)rB   ÚjoinrZ   rV   s    r1   ÚwaitzTuningProcess.waitù   s,   € ð �<‰<Ð#Ø�L‰L×ÑÔØ�J‰J�Lð $r0   c                óH  — | j                   ��| j                  «        | j                   j                  |¬«       | j                   j                  «       r¾t        j                  d| j                   j                  «       | j                   j                  «        | j                   j                  |¬«       | j                   j                  «       rDt        j                  d| j                   j                  «       | j                   j                  «        | j                  «        y y )Nrg   z&Sending SIGTERM to process with PID %dz&Sending SIGKILL to process with PID %d)
rB   ru   rw   rm   rF   ÚwarningÚpidÚerrorro   rZ   )rW   ri   rj   s      r1   ro   zTuningProcess.kill  sÒ   € ð
 �<‰<Ñ#Ø�N‰NÔØ�L‰L×ÑÐ&6ÐÔ7Ø�|‰|×$Ñ$Ô&Ü×&Ñ&Ø<Ø—L‘L×$Ñ$ôð —‘×&Ñ&Ô(Ø—‘×!Ñ!Ð*;Ð!Ô<Ø—<‘<×(Ñ(Ô*Ü"×(Ñ(Ø@ØŸ™×(Ñ(ôð —L‘L×%Ñ%Ô'Ø�J‰J�Lð! $r0   )rC   ú
Queue[Any]rD   r}   ÚreturnÚNone)r~   Úbool©r~   r   )rS   r   r~   r   )g      ^@g      @rf   )r~   r   )g      @rf   )r,   r-   r.   Ú__doc__r<   Ú__annotations__rB   rC   rD   ÚstaticmethodrK   rH   rX   rZ   rc   rN   r:   ru   rx   ro   r/   r0   r1   r@   r@   \   s´   … ñð !€FˆMÓ Ø%)€GÐ"Ó)Ø*.€MÐ'Ó.Ø+/€NÐ(Ó/àðCØ!ðCà"ðCð 
òCó ðCð  òHó ðHó 
óGó!ó2$ð MPð1à	ó1óf)óõr0   r@   c                  ó^   — e Zd ZU dZdZded<   dZded<   dd„Zdd„Zdd	„Z	dd
„Z
	 	 	 	 dd„Zy)ÚTuningProcessPoolzß
    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.
    Nz$Optional[queue.Queue[TuningProcess]]Ú	processeszOptional[ThreadPoolExecutor]Úexecutorc                ó†  — | j                   du | j                  du k(  sJ ‚| j                   �y| j                  «       }t        j	                  d|«       t        j                  «       | _         |D ]R  }t        |¬«      }|j                  «        |j                  t        «       «       | j                   j                  |«       ŒT | j                   j
                  D ]$  }t        |j                  d¬«      t        «      rŒ$J ‚ t        t        |«      ¬«      | _        t         s"daddl}|j%                  | j&                  «       yy)z,
        Start the child processes.
        Nz$Sub-process autotune device list: %s)r<   )rp   )Úmax_workersTr   )r‡   rˆ   Úget_device_listÚlogrG   rk   r   r@   rc   rN   r*   rM   r:   r4   r   ÚlenÚEXIT_HANDLER_REGISTEREDÚatexitÚregisterru   )rW   Údevicesr<   Úpr�   s        r1   rc   zTuningProcessPool.initialize$  s  € ð —‘ $Ð&¨D¯M©M¸TÐ,AÒBÐBÐBØ�>‰>Ð%Øà×&Ñ&Ó(ˆÜ�	‰	Ð8¸'ÔBô Ÿ™›ˆŒØò 	"ˆFÜ VÔ,ˆAØ�L‰LŒNØ�E‰E”$“&ŒMØ�N‰N×Ñ˜qÕ!ð		"ð —‘×%Ñ%ò 	@ˆAÜ˜aŸe™e°4˜eÓ8¼$Õ?Ð?Ð?ð	@ô +´s¸7³|ÔDˆŒõ
 'Ø&*Ð#Ûà�O‰O˜DŸN™NÕ+ð	 'r0   c                ól  — t         j                  sdgS t        «       }t        |«      }|j	                  «       }t
        t        j                  v rNt        j                  t
           j                  d«      D �cg c]  }t        |«      ‘Œ }}t        |«      |k  sJ ‚|S t        t        |«      «      S c c}w )zD
        Gather the list of devices to be used in the pool.
        Nú,)r#   Úautotune_multi_devicer   r   Údevice_countr'   r8   r9   ÚsplitÚintr�   ÚlistÚrange)rW   Úgpu_typeÚdevice_interfaceÚcountÚdr‘   s         r1   r‹   z!TuningProcessPool.get_device_listI  sš   € ô ×+Ò+à�6ˆMä“>ˆÜ3°HÓ=ÐØ ×-Ñ-Ó/ˆô  ¤2§:¡:Ñ-Ü')§z¡zÔ2FÑ'G×'MÑ'MÈcÓ'RÖS !”s˜1•vÐSˆGÐSÜ�w“< 5Ò(Ð(Ð(ØˆNä”E˜%“LÓ!Ð!ùò	 Ts   Á7B1c                ó2  — | j                   �!| j                   j                  «        d| _         | j                  �^| j                  j                  D ]  }|j	                  «        Œ | j                  j                  D ]  }|j                  «        Œ d| _        yy)z:
        Signal all child processes to terminate.
        N)rˆ   Úshutdownr‡   rk   ru   rx   )rW   r’   s     r1   ru   zTuningProcessPool.terminate]  s   € ð �=‰=Ð$Ø�M‰M×"Ñ"Ô$Ø ˆDŒMà�>‰>Ð%Ø—^‘^×)Ñ)ò �Ø—‘•ðà—^‘^×)Ñ)ò �Ø—‘•ðà!ˆD�Nð &r0   c                óF  — |j                   €J ‚| j                  €J ‚| j                  j                  «       }|j                  |j                   «       	 |j                  t        j
                  t        j                  t        j                  «      | j                  j                  |«       S # t        j                  $ rB t        j                  d|› d�«       t        d«      cY | j                  j                  |«       S w xY w# | j                  j                  |«       w xY w)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.
        zFailed to benchmark choice 'z['. It will be ignored. Please debug the root cause in case the choice can bring perf gains.Úinf)Úbmreqr‡   r:   rN   r#   Ú+max_autotune_subproc_result_timeout_secondsÚ-max_autotune_subproc_graceful_timeout_secondsÚ.max_autotune_subproc_terminate_timeout_secondsrk   rl   ÚwarningsÚwarnÚfloat)rW   ÚchoicerB   s      r1   r]   zTuningProcessPool.targetl  sí   € ð �|‰|Ð'Ð'Ð'Ø�~‰~Ð)Ð)Ð)à—.‘.×$Ñ$Ó&ˆØ�‰�F—L‘LÔ!ð	(Ø—;‘;Ü×BÑBÜ×DÑDÜ×EÑEóð �N‰N×Ñ˜wÕ'øô �{‰{ò 	 Ü�M‰MØ.¨v¨hð 7Wð Wôô
 ˜“<Ñà�N‰N×Ñ˜wÕ'ð	 ûð �N‰N×Ñ˜wÕ'ús$   Á<B+ Â+7D Ã"D Ã?D Ä D ÄD c                óÆ   — | j                   €J d«       ‚| j                  €J ‚i }t        || j                  j                  | j                  |«      «      D ]
  \  }}|||<   Œ |S )z>
        Benchmark each choice in a separate process.
        z&Tuning process pool is not initialized)r‡   rˆ   ÚzipÚmapr]   )rW   ÚchoicesÚresultsrª   Úresults        r1   rP   zTuningProcessPool.benchmark‡  sp   € ð �~‰~Ð)ÐSÐ+SÓSÐ)Ø�}‰}Ð(Ð(Ð(àˆô " '¨4¯=©=×+<Ñ+<¸T¿[¹[È'Ó+RÓSò 	%‰NˆF�FØ$ˆG�FŠOð	%ð ˆr0   r�   )r~   zSequence[Optional[int]])rª   r    r~   r©   ©r®   zlist[TritonTemplateCaller]r~   z!dict[TritonTemplateCaller, float])r,   r-   r.   r‚   r‡   rƒ   rˆ   rc   r‹   ru   r]   rP   r/   r0   r1   r†   r†     sK   … ñð 7;€IÐ3Ó:Ø-1€HÐ*Ó1ó#,óJ"ó("ó(ð6à+ðð 
+ôr0   r†   c                  óp   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   dZded<   e	 	 	 	 dd„«       Zdd„Zy)Ú
TensorMetaztorch.devicer<   ztorch.dtypeÚdtypeztorch._prims_common.ShapeTypeÚsizesztorch._prims_common.StrideTypeÚstridesr˜   ÚoffsetNzOptional[str]Únamec           
     ó:  — t        |t        «      r4|D �cg c]  }| j                  |«      ‘Œ }}t        d„ |D «       «      sJ ‚|S |}t        |t        j
                  «      rt	        j                  d|¬«      }|j                  «       }|€J ‚|j                  «       }|€J ‚t        ||t        j                  j                  j                  |j                  «       t        j                   ¬«      t        j                  j                  j                  |j#                  «       t        j                   ¬«      t        j                  j                  j%                  |j'                  «       j(                  t        j                   ¬«      |j+                  «       ¬«      S c c}w )Nc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)rM   r³   ©Ú.0Úxs     r1   ú	<genexpr>z*TensorMeta.from_irnodes.<locals>.<genexpr>°  s   è ø€ ÒA°Q”z !¤Z×0ÑAùó   ‚Úfake)r¸   Úlayout)Úfallback)r<   r´   rµ   r¶   r·   r¸   )rM   r   Úfrom_irnodesÚallr   ÚLayoutÚBufferÚ	get_dtypeÚ
get_devicer³   r&   ÚgraphÚsizevarsÚ
size_hintsÚget_sizer#   Úunbacked_symint_fallbackÚ
get_strideÚ	size_hintÚ
get_layoutr·   Úget_name)ÚclsÚirnodesr¾   r°   Únoder´   r<   s          r1   rÄ   zTensorMeta.from_irnodesª  sU  € ô �gœxÔ(Ø>EÖ F¸ ×!1Ñ!1°!Õ!4Ð FˆFÐ FÜÑA¸&ÔAÔAÐAÐAØˆMàˆÜ�dœBŸI™IÔ&Ü—9‘9 &°Ô6ˆDà—‘Ó ˆØÐ Ð Ð Ø—‘Ó"ˆØÐ!Ð!Ð!äØØÜ—'‘'×"Ñ"×-Ñ-Ø—‘“Ü×8Ñ8ð .ó ô —G‘G×$Ñ$×/Ñ/Ø—‘Ó!Ü×8Ñ8ð 0ó ô —7‘7×#Ñ#×-Ñ-Ø—‘Ó!×(Ñ(Ü×8Ñ8ð .ó ð —‘“ô
ð 	
ùò !Gs   •Fc                ó†   — t        | j                  | j                  | j                  | j                  | j
                  ¬«      S )N)r<   r´   Ú
extra_size)r   rµ   r¶   r<   r´   r·   rV   s    r1   Ú	to_tensorzTensorMeta.to_tensorÎ  s2   € ÜØ�J‰JØ�L‰LØ—;‘;Ø—*‘*Ø—{‘{ô
ð 	
r0   )rÔ   z/Union[LayoutOrBuffer, Sequence[LayoutOrBuffer]]r~   ú#Union[TensorMeta, list[TensorMeta]])r~   útorch.Tensor)r,   r-   r.   rƒ   r¸   ÚclassmethodrÄ   rØ   r/   r0   r1   r³   r³   ¡  sQ   … àÓØÓØ(Ó(Ø+Ó+ØƒKØ€Dˆ-Óàð!
ØEð!
à	,ò!
ó ð!
ôF
r0   r³   c                  óx   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d	d„Z	 	 	 	 	 	 d
d„Zdd„Zddœ	 	 	 	 	 dd„Zddœ	 	 	 	 	 dd„Zy)rO   a1  
    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                óâ   ‡— || _         t        |t        «      r|g}|| _        t        ‰t        t
        f«      r)t        ‰«      dkD  rt        ˆfd„‰D «       «      sJ ‚‰d   Š‰| _        || _	        y )Nr!   c              3  ód   •K  — | ]'  }d D ]   }t        ‰d   |«      t        ||«      k(  –— Œ" Œ) y­w))r<   r´   rµ   r¶   r·   r   N)Úgetattr)r½   r¾   ÚattrÚoutput_tensor_metas      €r1   r¿   z,BenchmarkRequest.__init__.<locals>.<genexpr>ó  sG   øè ø€ ò àØ Qòð ô Ð.¨qÑ1°4Ó8¼GÀAÀtÓ<LÕLðØLñùs   ƒ-0r   )
Úkernel_namerM   r³   Úinput_tensor_metaÚtupler™   r�   rÅ   rá   Ú
extra_args)rW   râ   rã   rá   rå   s      ` r1   Ú__init__zBenchmarkRequest.__init__â  s�   ø€ ð 'ˆÔäÐ'¬Ô4Ø!2Ð 3ÐØ!2ˆÔäÐ(¬5´$¨-Ô8ÜÐ%Ó&¨Ò*äó à/ôô ð ð ð
 "4°AÑ!6ÐØ"4ˆÔà$ˆ�r0   c               ó   — t         ‚r»   ©ÚNotImplementedError©rW   Úoutput_tensorÚinput_tensorss      r1   Úmake_run_fnzBenchmarkRequest.make_run_fný  s
   € ô "Ð!r0   c                 ó   — y r»   r/   rV   s    r1   Úcleanup_run_fnzBenchmarkRequest.cleanup_run_fn  s   € Ør0   N©rë   c               ó   — t         ‚r»   rè   ©rW   Úfnrë   rì   s       r1   Údo_benchzBenchmarkRequest.do_bench  s
   € ô "Ð!r0   c               ó   — t         j                  t        j                  «      }|rt	        j                  «       }|€Ft        |«      dk(  sJ ‚t        d„ | j                  D «       «      }| j                  j                  «       }|r+t	        j                  «       z
  }t	        j                  «       }	  | j                  |d|iŽ}|r+t	        j                  «       z
  }t	        j                  «       } | j                  |g|¢|‘­Ž }|r9t	        j                  «       z
  }	t         j                  dt!        | «      |	«       | j#                  «        |S # t        $ r# t         j                  d«       t        d«      cY S w xY w)Nr   c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr»   )rØ   r¼   s     r1   r¿   z-BenchmarkRequest.benchmark.<locals>.<genexpr>  s   è ø€ Ò!P°A !§+¡+§-Ñ!PùrÀ   rë   z0Skipping op due to nonzero workspace requirementr¢   z6InChildProcess %s: load %f, create tensor %f, bench %f)rF   ÚisEnabledForÚloggingÚDEBUGÚtimer�   rä   rã   rá   rØ   rí   r6   Úinfor©   rô   rG   r;   rï   )
rW   rë   rì   rG   Ústart_tsÚcreate_tensor_elapseró   Úload_elapseÚoutÚbench_elapses
             r1   rP   zBenchmarkRequest.benchmark  sQ  € ô
 ×+Ñ+¬G¯M©MÓ:ˆÙÜ—y‘y“{ˆHð Ð Ü�}Ó%¨Ò*Ð*Ð*Ü!Ñ!P¸×9OÑ9OÔ!PÓPˆMØ ×3Ñ3×=Ñ=Ó?ˆMáÜ#'§9¡9£;°Ñ#9Ð Ü—y‘y“{ˆHð	 Ø!�×!Ñ! =ÐNÀÑNˆBñ ÜŸ)™)›+¨Ñ0ˆKÜ—y‘y“{ˆHàˆd�m‰m˜BÐ> Ð>°Ò>ˆáÜŸ9™9›;¨Ñ1ˆLÜ× Ñ ØHÜ�D“	ØØ$Øôð 	×ÑÔØˆ
øô+ 1ò 	 ä×ÑÐ RÔSÜ˜“<Òð	 ús   Â0E Å)E=Å<E=)
râ   r;   rã   rÙ   rá   rÙ   rå   úIterable[Any]r~   r   ©rì   rÚ   rë   rÚ   r~   zCallable[[], None]r�   ©rì   rÚ   rë   zOptional[torch.Tensor]r~   r©   )	r,   r-   r.   r‚   ræ   rí   rï   rô   rP   r/   r0   r1   rO   rO   Ø  s­   „ ñð%àð%ð ?ð%ð @ð	%ð
 "ð%ð 
ó%ð6"Ø*ð"Ø;Gð"à	ó"ó
ð 15ñ	"ð %ð"ð .ð	"ð
 
ó"ð 15ñ)à$ð)ð .ð)ð 
ô	)r0   rO   c                  ó2   — e Zd ZdZddd„Zddœ	 	 	 	 	 dd„Zy)	ÚTestBenchmarkRequestz„
    Supports unit testing. Defined in this file so that the TuningProcess
    sub-process knows how to unpickle these objects.
    Nc                ó   — || _         y r»   )Úvalue)rW   r  s     r1   ræ   zTestBenchmarkRequest.__init__?  s	   € Øˆ�
r0   rð   c               óH   — | j                   €t        d«      ‚| j                   S )NzFailed to run)r  rI   rê   s      r1   rP   zTestBenchmarkRequest.benchmarkB  s#   € ð �:‰:ÐÜ˜OÓ,Ð,Ø�z‰zÐr0   r»   )r  zOptional[float]r~   r   r  )r,   r-   r.   r‚   ræ   rP   r/   r0   r1   r  r  9  s0   „ ñô
ð UYñØ*ðØ;Qðà	ôr0   r  c                  ó$   — e Zd Zddœ	 	 	 	 	 dd„Zy)ÚGPUDeviceBenchmarkMixinNrð   c               óœ  — t        d„ g |¢|‘D «       «      }t        |«      dk  s
J d|› �«       ‚t        d„ |D «       d«      }t        |«      }t        |«      dk(  rt        t	        |«      «      }n|j                  «       }|j                  |«      5  t        j                  |«      }|j                  «        d d d «       |S # 1 sw Y   S xY w)Nc              3  óæ   K  — | ]i  }t        |t        j                  «      rMt        |j                  j
                  «      r.|j                  j                  �|j                  j                  –— Œk y ­wr»   )rM   ÚtorchÚTensorr   r<   rR   Úindex©r½   Útensors     r1   r¿   z3GPUDeviceBenchmarkMixin.do_bench.<locals>.<genexpr>Q  sR   è ø€ ò $
àÜ˜&¤%§,¡,Ô/Ü�v—}‘}×)Ñ)Ô*Ø—‘×#Ñ#Ð/ð	 �M‰M×Õñ$
ùs   ‚A/A1r!   zCan not mix devices c              3  ó†   K  — | ]9  }t        |j                  j                  «      r|j                  j                  –— Œ; y ­wr»   )r   r<   rR   r  s     r1   r¿   z3GPUDeviceBenchmarkMixin.do_bench.<locals>.<genexpr>Z  s4   è ø€ ò àÜ˜&Ÿ-™-×,Ñ,Ô-ð —‘×"Õ"ñùs   ‚?AÚcuda)
r   r�   Únextr   ÚiterÚcurrent_devicer<   r%   Úbenchmark_gpuÚsynchronize)	rW   ró   rë   rì   Údevice_idx_setÚdevice_typerœ   Ú
device_idxrÿ   s	            r1   rô   z GPUDeviceBenchmarkMixin.do_benchK  sã   € ô $ñ $
à9˜MÐ9¨=Ð9ô$
ó 
ˆô �>Ó" aÒ'ÐPÐ+?ÀÐ?OÐ)PÓPÐ'Üñà+ôð
 ó
ˆô 4°KÓ@ÐÜˆ~Ó !Ò#Üœd >Ó2Ó3‰Jà)×8Ñ8Ó:ˆJØ×$Ñ$ ZÓ0ñ 	+Ü×+Ñ+¨BÓ/ˆCØ×(Ñ(Ô*÷	+ð ˆ
÷		+ð ˆ
ús   Â&CÃCr  ©r,   r-   r.   rô   r/   r0   r1   r
  r
  J  s*   „ ð
 15ñ	ð %ðð .ð	ð
 
ôr0   r
  c                  ó$   — e Zd Zddœ	 	 	 	 	 dd„Zy)ÚCPUDeviceBenchmarkMixinNrð   c               ó,   — t        j                  |«      S r»   )r%   Úbenchmark_cpurò   s       r1   rô   z CPUDeviceBenchmarkMixin.do_benchn  s   € ô ×(Ñ(¨Ó,Ð,r0   r  r  r/   r0   r1   r  r  m  s*   „ ð
 15ñ	-ð %ð-ð .ð	-ð
 
ô-r0   r  c                  ó~   ‡ — e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	 	 	 	 	 	 dd„Zd„ Zdd„Zˆ xZS )	ÚTritonBenchmarkRequestc                óš   •— t         ‰| �  ||||«       || _        || _        || _        || _        |	| _        |
| _        || _        || _	        y r»   )
Úsuperræ   Úmodule_pathÚmodule_cache_keyÚ
num_stagesÚ	num_warpsÚmatrix_instr_nonkdimÚwaves_per_euÚkpackÚworkspace_arg)rW   râ   rã   rá   rå   r%  r&  r'  r(  r)  r*  r+  r,  Ú	__class__s                €r1   ræ   zTritonBenchmarkRequest.__init__z  sW   ø€ ô 	‰Ñ˜Ð&7Ð9KÈZÔXØ&ˆÔØ 0ˆÔØ$ˆŒØ"ˆŒØ$8ˆÔ!Ø(ˆÔØˆŒ
Ø*ˆÕr0   c               óÖ  ‡‡‡‡	‡
‡‡— t        j                  | j                  | j                  «      }t        j                  d| j                  | j                  «       t        || j                  «      j                  Š	t        | j                  «      Šd‰	j                  _        i Šdd l}d|j                  ‰	«      j                  v rd‰d<   ‰j                   j"                  dk(  rdŠ
nP‰j                   j"                  }t%        |«      }|j'                  | j(                  j                   j*                  «      Š
| j,                  �| j,                  Šˆˆˆˆ	ˆ
ˆˆfd„}|S t/        t        || j                  «      t0        j2                  j4                  j6                  j8                  «      r!t;        j<                  ‰	g‰¢‰‘‰¢­i ‰¤d‰
i¤ŽS t;        j<                  ‰	g‰¢‰‘‰¢­i ‰¤‰
dd	œ¤ŽS )
Nz"benchmark module key: %s, path: %sFr   ÚwarmupÚcpuc                 ó  •— ‰j                   } t        j                  | fdt        j                  ‰j                  ¬«      }‰j
                  t        j                  k7  r|j                  «         ‰g ‰¢‰‘|‘‰¢­i ‰¤‰ddœ¤Ž y )N)r!   ©r´   r<   T©ÚstreamÚbenchmark_run)	r�   r  Úempty_stridedÚuint8r<   Ú	zero_moder$   ÚUNINITIALIZEDÚzero_)	Úworkspace_sizeÚworkspace_tensorrå   rì   rë   Ú
run_methodr4  Ú
warmup_argr,  s	     €€€€€€€r1   Úrun_with_workspacez>TritonBenchmarkRequest.make_run_fn.<locals>.run_with_workspace¶  s    ø€ à!.×!4Ñ!4�Ü#(×#6Ñ#6Ø#Ð%ØÜŸ+™+Ø(×/Ñ/ô	$Ð ð !×*Ñ*Ô.?×.MÑ.MÒMØ$×*Ñ*Ô,ñ ð Ø"ðà!ðð %ðð  ò	ð
 !ðð "Ø"&õr0   r4  Tr3  )r   Úload_by_key_pathr&  r%  rF   rG   rß   râ   Úrunr™   rå   Ú__self__Úwith_bandwidth_infoÚinspectÚ	signatureÚ
parametersr<   rR   r   Úget_raw_streamrá   r  r,  rM   r  Ú	_inductorÚruntimeÚtriton_heuristicsÚDebugAutotunerÚ	functoolsÚpartial)rW   rë   rì   ÚmodrD  r  rœ   r?  rå   r=  r4  r>  r,  s    ``     @@@@@r1   rí   z"TritonBenchmarkRequest.make_run_fn“  sò  þ€ ô ×*Ñ*¨4×+@Ñ+@À$×BRÑBRÓSˆÜ×ÑØ0Ø×!Ñ!Ø×Ñô	
ô ˜S $×"2Ñ"2Ó3×7Ñ7ˆ
Ü˜$Ÿ/™/Ó*ˆ
Ø27ˆ
×ÑÔ/ð ˆ
Ûà�w×(Ñ(¨Ó4×?Ñ?Ñ?Ø#(ˆJ�xÑ à×Ñ×$Ñ$¨Ò-Ø‰Fà'×.Ñ.×3Ñ3ˆKÜ7¸ÓDÐØ%×4Ñ4Ø×'Ñ'×.Ñ.×4Ñ4óˆFð ×ÑÐ)à ×.Ñ.ˆM÷ò ð2 &Ð%ÜÜ�C˜×)Ñ)Ó*Ü�O‰O×#Ñ#×5Ñ5×DÑDô
ô ×$Ñ$Øðàðð ðð ò	ð
 ñð òð ô ×$Ñ$Øðàðð ðð ò	ð
 ðð Ø"óð r0   c                ó    — t        j                  | j                  | j                  «      }t	        || j
                  «      j                  «        y r»   )r   r@  r&  r%  rß   râ   Ú
precompile)rW   rN  s     r1   rP  z!TritonBenchmarkRequest.precompileç  s9   € Ü×*Ñ*¨4×+@Ñ+@À$×BRÑBRÓSˆÜ��T×%Ñ%Ó&×1Ñ1Õ3r0   c                óT   — d| j                   ›d| j                  ›d| j                  ›�S )Núself.kernel_name=z, self.module_path=z, self.module_cache_key=)râ   r%  r&  rV   s    r1   Ú__str__zTritonBenchmarkRequest.__str__ë  s2   € Ø#�$×"Ñ"Ð$Ð$8 t×'7Ñ'7Ð&9Ð9R¸D×<QÑ<QÐ;SÐTÐTr0   )r   r   r   N)râ   r;   rã   rÙ   rá   rÙ   rå   r  r%  r;   r&  r;   r'  r˜   r(  r˜   r)  r˜   r*  r˜   r+  r˜   r,  zOptional[WorkspaceArg]r~   r   r  ©r~   r;   )r,   r-   r.   ræ   rí   rP  rS  Ú__classcell__©r-  s   @r1   r"  r"  w  sÄ   ø„ ð %&ØØØ04ð+àð+ð ?ð+ð @ð	+ð
 "ð+ð ð+ð ð+ð ð+ð ð+ð "ð+ð ð+ð ð+ð .ð+ð 
õ+ð2RØ*ðRØ;GðRà	óRòh4÷Ur0   r"  c                  ó   — e Zd Zy)ÚTritonGPUBenchmarkRequestNr+   r/   r0   r1   rX  rX  ï  r2   r0   rX  c                  ó   — e Zd Zy)ÚTritonCPUBenchmarkRequestNr+   r/   r0   r1   rZ  rZ  ó  r2   r0   rZ  c                  óp   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zd„ Z	 	 	 	 	 	 d	d„Zd
d„Zd„ Zd
d„Zdd„Z	ˆ xZ
S )ÚCUDABenchmarkRequestc                óæ   •— t         ‰| �  ||||«       || _        d| _        d | _        d | _        d| _        d| _        d| _        t        j                  | j                  d«      \  | _        | _        y )Nr   FÚ Úso)r$  ræ   Úsource_coder;  Ú	workspaceÚDLLÚ_workspace_size_updatedÚhash_keyÚsource_filer   Úwrite©rW   râ   rã   rá   rå   r`  r-  s         €r1   ræ   zCUDABenchmarkRequest.__init__û  sr   ø€ ô 	‰Ñ˜Ð&7Ð9KÈZÔXØ&ˆÔØ#$ˆÔØ15ˆŒØ)-ˆŒØ',ˆÔ$ØˆŒØ "ˆÔÜ*7×*=Ñ*=¸d×>NÑ>NÐPTÓ*UÑ'ˆŒ�tÕ'r0   c                óœ   — t         j                  d| «       t        j                  | j                  d«       t         j                  d| «       y )NúPrecompiling %sr_  úDone precompiling %s)rF   rG   r   Úcompiler`  rV   s    r1   rP  zCUDABenchmarkRequest.precompile  s<   € ô 	×ÑÐ.°Ô5Ü×Ñ˜d×.Ñ.°Ô5Ü×ÑÐ3°TÕ:r0   c          	     óB  — | j                  «        | j                  «        t        |«      |gz   D �cg c]  }t        |j	                  «       «      ‘Œ }}t
        j                  d| j                  | j                  | j                  | j                  || j                  «       t        t        j                  j                  «       j                  «      }t!        | j                  | j                  «      }t        d«      }| j"                  dkD  rht        j$                  | j"                  dz   dz  t        j&                  |j(                  ¬«      | _        t        | j*                  j	                  «       «      }t-        j.                  |g|¢| j                  ¢d ‘|‘|‘­Ž S c c}w )Nzqmake_run_fn: self.kernel_name=%s, self.source_file=%s, self.hash_key=%s, self.DLL=%s, args=%s, self.extra_args=%sr   é   é   r2  )Úensure_dll_loadedÚupdate_workspace_sizer™   r	   Údata_ptrrF   rG   râ   re  rd  rb  rå   r  r  Úcurrent_streamÚcuda_streamrß   r;  ÚzerosÚfloat64r<   ra  rL  rM  )rW   rë   rì   r  r^   Ú
stream_ptrr=  Úworkspace_ptrs           r1   rí   z CUDABenchmarkRequest.make_run_fn  sy  € ð 	×ÑÔ Ø×"Ñ"Ô$ô ˜}Ó-°°Ñ?ö
àô �V—_‘_Ó&Õ'ð
ˆð 
ô 	×ÑØØ×ÑØ×ÑØ�M‰MØ�H‰HØØ�O‰Oô	
ô œeŸj™j×7Ñ7Ó9×EÑEÓFˆ
Ü˜TŸX™X t×'7Ñ'7Ó8ˆ
Ü  ›ˆØ×Ñ Ò"Ü"Ÿ[™[Ø×$Ñ$ qÑ(¨QÑ.Ü—m‘mØ$×+Ñ+ôˆDŒNô
 % T§^¡^×%<Ñ%<Ó%>Ó?ˆMô × Ñ Øð
àð
ð �_‰_ð
ð ð	
ð
 ð
ð ò
ð 	
ùò3
s   ² Fc           
     ó  — | j                   ry | j                  «        t        | j                  D �ch c]  }|j                  ’Œ c}«      }t        |dz   «      D �cg c]  }t        d «      ‘Œ }}t        t        j                  j                  «       j                  «      }t        | j                  | j                  «      }t        «       } |g |¢| j                  ¢t!        |«      ‘d ‘|‘­Ž  t        j                  j#                  «        |j$                  | _        t(        j+                  d| j&                  | j                  | j,                  | j.                  | j                  || j                  «       d| _         y c c}w c c}w )Nr!   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)rc  ro  r�   rã   r¸   rš   r	   r  r  rr  rs  rß   rb  râ   r   rå   r   r  r  r;  rF   rG   re  rd  )rW   ÚmetaÚunique_input_countÚ_r^   rv  r=  Úc_workspace_sizes           r1   rp  z*CUDABenchmarkRequest.update_workspace_size;  sW  € Ø×'Ò'ØØ×ÑÔ Ü Ø#'×#9Ñ#9Ö:˜4ˆT�Y‹YÒ:ó
Ðô ).Ð.@À1Ñ.DÓ(EÖF 1”˜•ÐFˆÐFÜœeŸj™j×7Ñ7Ó9×EÑEÓFˆ
ä˜TŸX™X t×'7Ñ'7Ó8ˆ
ä#›:ÐÙð 	
Øð	
à�_‰_ð	
ô Ø óð	
ð ð	
ð ó	
ô 	�
‰
×ÑÔ Ø.×4Ñ4ˆÔÜ×Ñð hØ×ÑØ×ÑØ×ÑØ�M‰MØ�H‰HØØ�O‰Oô		
ð (,ˆÕ$ùò; ;ùâFs   ±E<ÁFc                ó„   — | j                   €4t        j                  | j                  d«      \  | _         | _        | _        y y )Nr_  )rb  r   Úloadr`  rd  re  rV   s    r1   ro  z&CUDABenchmarkRequest.ensure_dll_loaded_  s:   € Ø�8‰8ÐÜ8E×8JÑ8JØ× Ñ  $ó9Ñ5ˆDŒH�d”m TÕ%5ð r0   c                ó^   — | j                   �| j                   j                  «        d | _        y r»   )rb  Úclosera  rV   s    r1   rï   z#CUDABenchmarkRequest.cleanup_run_fne  s!   € Ø�8‰8ÐØ�H‰H�N‰NÔØˆ�r0   c                óT   — d| j                   ›d| j                  ›d| j                  ›�S )NrR  z, self.source_file=z, self.hash_key=)râ   re  rd  rV   s    r1   rS  zCUDABenchmarkRequest.__str__j  s0   € Ø#�$×"Ñ"Ð$Ð$8 t×'7Ñ'7Ð&9Ð9J¸D¿M¹MÐ;KÐLÐLr0   ©râ   r;   rã   rÙ   rá   rÙ   rå   r  r`  r;   r~   r   r  r�   rT  )r,   r-   r.   ræ   rP  rí   rp  ro  rï   rS  rU  rV  s   @r1   r\  r\  ÷  sƒ   ø„ ðVàðVð ?ðVð @ð	Vð
 "ðVð ðVð 
õVò$;ð%
Ø*ð%
Ø;Gð%
à	ó%
óN",òHó÷
Mr0   r\  c                  ób   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zd„ Z	 	 	 	 	 	 dd„Zdd„Zd	d„Zˆ xZS )
ÚCppBenchmarkRequestc                óf   •— t         ‰| �  ||||«       || _        t        |«      | _        d | _        y r»   )r$  ræ   r`  r   rd  rb  rg  s         €r1   ræ   zCppBenchmarkRequest.__init__r  s5   ø€ ô 	‰Ñ˜Ð&7Ð9KÈZÔXØ&ˆÔÜ  Ó-ˆŒØ6:ˆ�r0   c                óž   — t         j                  d| «       t        j                  | j                  d¬«       t         j                  d| «       y )Nri  r0  ©r  rj  )rF   rG   r   r~  r`  rV   s    r1   rP  zCppBenchmarkRequest.precompile  s<   € ô 	×ÑÐ.°Ô5Ü×Ñ˜$×*Ñ*¸Õ>Ü×ÑÐ3°TÕ:r0   c               ó\  — t        j                  | j                  d¬«      | _        t	        |«      |gz   D �cg c]  }|j                  «       ‘Œ }}t        j                  d| j                  | j                  || j                  «       t        | j                  | j                  «      }t        d„ | j                  D «       «      sJ ‚t        j                  gt        |«      t        t	        | j                  «      «      z   z  |_        t!        j"                  |g|¢| j                  ¢­Ž S c c}w )Nr0  r‡  zJmake_run_fn: self.kernel_name=%s, self.DLL=%s, args=%s, self.extra_args=%sc              3  óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr»   )rM   ÚctypesÚc_ulonglong)r½   Úargs     r1   r¿   z2CppBenchmarkRequest.make_run_fn.<locals>.<genexpr>•  s   è ø€ ÒR¸3”:˜c¤6×#5Ñ#5×6ÑRùs   ‚$&)r   r~  r`  rb  r™   rq  rF   rG   râ   rå   rß   rÅ   rŠ  r‹  r�   ÚargtypesrL  rM  )rW   rë   rì   r  r^   r=  s         r1   rí   zCppBenchmarkRequest.make_run_fn†  s  € ô  ×$Ñ$ T×%5Ñ%5À5ÔIˆŒÜ04°]Ó0CÀ}ÀoÑ0UÖV f�—‘Õ!ÐVˆÐVÜ×ÑØXØ×ÑØ�H‰HØØ�O‰Oô	
ô ˜TŸX™X t×'7Ñ'7Ó8ˆ
äÑRÀ$Ç/Á/ÔRÔRÐRÐRÜ%×1Ñ1Ð2Ü�‹IœœD §¡Ó1Ó2Ñ2ñ
ˆ
Ôô
 × Ñ Øð
àð
ð �_‰_ò
ð 	
ùò! Ws   ¸D)c                ó‚   — | j                   �3	 t        | j                   d«      r| j                   j                  «        y y y )Nr€  )rb  Úhasattrr€  rV   s    r1   rï   z"CppBenchmarkRequest.cleanup_run_fn¡  s9   € Ø�8‰8Ððô �t—x‘x Ô)Ø—‘—‘Õ ð *ð	  r0   c                ó    — d| j                   ›�S )NrR  )râ   rV   s    r1   rS  zCppBenchmarkRequest.__str__©  s   € Ø#�$×"Ñ"Ð$Ð%Ð%r0   r‚  r  r�   rT  )	r,   r-   r.   ræ   rP  rí   rï   rS  rU  rV  s   @r1   r„  r„  n  so   ø„ ð;àð;ð ?ð;ð @ð	;ð
 "ð;ð ð;ð 
õ;ò;ð
Ø*ð
Ø;Gð
à	ó
ó6!÷&r0   r„  c                ó,   — t         j                  | «      S )zO
    Do benchmarking in a subprocess and return the perf number (latency).
    )Útuning_poolrP   )r®   s    r1   Úbenchmark_in_sub_processr“  ­  s   € ô × Ñ  Ó)Ð)r0   )r<   rA   r±   )_Ú
__future__r   Ú
contextlibrŠ  ÚdataclassesrL  rø   r8   rk   rú   r§   Úcollections.abcr   r   Úconcurrent.futuresr   r   r   r	   r
   Útypingr   r   r   r   r   r  Útorch._inductor.async_compiler   Útorch._dynamo.device_interfacer   Útorch._dynamo.testingr   Útorch._inductorr   Útorch._inductor.codecacher   r   r   r   r   Útorch._inductor.utilsr   r   Útorch._loggingr   Útorch.utils._ordered_setr   Úmultiprocessing.processr   Úmultiprocessing.queuesr   Útypesr   Ú torch._inductor.select_algorithmr    Úcodegen.commonr"   r^  r#   r$   Úruntime.benchmarkingr%   Úvirtualizedr&   r'   rŽ   r,   rF   Ú	getLoggerrŒ   r*   r4   rI   r6   Úcontextmanagerr>   Ú	dataclassr@   r†   r’  rÆ   rÇ   ÚLayoutOrBufferr³   rO   r  r
  r  r"  rX  rZ  r\  r„  r“  r/   r0   r1   ú<module>r­     s  ðå "ã Û Û Û Û Û 	Û Û Û ß .Ý 1ß 2Ó 2ß @Õ @ã Û $Ý !Ý CÝ .Ý ÷õ ÷ 7Ý ,Ý /ñ Ý3Ý,Ý åEå,å Ý -Ý -Ý ð .Ð ØÐ á" 8¨\Ó:€Ø€g×Ñ˜Ó!€÷	ñ 	÷	ñ 	ô	¨	ô 	ð ×Ñò7ó ð7ð( ×Ñ÷yð yó ðyðx ×Ñ÷~ð ~ó ð~ñB  Ó!€ð �r—y‘y "§)¡)Ð+Ñ,€ð ×Ñ÷3
ð 3
ó ð3
ðl ×Ñ÷]ð ]ó ð]ô@Ð+ô ÷" ñ  ÷F-ñ -ôuUÐ-ô uUôp	Ð 7Ð9Oô 	ô	Ð 7Ð9Oô 	ôtMÐ2Ð4Dô tMôn<&Ð1Ð3Cô <&ð~*Ø'ð*à&ô*r0   