a
    ==ic                     @   s^   d dl Zd dlZd dlmZmZmZmZ eej	 dG dd dej
ZedkrZe  dS )    N)core	workspacemuji	test_utilzno gpuc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestMujic           	   	   C   s   t d}|D ]2}|jg dt| g dt|d t|d q||dd |D d| t| t	|t
| }t }|  |D ]}td	|t| q|D ]8}tdt| d }tjj||d
|t|f d qdS )z,A base function to test different scenarios.Zmujitesttestblob_gpu_)            r   )shapevalueZdevice_optionc                 S   s   g | ]}d t | qS )r   )str).0i r   h/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/muji_test.py
<listcomp>   s   z5TestMuji.RunningAllreduceWithGPUs.<locals>.<listcomp>Z_reducedz{} {}zgpu id %d of %s)err_msgN)r   ZNetZConstantFillr   floatr   ZOnGPUr   Z
RunNetOncesumlenZBlobssortprintformatZ	FetchBlobnptestingZassert_array_equal)	selfZgpu_idsZallreduce_functionnetidZtarget_valueZ	all_blobsZblobidxr   r   r   RunningAllreduceWithGPUs	   s8    



z!TestMuji.RunningAllreduceWithGPUsc                 C   s   |  ttt tj d S N)r!   listranger   NumGpuDevicesr   ZAllreduceFallback)r   r   r   r   testAllreduceFallback'   s    zTestMuji.testAllreduceFallbackc                 C   s&   t t D ]}| |gtj qd S r"   )r$   r   r%   r!   r   Z	Allreduce)r   r   r   r   r   testAllreduceSingleGPU,   s    zTestMuji.testAllreduceSingleGPUc                 C   sP   t  }|jd dkrDt|d dd df rD| ddgtj ntd d S )Nr   r	   r   z6Skipping allreduce with 2 gpus. Not peer access ready.)	r   GetGpuPeerAccessPatternr   r   allr!   r   Z
Allreduce2r   r   patternr   r   r   testAllreduceWithTwoGPUs0   s    (z!TestMuji.testAllreduceWithTwoGPUsc                 C   sP   t  }|jd dkrDt|d dd df rD| g dtj ntd d S )Nr   r   r   r   r	   r
   z6Skipping allreduce with 4 gpus. Not peer access ready.)	r   r(   r   r   r)   r!   r   Z
Allreduce4r   r*   r   r   r   testAllreduceWithFourGPUs7   s    (z"TestMuji.testAllreduceWithFourGPUsc                 C   sj   t  }|jd dkr^t|d dd df r^t|ddddf r^| g dtj ntd d S )Nr   r   r	   r-   zCSkipping allreduce with 4 gpus and 2 groups. Not peer access ready.)	r   r(   r   r   r)   r!   r   ZAllreduce4Group2r   r*   r   r   r   %testAllreduceWithFourGPUsAndTwoGroups>   s    Bz.TestMuji.testAllreduceWithFourGPUsAndTwoGroupsc                 C   sn   t  }|jd dkrbt|d dd df rbt|dd dd f rb| ttdtj	 nt
d d S )Nr      r   z6Skipping allreduce with 8 gpus. Not peer access ready.)r   r(   r   r   r)   r!   r#   r$   r   Z
Allreduce8r   r*   r   r   r   testAllreduceWithEightGPUsE   s    z#TestMuji.testAllreduceWithEightGPUsN)
__name__
__module____qualname__r!   r&   r'   r,   r.   r/   r1   r   r   r   r   r      s   r   __main__)numpyr   ZunittestZcaffe2.pythonr   r   r   r   ZskipIfZhas_gpu_supportZTestCaser   r2   mainr   r   r   r   <module>   s   I