[MITgcm-devel] global sum

Martin Losch Martin.Losch at awi.de
Mon Nov 26 11:48:39 EST 2012


Hi Jean-Michel,

in the context of seaice_fgmres.F (S/R scalprod beginning at line 551) I then need to define a local array dtemptile(nsx,nsy) and pass bi,bj down to this routine right. 
Then I compute dtemptile(bi,bj), as I now compute dtemp and then call
 CALL GLOBAL_SUM_TILE_RL( dtemptile,dtemp,myThid )

correct?

Martin

On Nov 26, 2012, at 5:40 PM, Jean-Michel Campin wrote:

> Hi Martin,
> 
> I recommend to use global_sum_tile rather than _GLOBAL_SUM for 2 reasons:
> 1) with default CPP_EEOPTIONS.h, it uses the same MPI calls than 
> _GLOBAL_SUM (so same speed), but offer the option (with #define GLOBAL_SUM_SEND_RECV),
> for a given domain decomposition in tiles (i.e., fixed tile size), 
> to get result which is independent of how tiles are distributed among processors
> (can change nSx,nSy,nPx,nPy and result stays identical). 
> This is a useful for checking that the code is right (but is slower).
> 2) it's easier to use because it "always" works, whether or not argument are
> shared (e.g., in common bloc) or are local. By contrast, _GLOBAL_SUM
> does not work with multi-threads if argument is shared (is in a common bloc).
> And since this issue is not so obvious to every one, it's easy to forget about it
> and get pieces of code which does not work with multi-threads.
> 
> And regarding global_sum_single_cpu, it's much slower, so it cannot be used 
> as the default; and as a consequence, it requires more specific coding (with 
> 1 version calling global_sum_single_cpu and a default version calling 
> global_sum_tile). But the advantage of this additional coding is to offer
> the option to get results independent of domain decomposition in tiles.
> 
> Cheers,
> Jean-Michel
> 
> On Mon, Nov 26, 2012 at 09:44:33AM +0100, Martin Losch wrote:
>> Hi there,
>> 
>> I didn't follow the development of the global-sum code. Under which circumstances should I use which of these variants:
>> _GLOBAL_SUM (as, e.g., in seaice_lsr for the residuals)
>> call global_sum_tile
>> call global_sum_single_cpu
>> 
>> Currently, I would like to figure out if I can actually fix the multithreading of the file seaice_fgmres.F
>> In there I use "stolen" code, which I don't quite know how to handle. In particular there is a scalar product, that I adjusted to use MPI, but now I would like it to use a global-sum variant.
>> 
>> Martin
>> 
>> PS. Related to this file, should I actually use LAPACK routines (actually BLAS), if HAVE_LAPACK is defined?
>> _______________________________________________
>> MITgcm-devel mailing list
>> MITgcm-devel at mitgcm.org
>> http://mitgcm.org/mailman/listinfo/mitgcm-devel
> 
> _______________________________________________
> MITgcm-devel mailing list
> MITgcm-devel at mitgcm.org
> http://mitgcm.org/mailman/listinfo/mitgcm-devel




More information about the MITgcm-devel mailing list