<font size=2 face="sans-serif">If I put a new, big CS_ENTER(BSENDDATA)
lock around the bsend processing (that doesn't yield), then MPIU_THREAD_GRANULARITY_PER_OBJECT
works ok.</font>
<br><font size=2 face="sans-serif"><br>
Bob Cernohous:  (T/L 553) 507-253-6093<br>
<br>
BobC@us.ibm.com<br>
IBM Rochester, Building 030-2(C335), Department 61L<br>
3605 Hwy 52 North, Rochester,  MN 55901-7829<br>
<br>
> Chaos reigns within.<br>
> Reflect, repent, and reboot.<br>
> Order shall return.<br>
</font>
<br>
<br><tt><font size=2>devel-bounces@mpich.org wrote on 04/25/2013 11:20:17
PM:<br>
<br>
> From: Bob Cernohous/Rochester/IBM@IBMUS</font></tt>
<br><tt><font size=2>> To: mpich2-dev@mcs.anl.gov, </font></tt>
<br><tt><font size=2>> Cc: Nysal K Jan <jnysal@in.ibm.com>, Haizhu
Liu/Poughkeepsie/<br>
> IBM@IBMUS, Sameh S Sharkawi/Austin/IBM@IBMUS, Su Huang/Poughkeepsie/IBM@IBMUS</font></tt>
<br><tt><font size=2>> Date: 04/25/2013 11:20 PM</font></tt>
<br><tt><font size=2>> Subject: Re: [mpich-devel] MPI_Bsend fails multithreaded</font></tt>
<br><tt><font size=2>> Sent by: devel-bounces@mpich.org</font></tt>
<br><tt><font size=2>> <br>
> I think my problem with MPIU_THREAD_GRANULARITY_GLOBAL is a CS_YIELD.
  <br>
> <br>
> MPIU_THREAD_CS_ENTER(ALLFUNC,); <br>
> .... <br>
> <br>
> MPIR_Bsend_data_t *active = BsendBuffer.active, *next_active; <br>
>     while (active) { <br>
>         fprintf(stderr,"%2.2u:%u:active %p
(0x%08x kind=%d) refcount %d\n", <br>
>                 Kernel_ProcessorID(),__LINE__,
<br>
>                 (active->request),
                     
                    <br>
>                 (active->request)->handle,
                     
            <br>
>                 active->request->kind,
<br>
>                    
    MPIU_Object_get_ref((active->request))); <br>
> ... <br>
> <br>
> There's one or more yields somewhere... in test and/or progress. I
<br>
> haven't tracked it down and I'm out tomorrow.   I end up with
3 <br>
> threads (26, 54, 48) working on the same active request.   26
frees <br>
> it and moves on to the next active.  48 chokes on the freed request.
<br>
> <br>
> stderr[0]: threaded exit <br>
> stderr[0]: 26:441:active 0x15d1c78 (0xac000003 kind=1) refcount 2
<br>
> stderr[0]: 26:decr 0x15d1aa8 (0xac000001 kind=REQUEST) refcount to
1 <br>
> stderr[0]: 26:decr 0x15d1c78 (0xac000003 kind=REQUEST) refcount to
1 <br>
> stderr[0]: yield <br>
> <br>
> stderr[0]: 54:441:active 0x15d1c78 (0xac000003 kind=1) refcount 1
<br>
> stderr[0]: 54:set 0x15d1d60 (0xac000004 kind=REQUEST) refcount to
1 <br>
> stderr[0]: 54:set 0x15d1d60 (0xac000004 kind=REQUEST) refcount to
2 <br>
> stderr[0]: 54:decr 0x15d1d60 (0xac000004 kind=REQUEST) refcount to
1 <br>
> stderr[0]: yield <br>
> <br>
> stderr[0]: 48:441:active 0x15d1c78 (0xac000003 kind=1) refcount 1
<br>
> stderr[0]: 48:set 0x15d1e48 (0xac000005 kind=REQUEST) refcount to
1 <br>
> stderr[0]: 48:set 0x15d1e48 (0xac000005 kind=REQUEST) refcount to
2 <br>
> stderr[0]: 48:decr 0x15d1e48 (0xac000005 kind=REQUEST) refcount to
1 <br>
> stderr[0]: yield <br>
> <br>
> stderr[0]: 26:decr 0x15d1c78 (0xac000003 kind=REQUEST) refcount to
0 <br>
> stderr[0]: 26:decr 0x1560f78 (0x44000000 kind=COMM) refcount to 3
<br>
> stderr[0]: 26:free 0x15d1c78 (0xac000003 kind=0) refcount 0 <br>
> stderr[0]: 26:356:prev 0x15d1c78, active 0x15d1aa8 (0xac000001 <br>
> kind=1) refcount 1 <br>
> stderr[0]: 26:441:active 0x15d1aa8 (0xac000001 kind=1) refcount 1
<br>
> <br>
> stderr[0]: yield <br>
> stderr[0]: 32:441:active 0x15d1aa8 (0xac000001 kind=1) refcount 1
<br>
> <br>
> stderr[0]: yield <br>
> stderr[0]: 48:badcase 0x15d1c78 (0xac000003 kind=0) refcount 0 <br>
> stderr[0]: Abort(1) on node 0 (rank 0 in comm 1140850688): Fatal <br>
> error in MPI_Bsend: Internal MPI error!, error stack: <br>
> stderr[0]: MPI_Bsend(181)..............: MPI_Bsend(buf=0x19c8a06d70,<br>
> count=1024, MPI_CHAR, dest=1, tag=0, MPI_COMM_WORLD) failed <br>
> stderr[0]: MPIR_Bsend_isend(226).......: <br>
> stderr[0]: MPIR_Bsend_check_active(474): <br>
> stderr[0]: MPIR_Test_impl(65)..........: <br>
> stderr[0]: MPIR_Request_complete(239)..: INTERNAL ERROR: unexpected
<br>
> value in case statement (value=0) <br>
> <br>
> <br>
> I'm guessing the problem with MPIU_THREAD_GRANULARITY_PER_OBJECT is
<br>
> there's no lock and the threads are all over each other... no yield
<br>
> needed?  It's just not thread safe with the static BsendBuffer.
<br>
> <br>
> <br>
> Bob Cernohous:  (T/L 553) 507-253-6093<br>
> <br>
> BobC@us.ibm.com<br>
> IBM Rochester, Building 030-2(C335), Department 61L<br>
> 3605 Hwy 52 North, Rochester,  MN 55901-7829<br>
> <br>
> > Chaos reigns within.<br>
> > Reflect, repent, and reboot.<br>
> > Order shall return.</font></tt>