Ë
    ÄÓ^j|+  ã                   ó~  — d dl Z d dlmZmZmZ d dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZ edddœdej(                  d	ej*                  d
ej,                  fd„«       Zej0                  efd„«       Zedddœdej,                  de	d
e	fd„«       Zedddœdeez  e	z  ej8                  z  dej,                  dej,                  dej                  j:                  d
df
d„«       Zedddœdee	z  dee	z  dee	z  dee	z  dej,                  dej,                  dej                  j:                  d
dfd„«       Zedddœdeeef   deeef   d
efd„«       Z edddœdeez  d
efd„«       Z!edddœdeez  d
e	fd„«       Z"ej0                  dej(                  deej(                     dejF                  d
dfd „«       Z$edddœd!„«       Z%edddœdeded
ej8                  fd"„«       Z&edddœd#ej8                  d
eeef   fd$„«       Z'ej0                  d.de	d%ee	   d
e	fd&„«       Z(edddœde)e	z  d'ej,                  d
e	fd(„«       Z*edddœde)e	z  d'ej,                  d
e	fd)„«       Z+e	 	 d/dej,                  d*ej,                  d
dfd+„«       Z,edddœd	ej*                  d,ej(                  d
ej(                  fd-„«       Z-y)0é    N)ÚOptionalÚTupleÚUnion)ÚFloat32ÚInt32Ú
const_expr)Úarith)ÚllvmÚnvvmÚvector)ÚTÚdsl_user_op©ÚlocÚipÚxÚcoordÚreturnc                ób   — | j                   t        j                  || j                  ||¬«      z   S )Nr   )ÚiteratorÚcuteÚcrd2idxÚlayout)r   r   r   r   s       úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_vendor/quack/utils.pyÚelem_pointerr      s$   € à�:‰:œŸ™ U¨A¯H©H¸#À"ÔEÑEÐEó    c                 ó°   — t        t        | t        j                  «      «      r2 |t        j                  | t        j
                  d«      «      d   «      S | S )Né   r   )r   Ú
isinstancer   ÚPointerÚmake_tensorÚmake_layout)r   Údtypes     r   Úload_scalar_or_pointerr$      sB   € ä”*˜Q¤§¡Ó-Ô.Ù”T×%Ñ% a¬×)9Ñ)9¸!Ó)<Ó=¸aÑ@ÓAÐAàˆr   Úsmem_ptrÚpeer_cta_rank_in_clusterc          
      óÐ   — | j                  ||¬«      j                  «       }t        t        j                  t        j                  «       ||j                  «       gdddd¬«      «      S )zMMap the given smem pointer to the address at another CTA rank in the cluster.r   z$mapa.shared::cluster.u32 $0, $1, $2;z=r,r,rF©Úhas_side_effectsÚis_align_stack)ÚtointÚir_valuer   r
   Ú
inline_asmr   Úi32)r%   r&   r   r   Úsmem_ptr_i32s        r   Úset_block_rankr0      s_   € ð
 —>‘> c¨b�>Ó1×:Ñ:Ó<€LÜÜ�‰Ü�E‰E‹GØÐ3×<Ñ<Ó>Ð?Ø2ØØ"Ø ô	
ó	ð 	r   ÚvalÚmbar_ptrc                ó.  — t        ||||¬«      j                  «       }t        ||||¬«      j                  «       }t        t        | t        «      «      rt        | «      } t        | t
        t        t        j                  f«      sJ d«       ‚t
        dt        dt        j                  dit        | «         }t
        dt        dt        j                  dit        | «         }	t        j                  d || j                  ||¬«      |gd	|› d
�d|	› d�dd¬«       y )Nr   z$val must be Float32, Int32, or Int64Úf32Ús32Ús64ÚfÚrÚlz6st.async.shared::cluster.mbarrier::complete_tx::bytes.z [$0], $1, [$2];zr,z,rTFr(   )r0   r,   r   r   Úfloatr   r   ÚcutlassÚInt64Útyper
   r-   )
r1   r%   r2   r&   r   r   Úremote_smem_ptr_i32Úremote_mbar_ptr_i32ÚsuffixÚ
constraints
             r   Ústore_shared_remoterB   .   s  € ô )ØÐ*°¸ôç�hƒjð ô )ØÐ*°¸ôç�hƒjð ô ”*˜S¤%Ó(Ô)Ü�c‹lˆÜ�cœG¤U¬G¯M©MÐ:Ô;ÐcÐ=cÓcÐ;Ü�uœe U¬G¯M©M¸5ÐAÄ$ÀsÃ)ÑL€FÜ˜3¤ s¬G¯M©M¸3Ð?ÄÀSÃ	ÑJ€JÜ‡O�OØØ	˜cŸl™l¨s°r˜lÓ:Ð<OÐPØ
@ÀÀÐHXÐYØ
ˆZˆL˜ÐØØör   Úval0Úval1Úval2Úval3c                óf  — t        ||||¬«      j                  «       }	t        ||||¬«      j                  «       }
t        | t        t        f«      sJ d«       ‚t        | t        «      rt        nt        }t        dt        di|   }t        dt        di|   }t        j                  d |	|
 || «      j                  ||¬«       ||«      j                  ||¬«       ||«      j                  ||¬«       ||«      j                  ||¬«      gd|› d|› d	|› d
|› d|› d|› d�d|› d|› d|› d|› �dd¬«       y )Nr   zval must be Float32, or Int32r4   r5   r7   r8   z{
	.reg .v4 .z abcd;
	mov.z abcd.x, $2;
	mov.z abcd.y, $3;
	mov.z abcd.z, $4;
	mov.zG abcd.w, $5;
	st.async.shared::cluster.mbarrier::complete_tx::bytes.v4.z [$0], abcd, [$1];
	}
zr,r,ú,TFr(   )r0   r,   r   r   r   r
   r-   )rC   rD   rE   rF   r%   r2   r&   r   r   r>   r?   r#   r@   rA   s                 r   Ústore_shared_remote_x4rI   M   sw  € ô )ØÐ*°¸ôç�hƒjð ô )ØÐ*°¸ôç�hƒjð ô �dœW¤eÐ,Ô-ÐNÐ/NÓNÐ-Ü! $¬Ô0�G´e€EÜ�uœe UÐ+¨EÑ2€FÜ˜3¤ sÐ+¨EÑ2€JÜ‡O�OØàØÙ�$‹K× Ñ  S¨RÐ Ó0Ù�$‹K× Ñ  S¨RÐ Ó0Ù�$‹K× Ñ  S¨RÐ Ó0Ù�$‹K× Ñ  S¨RÐ Ó0ð	
ð	Ø�Hð Øˆhð Øˆhð Øˆhð Øˆhð DØDJÀ8ð Lð	ð ˆzˆl˜!˜J˜< q¨¨°A°j°\ÐBØØö)r   ÚaÚbc          
      óà  — t        j                  t         j                  j                  «      dk(  rit	        t        j                  t        j                  «       t	        | «      j                  ||¬«      t	        |«      j                  ||¬«      ||¬«      «      S t	        t        j                  t	        | «      j                  ||¬«      t	        |«      j                  ||¬«      ||¬«      «      S )Né   r   )
r;   r   ÚCUDA_VERSIONÚmajorr   r   Úfminr   r4   r,   )rJ   rK   r   r   s       r   rP   rP   |   sÆ   € ä×Ñœ'×.Ñ.×4Ñ4Ó5¸Ò;ÜÜ�I‰IÜ—‘“Ü˜“
×#Ñ#¨°Ð#Ó3Ü˜“
×#Ñ#¨°Ð#Ó3ØØôó
ð 	
ô Ü�	‰	Ü�A‹J×Ñ C¨BÐÓ/Ü�A‹J×Ñ C¨BÐÓ/ØØô		
óð r   c          
      ó¤   — t        t        j                  t        j                  «       t        | «      j                  ||¬«      gdddd¬«      «      S )Nr   zsqrt.approx.f32 $0, $1;z=f,fFr(   )r   r
   r-   r   r4   r,   ©rJ   r   r   s      r   ÚsqrtrS   ’   sJ   € äÜ�‰Ü�E‰E‹GÜ�Q‹Z× Ñ  S¨RÐ Ó0Ð1Ø%ØØ"Ø ô	
ó	ð 	r   c          
      ó¤   — t        t        j                  t        j                  «       t        | «      j                  ||¬«      gdddd¬«      «      S )Nr   zcvt.rpi.ftz.s32.f32 $0, $1;z=r,fFr(   )r   r
   r-   r   r.   r   r,   rR   s      r   ÚceilrU       sJ   € äÜ�‰Ü�E‰E‹GÜ�Q‹Z× Ñ  S¨RÐ Ó0Ð1Ø)ØØ"Ø ô	
ó	ð 	r   ÚtXsXÚtXpXÚ
fill_valuec           	      óž  — t        j                  | d   «      }|j                  |«       t        j                  | j
                  d   d   «      D ]|  }t        j                  | j
                  d   «      D ]U  }t        |du«      r(||d|f   rŒt        j                  || d|fd|f   «       Œ8t        j                  || d|fd|f   «       ŒW Œ~ y)zÛFill out-of-bounds values in shared memory tensor.

    Args:
        tXsX: Shared memory tensor to fill
        tXpX: Predicate tensor indicating valid elements
        fill_value: Value to fill OOB locations with
    ))Nr   Nr   r   r   é   N)r   Úmake_rmem_tensor_likeÚfillr;   Úrange_constexprÚshaper   Úautovec_copy)rV   rW   rX   Ú	tXrX_fillÚrest_vÚrest_ks         r   Úfill_oobrc   ®   sÏ   € ô ×*Ñ*¨4Ð0BÑ+CÓD€IØ‡N�N�:ÔÜ×)Ñ)¨$¯*©*°Q©-¸Ñ*:Ó;ò QˆÜ×-Ñ-¨d¯j©j¸©mÓ<ò 	QˆFÜ˜$ dÐ*Ô+Ø˜F A vÐ-Ó.Ü×%Ñ% i°°t¸V°nÀdÈFÐ6RÑ1SÕTä×!Ñ! )¨T°4¸°.À$ÈÐ2NÑ-OÕPñ	QñQr   c                ó„  — ddl m} t        |«      }| j                  }|j                  j                  |g|«      }t        j                  |||¬«      }t        |«      D ]_  \  }	}
t        j                   | |
«      j                  ||¬«      |t        j                  t        j                  «       |	||¬«      ||¬«      }Œa |S )zŽBuild an MLIR vector <N x elem_type> from N scalar DSL values.

    Example: make_vector(cutlass.Uint32, v0, v1) -> <2 x i32> MLIR vector
    r   )Úirr   )Úpositionr   r   )Úcutlass._mlirre   ÚlenÚ	mlir_typeÚ
VectorTypeÚgetr
   Ú
mlir_undefÚ	enumerater   Úinsertelementr,   Ú_arithÚconstantr   r.   )Ú	elem_typer   r   Úvaluesre   ÚnÚmlir_tyÚvec_tyÚvecÚiÚvs              r   Úmake_vectorry   Ç   s¬   € õ !äˆF‹€AØ×!Ñ!€GØ�]‰]×Ñ ˜s GÓ,€FÜ
�/‰/˜& c¨bÔ
1€CÜ˜&Ó!ò 
‰ˆˆ1Ü×"Ñ"Ù�a‹L×!Ñ! c¨bÐ!Ó1ØÜ—_‘_¤Q§U¡U£W¨a°S¸RÔ@ØØô
‰ð
ð €Jr   c          	      ó”  — t        j                  t        j                   dt        j                  «       «      | j	                  «       |j	                  «       f||¬«      }t        j
                  t        j                   dt        j                  «       «      |«      }t        j                  t        j                  |g dg||¬«      «      }|S )NrZ   r   r   r   ©Údynamic_positionÚstatic_positionr   r   )
r   Úfrom_elementsr   r4   r,   ÚbitcastÚi64r;   r<   Úextract)rJ   rK   r   r   Ú	vec_f32x2Ú	vec_i64x1Úress          r   Úf32x2_to_i64r…   Þ   s�   € ä×$Ñ$Ü	�‰�”A—E‘E“GÓ˜qŸz™z›|¨Q¯Z©Z«\Ð:ÀÈô€Iô —‘œqŸx™x¨¬1¯5©5«7Ó3°YÓ?€IÜ
�-‰-Ü�‰�y°2ÈÀsÐPSÐXZÔ[ó€Cð €Jr   Úcc          	      ó®  — t        j                  t        j                   dt        j                  «       «      | j	                  «       f||¬«      }t        j
                  t        j                   dt        j                  «       «      |«      }t        t        j                  |g dg||¬«      «      }t        t        j                  |g dg||¬«      «      }||fS )Nr   r   rZ   r   r{   )	r   r~   r   r€   r,   r   r4   r   r�   )r†   r   r   rƒ   r‚   Úres0Úres1s          r   Úi64_to_f32x2rŠ   ê   s¦   € ä×$Ñ$¤Q§X¡X¨a´·±³Ó%9¸A¿J¹J»L¸?ÐPSÐXZÔ[€IÜ—‘œqŸx™x¨¬1¯5©5«7Ó3°YÓ?€IÜÜ�‰�y°2ÈÀsÐPSÐXZÔ[ó€Dô Ü�‰�y°2ÈÀsÐPSÐXZÔ[ó€Dð �ˆ:Ðr   Úlanec                 ó\  — t        |d u «      rt        j                  j                  «       }t	        j
                  t        t        j                  t        j                  j                  «      «      «      D ]4  }d|z  }t        j                  j                  | |d¬«      }||k\  sŒ0| |z  } Œ6 | S )Nr   r   )ÚoffsetÚmask_and_clamp)r   r   ÚarchÚlane_idxr;   r]   ÚintÚmathÚlog2Ú	WARP_SIZEÚshuffle_sync_up)r1   r‹   rw   r�   Úpartial_sums        r   Úwarp_prefix_sumr—   ÷   s�   € ä�$˜$�,ÔÜ�y‰y×!Ñ!Ó#ˆÜ×$Ñ$¤S¬¯©´4·9±9×3FÑ3FÓ)GÓ%HÓIò ˆØ�a‘ˆä—i‘i×/Ñ/°¸FÐSTÐ/ÓUˆØ�6‹>Ø�;Ñ‰Cðð €Jr   Úgmem_ptrc                ó´  — ddl m} |j                  dk(  rs|j                  dk(  rdt	        j
                  t        j                  «       t        j                  j                  |j                  t        | «      j                  «       ¬«      S t	        j
                  t        j                  j                  |j                  t        | «      j                  «       ¬«      S ©Nr   )rN   rM   é	   )r„   ÚopÚptrrJ   )rœ   r�   rJ   )r;   rN   rO   Úminorr   Ú	atomicrmwr   r.   ÚAtomicOpKindÚINCÚllvm_ptrr   r,   ©rJ   r˜   r   r   rN   s        r   Úatomic_inc_i32r¤     ó›   € å$ð ×Ñ˜RÒ L×$6Ñ$6¸!Ò$;ä�~‰~Ü—‘“œD×-Ñ-×1Ñ1°x×7HÑ7HÌEÐRSËH×L]ÑL]ÓL_ô
ð 	
ô
 �~‰~Ü× Ñ ×$Ñ$¨(×*;Ñ*;¼uÀQ»x×?PÑ?PÓ?Rô
ð 	
r   c                ó´  — ddl m} |j                  dk(  rs|j                  dk(  rdt	        j
                  t        j                  «       t        j                  j                  |j                  t        | «      j                  «       ¬«      S t	        j
                  t        j                  j                  |j                  t        | «      j                  «       ¬«      S rš   )r;   rN   rO   rž   r   rŸ   r   r.   r    ÚADDr¢   r   r,   r£   s        r   Úatomic_add_i32r¨     r¥   r   Úclc_response_ptrc                 óf   — | j                   }|j                   }t        j                  ||||¬«       y)aN  
    The clusterlaunchcontrol.try_cancel instruction requests atomically cancelling the launch
    of a cluster that has not started running yet. It asynchronously writes an opaque response
    to shared memory indicating whether the operation succeeded or failed. On success, the
    opaque response contains the ctaid of the first CTA of the canceled cluster.

    :param mbar_ptr: A pointer to the mbarrier address in SMEM
    :type mbar_ptr:  Pointer
    :param clc_response_ptr: A pointer to the cluster launch control response address in SMEM
    :type clc_response_ptr:  Pointer
    r   N)r¢   r   Úclusterlaunchcontrol_try_cancel)r2   r©   r   r   Úmbar_llvm_ptrÚclc_response_llvm_ptrs         r   Úissue_clc_query_nomulticastr®   &  s5   € ð$ ×%Ñ%€MØ,×5Ñ5ÐÜ×(Ñ(ØØØØö	r   Útensorc                ó@  — t        |j                  t        j                  «      sJ ‚t        j                  |j
                  t        || «      j                  «       |j                  |j                  j                  ¬«      }t        j                  ||j                  «      S )N)Úassumed_align)r   r   r   r    Úmake_ptrÚelement_typer   r+   ÚmemspaceÚ	alignmentr!   r   )r   r¯   r   r   Únew_ptrs        r   Údomain_offset_alignedr·   B  ss   € ô �f—o‘o¤t§|¡|Ô4Ð4Ð4ä�m‰mØ×ÑÜ�V˜UÓ#×)Ñ)Ó+Ø�‰Ø—o‘o×/Ñ/ô	€Gô ×Ñ˜G V§]¡]Ó3Ð3r   )N)NN).r’   Útypingr   r   r   r;   Úcutlass.cuter   r   r   r   Úcutlass._mlir.dialectsr	   ro   r
   r   r   Úcutlass.cutlass_dslr   r   ÚTensorÚCoordr    r   Újitr$   r0   r:   r<   ÚIntrB   rI   rP   rS   rU   ÚNumericrc   ry   r…   rŠ   r—   r‘   r¤   r¨   r®   r·   © r   r   ú<module>rÂ      s)  ðó ß )Ñ )ã Ý ç .Ñ .Ý 2ß 5Ñ 5ß .ð Ø;?ÀDò F�D—K‘Kð F¨¯
©
ð FÈTÏ\É\ò Fó ðFð ‡�Ø$+ò ó 
ðð àDHÈTòØ�l‰lðØ6;ðà
òó ðð" ð 	ØòØ	�‰˜5Ñ	  7§=¡=Ñ	0ðà�l‰lðð �l‰lðð #Ÿk™kŸo™oð	ð 
òó ðð< ð 	Øò+Ø
�E‰/ð+à
�E‰/ð+ð �E‰/ð+ð �E‰/ð	+ð
 �l‰lð+ð �l‰lð+ð #Ÿk™kŸo™oð+ð 
ò+ó ð+ð\ ØDHÈTò ˆE�%˜�.Ñ!ð  e¨E°7¨NÑ&;ð ÐV]ò ó ðð* Ø$(¨Tò 
ˆE�G‰Oð 
°gò 
ó ð
ð Ø$(¨Tò 
ˆE�G‰Oð 
°eò 
ó ð
ð ‡�ðQ�4—;‘;ð Q h¨t¯{©{Ñ&;ð QÈÏÉð QÐZ^ò Qó 
ðQð0 Ø(,°ó ó ðð, Ø04¸ò �Gð  ð À'Ç-Á-ò ó ðð Ø*.°4ò 	�G—M‘Mð 	¸EÀ'È7ÐBRÑ<Sò 	ó ð	ð ‡�ñ	˜ð 	 h¨u¡oð 	Àò 	ó 
ð	ð ØBFÈ4ò 
�c˜E‘kð 
¨T¯\©\ð 
ÐTYò 
ó ð
ð  ØBFÈ4ò 
�c˜E‘kð 
¨T¯\©\ð 
ÐTYò 
ó ð
ð  ð 	Øñ	Ø�l‰lðà—l‘lðð
 
òó ðð6 à37¸Dò4Ø�:‰:ð4Ø#Ÿ{™{ð4à	‡[�[ò4ó ñ4r   