<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><DIV>No, none of the processes ever get 100% CPU utilization.&nbsp; All the slaves</DIV>
<DIV>get utilization between 50-90%.&nbsp; The proc running on CPU 2 hops away</DIV>
<DIV>is seeing 50% CPU utilization, that jives well with the cross process probing</DIV>
<DIV>performance hit on AMD architecture.<BR></DIV>
<DIV>&nbsp;</DIV>
<DIV>master is getting &lt;60% CPU utilitzation and 40% idle.&nbsp; Recv thread is 20% CPU,</DIV>
<DIV>80% sys.</DIV>
<DIV style="FONT-FAMILY: times new roman, new york, times, serif; FONT-SIZE: 12pt">&nbsp;</DIV>
<DIV style="FONT-FAMILY: times new roman, new york, times, serif; FONT-SIZE: 12pt">tan</DIV>
<DIV style="FONT-FAMILY: times new roman, new york, times, serif; FONT-SIZE: 12pt"><BR>&nbsp;</DIV>
<DIV style="FONT-FAMILY: arial, helvetica, sans-serif; FONT-SIZE: 13px"><FONT size=2 face=Tahoma>
<HR SIZE=1>
<B><SPAN style="FONT-WEIGHT: bold">From:</SPAN></B> Pavan Balaji &lt;balaji@mcs.anl.gov&gt;<BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> mpich-discuss@mcs.anl.gov<BR><B><SPAN style="FONT-WEIGHT: bold">Sent:</SPAN></B> Friday, July 31, 2009 12:57:13 PM<BR><B><SPAN style="FONT-WEIGHT: bold">Subject:</SPAN></B> Re: [mpich-discuss] thread MPI calls<BR></FONT><BR><BR>Whenever any process/thread is within MPI, it'll use 100% CPU. Whenever, any process/thread is within do_work() or do_very_little_work(), it'll use 100% CPU. The only time you might not see 100% CPU usage is when a thread is blocked within a semaphore waiting for another thread to send a signal.<BR><BR>So, in your example, all worker processes should always see 100% CPU usage. The recv thread should always see 100% CPU usage. The main thread should only see CPU usage when it is not blocking waiting for a signal from the recv thread.<BR><BR>Is the above what you are noticing?<BR><BR>--
 Pavan<BR><BR>On 07/31/2009 02:43 PM, chong tan wrote:<BR>&gt; <BR>&gt; I am running 1 master process and 3 slave process, master has<BR>&gt; a recv thread, that make it 5 processes total.<BR>&gt;&nbsp; THe box I have has 16 cores.<BR>&gt;&nbsp; tan<BR>&gt; <BR>&gt;&nbsp; ------------------------------------------------------------------------<BR>&gt; *From:* Pavan Balaji &lt;<A href="mailto:balaji@mcs.anl.gov" ymailto="mailto:balaji@mcs.anl.gov">balaji@mcs.anl.gov</A>&gt;<BR>&gt; *To:* <A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A><BR>&gt; *Sent:* Friday, July 31, 2009 12:10:21 PM<BR>&gt; *Subject:* Re: [mpich-discuss] thread MPI calls<BR>&gt; <BR>&gt; <BR>&gt; How many processes+threads do you have? It looks like you are running 1 master process (with two threads) + 3 slaves (= 5 processes/threads) on a 4-core system. Is this correct? If yes, all of these will contend for the 4
 cores.<BR>&gt; <BR>&gt; -- Pavan<BR>&gt; <BR>&gt; On 07/30/2009 08:21 PM, chong tan wrote:<BR>&gt;&nbsp; &gt; D,<BR>&gt;&nbsp; &gt; the simplest test we have is 1 master and 3 slaves, 3 workers in total.&nbsp; Data szie<BR>&gt;&nbsp; &gt; start at 5K byte (1 time), then dwindles down to less than 128 byte in a hurry. THe MPI_Send/IRecv/Recv were the only ones in our application (besides from<BR>&gt;&nbsp; &gt; MPI_Init() and 1 partiticular MPI_Barrier() when the application is initialized, and 1<BR>&gt;&nbsp; &gt; Finish() ).<BR>&gt;&nbsp; &gt;&nbsp; do_work() has do to some amount of work, more in master proc than slave. do_litle_work()<BR>&gt;&nbsp; &gt; does what it means, in our application, it is 3 function return with int value, and 1 check for<BR>&gt;&nbsp; &gt; trace/monitor flag.&nbsp; (code is like "if( trace ) print_trace(..)" )<BR>&gt;&nbsp; &gt;&nbsp; The test was ran on a 4XQuad box, each process on its own physcial CPU.&nbsp;
 THe<BR>&gt;&nbsp; &gt; master proc (proc 0) is run on the same physical CPU as&nbsp; its thread.&nbsp; THe box<BR>&gt;&nbsp; &gt; is AMD based, so no HT (our application filters cores created by hyperthreading<BR>&gt;&nbsp; &gt; by default).&nbsp; on the 3 workers test, we see 20% to 50% sys activity constantly.&nbsp; WHich in term slow<BR>&gt;&nbsp; &gt; down each proc to the point that master (proc 0)'s main thread becomes idle 40% of the time.<BR>&gt;&nbsp; &gt; In the extreme case, we saw the threaded code being 70% slower than un-threaded one.<BR>&gt;&nbsp; &gt;&nbsp; We have the tests ready to show the issues, it would be nice if you are around SF Bay area.<BR>&gt;&nbsp; &gt;&nbsp; thanks<BR>&gt;&nbsp; &gt; tan<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;&nbsp; ------------------------------------------------------------------------<BR>&gt;&nbsp; &gt; *From:* Darius Buntinas &lt;<A href="mailto:buntinas@mcs.anl.gov"
 ymailto="mailto:buntinas@mcs.anl.gov">buntinas@mcs.anl.gov</A> &lt;mailto:<A href="mailto:buntinas@mcs.anl.gov" ymailto="mailto:buntinas@mcs.anl.gov">buntinas@mcs.anl.gov</A>&gt;&gt;<BR>&gt;&nbsp; &gt; *To:* <A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A> &lt;mailto:<A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A>&gt;<BR>&gt;&nbsp; &gt; *Sent:* Thursday, July 30, 2009 1:49:10 PM<BR>&gt;&nbsp; &gt; *Subject:* Re: [mpich-discuss] thread MPI calls<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt; OK.&nbsp; Yes, unless do_work and do_very_little_work make any blocking calls<BR>&gt;&nbsp; &gt; (like I/O), process 1 should have 100% cpu utilization.&nbsp; This should be<BR>&gt;&nbsp; &gt; fine (from a performance standpoint), as long as you aren't<BR>&gt;&nbsp; &gt; oversubscribing your processors.<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;
 I'm going to try to reproduce your tests on our machines.&nbsp; How many<BR>&gt;&nbsp; &gt; worker processes do you have?&nbsp; Is this all on one node?&nbsp; If not how many<BR>&gt;&nbsp; &gt; nodes?&nbsp; How many cores do you have per node?<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt; In the mean time can you check to which processor each process is bound?<BR>&gt;&nbsp; &gt; Make sure that each process is bound to its own core, and not to a<BR>&gt;&nbsp; &gt; hyperthread.<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt; Thanks,<BR>&gt;&nbsp; &gt; -d<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt; On 07/30/2009 02:02 PM, chong tan wrote:<BR>&gt;&nbsp; &gt;&nbsp; &gt; D,<BR>&gt;&nbsp; &gt;&nbsp; &gt; sorry for the confusion.&nbsp; In our application, the setting is different<BR>&gt;&nbsp; &gt;&nbsp; &gt; from the code<BR>&gt;&nbsp; &gt;&nbsp; &gt; Pavan posted.&nbsp; I will try to have them lined up here, (&lt;--- is between<BR>&gt;&nbsp;
 &gt;&nbsp; &gt; thread,<BR>&gt;&nbsp; &gt;&nbsp; &gt; &lt;==== is between proc)<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proc 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proc 1<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;&nbsp; main thread&nbsp; &nbsp; recv thread<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;&nbsp; do_work()&nbsp; &nbsp; MPI_Irecv&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do_work()<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MPI_Wait*()&nbsp; &lt;=======&nbsp; &nbsp; &nbsp; MPI_Send()<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; blocked&nbsp; &nbsp; &lt;--- unblock&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &gt; do_very_litle_work()<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; MPI_Send&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ==========&gt;&nbsp; MPI_Recv()<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt; I don't know if the MPI_Recv call in Proc 1 is interferring with the<BR>&gt;&nbsp; &gt;&nbsp; &gt; MPI_Wait*() in Proc 1.&nbsp; We<BR>&gt;&nbsp; &gt;&nbsp; &gt; see heavy system activity in Proc 1.<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &gt; tan<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt; ------------------------------------------------------------------------<BR>&gt;&nbsp; &gt;&nbsp; &gt; *From:* Darius Buntinas &lt;<A href="mailto:buntinas@mcs.anl.gov" ymailto="mailto:buntinas@mcs.anl.gov">buntinas@mcs.anl.gov</A> &lt;mailto:<A href="mailto:buntinas@mcs.anl.gov"
 ymailto="mailto:buntinas@mcs.anl.gov">buntinas@mcs.anl.gov</A>&gt; &lt;mailto:<A href="mailto:buntinas@mcs.anl.gov" ymailto="mailto:buntinas@mcs.anl.gov">buntinas@mcs.anl.gov</A> &lt;mailto:<A href="mailto:buntinas@mcs.anl.gov" ymailto="mailto:buntinas@mcs.anl.gov">buntinas@mcs.anl.gov</A>&gt;&gt;&gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt; *To:* <A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A> &lt;mailto:<A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A>&gt; &lt;mailto:<A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A> &lt;mailto:<A href="mailto:mpich-discuss@mcs.anl.gov" ymailto="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</A>&gt;&gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt; *Sent:* Thursday, July 30, 2009 11:17:52 AM<BR>&gt;&nbsp; &gt;&nbsp; &gt; *Subject:* Re:
 [mpich-discuss] thread MPI calls<BR>&gt;&nbsp; &gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt; That sounds fishy.&nbsp; If process 1 is doing a sleep(), you shouldn't see<BR>&gt;&nbsp; &gt;&nbsp; &gt; any activity from that process!&nbsp; Can you double check that?<BR>&gt;&nbsp; &gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt; -d<BR>&gt;&nbsp; &gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt; On 07/30/2009 01:05 PM, chong tan wrote:<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt; pavan,<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt; the behavior you described is the expected behavior.&nbsp; However, using<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt; your example, we are also seeing<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt; a lot of system activity in process 1 in all of our experiments.&nbsp; That<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt; contributes significantly<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt; to the negative gain.<BR>&gt;&nbsp; &gt;&nbsp; &gt;&gt;<BR>&gt;&nbsp; &gt;&nbsp; &gt;<BR>&gt;&nbsp; &gt;<BR>&gt;
 <BR>&gt; -- Pavan Balaji<BR>&gt; http://www.mcs.anl.gov/~balaji<BR>&gt; <BR><BR>-- Pavan Balaji<BR><A href="http://www.mcs.anl.gov/~balaji" target=_blank>http://www.mcs.anl.gov/~balaji</A><BR></DIV></div><br>

      </body></html>