o
    h                     @   s   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
 eeZe
edddddZe jed	d
Ze jedd
Zdd Ze ddd ZdS )    N   )device_from_inputsfake_tensor_unsupported)register_backend N  )	schedulertrialsc             
      sL  dd l ddl m} ddlm} tj| |}t|}dd t|D }| | }	t	|	dkr6t
d | jS |j||\}
}|jdkrP|j}j }nd}jt }|d u rgtjdd }|d	krdd
l m} t }tj|s||
d ||\}}|D ]}t|j  qtd t	|dkr|!||}tj|s|dksJ |j"||#|gdd}z|$| W n t%y   tj|rt&|  w |'|* j(j)dddid |j*|
||d}W d    n1 sw   Y  W d    n	1 sw   Y  n||dkr\ddl m+} t, 6}|jdkr4jt  d|j-j.dd }|j/j0|
||dd|dd}|j/j1||
||d}W d    n	1 sVw   Y  n-|dksd|sj(j)dd  |j*|
||d}W d    n	1 sw   Y  nt2d!|3|d | d"d# fd$d% fd&d'}|S )(Nr   )relay)graph_executorc                 S   s    g | ]\}}d | |j fqS )inp_)shape).0idxi r   P/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_dynamo/backends/tvm.py
<listcomp>   s     ztvm.<locals>.<listcomp>z0Explicitly fall back to eager due to zero outputcudaTVM_SCHEDULERauto_scheduler)r   mainzNo tasksi  )num_measure_trialsmeasure_callbacksearly_stopping   z relay.backend.use_auto_schedulerT)	opt_levelconfig)targetparamsmeta_schedule)r   z --num-cores F)logicalr   @   evolutionary)modr   work_dirmax_trials_globalnum_trials_per_iterr   strategy)databaser#   r   r   default
   )r   zThis tuning option is invalid/not implemented for torchdynamo's TVM-related backend. There are three available options: default, auto_scheduler and meta_schedule.c                 S   s*   | j dkrt|  S tjj|  S )z8A helper function to transfer a NDArray to torch.tensor.bool)dtypetorch
from_numpynumpyutilsdlpackfrom_dlpack	to_dlpack)	nd_tensorr   r   r   to_torch_tensorp   s   
ztvm.<locals>.to_torch_tensorc                    s,   | j tjkr j|   S  j| S )z8A helper function to transfer a torch.tensor to NDArray.)r,   r-   r+   ndarraycpur/   r2   )torch_tensor)tvmr   r   to_tvm_tensory   s   ztvm.<locals>.to_tvm_tensorc                     s   dd | D }   \}}dd | D }t|dD ])\}}| dkrD|jr,| }d| }||vr<td| q || q 	   fddt
  D S )	Nc                 S   s   g | ]}|  qS r   )
contiguous)r   ar   r   r   r          z)tvm.<locals>.exec_tvm.<locals>.<listcomp>c                 S   s   h | ]\}}|qS r   r   )r   name_r   r   r   	<setcomp>   r>   z(tvm.<locals>.exec_tvm.<locals>.<setcomp>r   r   z6input %s skipped as not found in tvm's runtime libraryc                    s   g | ]	}  |qS r   )
get_output)r   r   )mr5   r   r   r      s    )get_input_infoitems	enumeratedimrequires_graddetachlogwarning	set_inputrunrangeget_num_outputs)i_argsargs
shape_infor@   active_inputsr   arginp_name)rC   r5   r;   r   r   exec_tvm   s*   
ztvm.<locals>.exec_tvm)4r:   r	   tvm.contribr
   r-   jittracer   rF   lenrJ   rK   forwardfrontendfrom_pytorchtyper   indexr   r8   Targetllvm_targetosenvirongetr   tempfileNamedTemporaryFilepathexistsextract_tasksprintcompute_dagTaskSchedulerTuningOptionsRecordToFiletune	ExceptionunlinkApplyHistoryBest	transformPassContextbuildr   TemporaryDirectoryr0   	cpu_countrelay_integration
tune_relaycompile_relayNotImplementedErrorGraphModule)gmexample_inputsr   r   r	   r
   jit_moddevice
shape_listexample_outputsr#   r   devr   r   log_filetaskstask_weightstasktunertune_optionlibmsr$   r(   rV   r   )rC   r5   r;   r:   r   r:      s   








		r:   r   )r   r   c                   C   s&   zt d W dS  ty   Y dS w )Nr:   TF)	importlibimport_moduleImportErrorr   r   r   r   has_tvm   s   
r   c                   C   s   dt d v r
dS dS )Navx512z/proc/cpuinfozllvm -mcpu=skylake-avx512zllvm -mcpu=core-avx2)openreadr   r   r   r   ra      s   ra   )	functoolsr   loggingrb   re   r-   commonr   r   registryr   	getLogger__name__rJ   r:   partialtvm_meta_scheduletvm_auto_schedulerr   	lru_cachera   r   r   r   r   <module>   s$    
 
