B
    d                 @   sH   d Z ddlZdddZdddZddd	Zeed
e_edkrDe  dS )zRun MPI benchmarks and tests.    NTc             C   s   ddl m} |td d}|jdddd|d	 ||}d
dlm} |  }|  }|	 }	dt
t|d
 |||	f }
|   |dkr| ddg|d
  |jrtj|
 tj  ||d
 k r| ddg|d
  |   |
S )zHello, World! using MPI.r   )ArgumentParserz helloworld)progz-qz--quietstore_falseverbose)actiondestdefault   )MPIz,Hello, World! I am process %*d of %d on %s.
NB)argparser   __name__add_argument
parse_args r
   Get_sizeGet_rankZGet_processor_namelenstrBarrierRecvr   _sysstdoutwriteflushSend)commargsr   r   parseroptionsr
   sizeranknamemessage r$   Y/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/mpi4py/bench.py
helloworld   s*    



r&   c             C   s   ddl m} |td d}|jdddd|d	 |jd
dtdddd |jddtdddd |jddtdddd ||}ddd}t|dd}t|dd}t|dd}	|   || |||	}
|jr| j	dkrd||
| j
|f }tj| tj  |
S )z2Time a message going around the ring of processes.r   )r   z	 ringtest)r   z-qz--quietr   r   )r   r   r   z-nz--sizer	   r    zmessage size)typer   r   helpz-sz--skipskipznumber of warm-up iterationsz-lz--looploopznumber of iterationsc             S   s  ddl m } ddlm} tt|| }|  }|  }|d | }	|d | }
| j}| j}| j	}|j
}|ddg| }|ddg| }|dkrx|D ]$}||kr| }|||
d||	d qW nz|dkrxp|D ]*}||kr| }|||
d |||	d qW n<|}x6|D ].}||kr| }|||	d |||
d qW | }| jdkr||krdd l}dd l}y|d W n( tk
r   |  | d Y nX || S )	Nr   )arrayr	   )r
   r   *   z received message does not match!   )r+   r   r
   listranger   r   Sendrecvr   r   Wtimer!   warnings	tracebackwarnUserWarning	print_excZAbort)r   nr*   r)   r+   r
   Z
iterationsr    r!   sourcer   r0   r   r   r1   sendmsgrecvmsgiZticZtocr2   r3   r$   r$   r%   ring3   sR    



zringtest.<locals>.ringz8time for %d loops = %g seconds (%d processes, %d bytes)
)r	   r	   r   )r   r   r   r   intr   getattrr   r   r!   r    r   r   r   r   )r   r   r   r   r   r   r<   r    r*   r)   elapsedr#   r$   r$   r%   ringtest"   s.    



/
r@   c       
   	   C   sz  ddl m}m} |tdd}|jddddd	d
 |jdddddd
 |jdddddd dd |jdddddd
 |jdddddd
 |jddddd |jd |d!d"d# || }d$d%lm}m	} |j
dk	r|j
|_
|jdk	r|j|_|jr|dd&d' |jr|dd&d' d$d(lm} |j}|jtjkrV|jdkrL|d)|j  |d* tj|j }	|	||j |  dS )+z+Entry-point for ``python -m mpi4py.bench``.r   )r   	REMAINDERz#%(prog)s [options] <command> [args])r   usagez	--threads
store_truethreadsNz"initialize MPI with thread support)r   r   r   r(   z--no-threadsr   z%initialize MPI without thread supportz--thread-levelthread_levelstoreZLEVELz#single funneled serialized multiplez)initialize MPI with required thread level)r   r   r   metavarchoicesr(   z--mpempeFzuse MPE for MPI profilingz--vtvtz!use VampirTrace for MPI profilingcommandz	<command>zbenchmark command to run)r   rG   r(   r   z[args]zarguments for benchmark command)nargsrG   r(   r	   )rcprofileZmpi4py)Zlogfile)r
   zunknown command '%s'r-   )r   r   rA   r   r   splitr   r   rM   rN   rD   rE   rI   rJ   r
   Z
COMM_WORLDrK   maincommandsr!   errorexitr   )
r   r   rA   r   r   rM   rN   r
   r   rK   r$   r$   r%   rP   o   sZ    



rP   )r&   r@   __main__)NT)NT)N)__doc__sysr   r&   r@   rP   rQ   r   r$   r$   r$   r%   <module>   s   

M
5
