U
    ‰d¶  ã                   @   sd   d dl mZmZ d dlmZ d dlZdZdZdZdZ	dd	„ Z
d
d„ Zedkr`e ddg¡ eƒ  dS )é    )ÚcoreÚ	workspace)Ú
caffe2_pb2Ni   iè  i   @é0   c                 C   sº   t  | d ¡}d| ¡ _t ¡ }tj|_d|_t	t
ƒD ]&}|jg | d t|ƒ ttg|d q6t  | ¡}d| ¡ _|r|d|_t	t
ƒD ],}|j| d t|ƒ | d t|ƒ |d q„||fS )	NÚ_initZasync_schedulingr   z/input_blob_)ÚshapeÚdevice_optioné   z/output_blob_)r   )r   ZNetZProtoÚtyper   ZDeviceOptionZCPUZdevice_typeZnuma_node_idÚrangeÚNUM_REPLICASZ
XavierFillÚstrÚ	SHAPE_LENZCopy)Znet_nameZcross_socketZinit_netZnuma_device_optionZ
replica_idÚnet© r   ú@/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/numa_benchmark.pyÚ	build_net   s(    
 ÿ

þr   c            	      C   sL  t  ¡ rt  ¡ dkst‚tddƒ\} }tddƒ\}}t  | ¡ t  |  ¡ ¡ t  |¡ t  | ¡ ¡ t  |¡ t  |¡ tdƒD ]Æ}t	 	¡ }t  | ¡ t
¡ t	 	¡ | }td|ƒ dt t t t
 | t }td |¡ƒ t	 	¡ }t  | ¡ t
¡ t	 	¡ | }td	|ƒ dt t t t
 | t }td
 |¡ƒ td || ¡ƒ q€d S )Né   Ú
single_netFÚ	cross_netTé   zSingle socket time:zSingle socket BW: {} GB/szCross socket time:zCross socket BW: {} GB/szSingle BW / Cross BW: {})r   ZIsNUMAEnabledZGetNumNUMANodesÚAssertionErrorr   Z	CreateNetZRunNetÚNamer   ÚtimeÚNUM_ITERÚprintr   r   ÚGBÚformat)	Zsingle_initr   Z
cross_initr   Ú_ÚtÚdtZ	single_bwZcross_bwr   r   r   Úmain$   s.    





r!   Ú__main__Zcaffe2z--caffe2_cpu_numa_enabled=1)Zcaffe2.pythonr   r   Zcaffe2.protor   r   r   r   r   r   r   r!   Ú__name__Z
GlobalInitr   r   r   r   Ú<module>   s   