
    sg                     t    d 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
Z
dZd Zd Zd	 Zed
k(  r e        yy)zfExample use of Timer and op fuzzers to measure kernel performance.

$ python -m examples.op_benchmark
    N)Timer)BinaryOpFuzzer)UnaryOpFuzzerg      ?c                     t        | j                               t        | j                               k(  sJ t        fd| j                         D              sJ y)zBuiltin dict comparison will not compare numpy arrays.
    e.g.
        x = {"a": np.ones((2, 1))}
        x == x  # Raises ValueError
    c              3   f   K   | ](  \  }}|d k7  st        j                  ||   k(         * yw)dtypeN)npall).0kvdict_1s      ^/var/www/html/venv/lib/python3.12/site-packages/torch/utils/benchmark/examples/op_benchmark.py	<genexpr>z%assert_dicts_equal.<locals>.<genexpr>   s,     Q$!QALrvva6!9n%Qs   1 1N)setkeysr
   items)dict_0r   s    `r   assert_dicts_equalr      sC     v{{}V[[]!3333Q&,,.QQQQ    c                 |    |dt         j                        j                  |       } |dt         j                        j                  |       }g }t	        t        ||            D ]  \  }\  }}|\  }	}
}|\  }}}t        ||       t        |
d   |d          fd|	|fD        \  }}g }|	D ]  }ddj                  |	|   j                  D cg c]W  }dt        t        j                  |            z  |k(  r&|dkD  r!d	t        t        j                  |             n
t        |      Y c}      z   d
z   }|
|   d   }t        |t        j                  t        |            k(        rdnt        t!        |            }|
|   d   }t#        |      t        |      kD  rt        |      nd}|j%                  ||||f        |j%                  |||f       t'        ddz    d|  d        t'                g ddddf\  }}}}}|D ]  \  }}}|j(                  dz  }|j(                  dz  }t+        ||z
        ||z   z  dz  }|j%                  ||||f       |D ][  \  }} }}t-        |t        |            }t-        |t        |             }t-        |t        |            }t-        |t        |            }]  |j/                  t1        j2                  d             t'        d        t'        dddd|z   dd       t'        dj5                  |       dddj5                  |       d       t'        dd        |d d df|dd  dffD ]  \  }!}"|!D ]  \  }}}}|dz  dd ||k  rd!nd"d#g}#|#j7                  |d d$ D $cg c]  }$dj5                  t        |#d               ! c}$       t        |#|      D ]_  \  }%\  }} }}| d%j5                  |dz         }| j5                  |dz         } |j5                  |      }t'        |% d| d&|  d'| d(| 	       a  t'        |"        y c c}w c c}$w ))Nr   )seedr   xc              3   `   K   | ]%  }t        |       j                  t               ' yw))globals)min_run_timeN)r   blocked_autorange_MEASURE_TIME)r   tensorsstmts     r   r   zrun.<locals>.<genexpr>*   s;      .

 	   ];<.
s   +.(z,       z2 ** )order stepsz / )endg    .A)keyzstmt: z diff    fasterz>17 shapez>16z          steps
zd----------------------------------------------------------------------------------------------------
   z...id   z>4.1fz%    intfloatz<20:z  z|     z
      |   )torchfloat32takeint32	enumeratezipr   joinr,   r/   r	   log2strr
   arangelentuplesumappendprintmedianabsmaxsortoperator
itemgetterljustextend)&nr    
fuzzer_cls
float_iterint_iterraw_resultsifloat_values
int_valuesfloat_tensorsfloat_tensor_paramsfloat_paramsint_tensorsint_tensor_params
int_paramsfloat_measurementint_measurementdescriptionsname	shape_strr%   	order_strr'   	steps_strparsed_resultsname_len	shape_len	order_len	steps_lent_floatt_intrel_diffr,   resultsspacertime_str_t_strs&    `                                    r   runrl      s   %--8==a@Jq499!<HK)23z83L)M  *%%L*;G8*L5?2&
 	<4.s35Fs5KL.

 *;7.
*? ! 	IDdii 't,22	)  BGGAJ'1,Q BGGAJ()V)  
 I (-g6E"5BIIc%j,A#ABERWLHYI'-g6E&)%j3u:&=E
2Iy)Y GH	I 	-MN1q5'QC b)A *B 
G@BAq!Q=NHiI<G 	38?L#**S0&&,w'7U?;a?wxFG)5 	3%D%8SY/HIs5z2IIs5z2IIs5z2I		3	3 H//23	F4&/	OBs8C(N#31
52>	W]]9%&r#hw}}Y/G.H
IrR	i[
)*+CR0%8>#$;OQS:TU 	6= 	P2GUHl#c>%0uweT[\_5`abHOOcrARSARXXc(1+&67ST69(L6Q P22eUEqz''15IN3I.qbveWJugNO	P	P 	f	E)J Ts   AP4$P9c                  p    t        ddt               t        ddt               t        ddt               y )Nr.   ztorch.median(x, dim=0))rJ   r    rK   ztorch.square(x)zx + y)rl   r   r    r   r   mainro   b   s(    #,G#%-@#G7r   __main__)__doc__numpyr	   r3   torch.utils.benchmarkr   'torch.utils.benchmark.op_fuzzers.binaryr   &torch.utils.benchmark.op_fuzzers.unaryr   rF   r   r   rl   ro   __name__rn   r   r   <module>rw      sK   
   ' B @  RBJ8 zF r   