o
    Ti                     @   sh   d dl Z d dlZd dlZzd dlmZ d dlmZ W n ey)   d dlmZ Y nw G dd deZ	dS )    N)__deepspeed__)	OpBuilderc                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdddZ	dS )SYCLOpBuilderc              	   C   s   zddl m} W n ty   ddlm} Y nw dd | |  D }td|   || 	 | |  |d| | 
 i| |  d}|S )Nr   )DPCPPExtensionc                 S   s   g | ]}t j|qS  )ospathabspath).0xr   r   X/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/xpu/builder.py
<listcomp>   s    z)SYCLOpBuilder.builder.<locals>.<listcomp>zdpcpp sources = {}cxx)namesourcesinclude_dirsextra_compile_argsextra_link_args)-intel_extension_for_pytorch.xpu.cpp_extensionr   ImportError%intel_extension_for_pytorch.xpu.utilsstrip_empty_entriesinclude_pathsprintformatr   absolute_namecxx_argsfixed_aotflags)selfr   r   	dpcpp_extr   r   r   builder   s   zSYCLOpBuilder.builderc                 C   s   z
ddl m}m} W n ty   ddlm}m} Y nw g }|dks*|dkr-|dkr-dg}g }|dks;|dkr>|dkr>dg}g }|dksL|dkrO|dkrOdg}|| | S )	Nr   )TORCH_MAJORTORCH_MINOR   z-DVERSION_GE_1_1   z-DVERSION_GE_1_3   z-DVERSION_GE_1_5)op_builder.builderr!   r"   r    deepspeed.ops.op_builder.builder)r   r!   r"   version_ge_1_1version_ge_1_3version_ge_1_5r   r   r   version_dependent_macros%   s   z&SYCLOpBuilder.version_dependent_macrosc                 C   s"   g d}t jdr|d |S )N)	-fsycl-fsycl-targets=spir64_genz-gz	-gdwarf-4z-O3z
-std=c++17-fPICz-DMKL_ILP64z-fno-strict-aliasingUSE_MKL_GEMMz-DUSE_MKL_GEMM)r   environgetappend)r   	cxx_flagsr   r   r   r   6   s   
zSYCLOpBuilder.cxx_argsc                 C      g dS )N)r.   r,   r-   -fsycl-max-parallel-link-jobs=8zV-Xs "-options -cl-poison-unsupported-fp64-kernels,cl-intel-enable-auto-large-GRF-mode"z-Xs "-device pvc"z-Wl,-export-dynamicr   r   r   r   r   extra_ldflags?      zSYCLOpBuilder.extra_ldflagsc                 C   r4   )N)r,   r-   r5   -XszP-options -cl-poison-unsupported-fp64-kernels,cl-intel-enable-auto-large-GRF-moder9   z-device pvcr   r6   r   r   r   r   F   r8   zSYCLOpBuilder.fixed_aotflagsTc                 C   sR   ddl m}m}m} ddlm} || jdr$|| jkr$t	
|  S | |S )Nr   )installed_ops
torch_infoaccelerator_name)get_acceleratorF)deepspeed.git_version_infor:   r;   r<   deepspeed.acceleratorr=   r1   r   _name	importlibimport_moduler   jit_load)r   verboser:   r;   r<   r=   r   r   r   loadL   s
   
zSYCLOpBuilder.loadc           	   	      s     |std j d j zdd l}W n ty'   td j dw d _ddlm} t		 } fdd 
 D } fd	d  D }	 | j | |      |d
}t		 | }|r{td j d| d 	 |S )NzUnable to JIT load the zC op due to it not being compatible due to hardware/software issue. r   z% op due to ninja not being installed.T)rE   c                       g | ]}  |qS r   deepspeed_src_pathr
   r   r6   r   r   r   d       z*SYCLOpBuilder.jit_load.<locals>.<listcomp>c                    rF   r   rG   rI   r6   r   r   r   e   rJ   )r   r   extra_include_pathsextra_cflagsr7   rD   zTime to load z op: z seconds)is_compatibleRuntimeErrorr   	error_logninjar   jit_moder   rE   timer   r   r   r   r7   r   )	r   rD   rP   rE   start_buildr   rK   	op_modulebuild_durationr   r6   r   rC   T   s8   
	zSYCLOpBuilder.jit_loadN)T)
__name__
__module____qualname__r    r+   r   r7   r   rE   rC   r   r   r   r   r      s    	
r   )
r   rR   rA   
op_builderr   r&   r   r   r'   r   r   r   r   r   <module>   s   