Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

ComputePme.C File Reference

#include <sfftw.h>
#include <srfftw.h>
#include "InfoStream.h"
#include "Node.h"
#include "PatchMap.h"
#include "PatchMap.inl"
#include "AtomMap.h"
#include "ComputePme.h"
#include "ComputePmeMgr.decl.h"
#include "PmeRealSpace.h"
#include "PmeKSpace.h"
#include "ComputeNonbondedUtil.h"
#include "PatchMgr.h"
#include "Molecule.h"
#include "ReductionMgr.h"
#include "ComputeMgr.h"
#include "ComputeMgr.decl.h"
#include "Debug.h"
#include "SimParameters.h"
#include "WorkDistrib.h"
#include "varsizemsg.h"
#include "Random.h"
#include "Priorities.h"
#include "ComputePmeMgr.def.h"

Go to the source code of this file.

Classes

class  PmeAckMsg
class  PmeGridMsg
class  PmeTransMsg
class  PmeSharedTransMsg
class  PmeUntransMsg
class  PmeSharedUntransMsg
class  PmePencilMap
struct  PmePencilInitMsgData
class  PmePencilInitMsg
struct  LocalPmeInfo
struct  NodePmeInfo
struct  ijpair
class  ComputePmeMgr
class  NodePmeMgr
class  PmePencil< T >
class  PmeZPencil
class  PmeYPencil
class  PmeXPencil

Defines

#define fftwf_malloc   fftw_malloc
#define fftwf_free   fftw_free
#define MIN_DEBUG_LEVEL   3

Functions

void generatePmePeList (int *peMap, int numPes)
void generatePmePeList2 (int *gridPeMap, int numGridPes, int *transPeMap, int numTransPes)
int isPmeProcessor (int p)

Variables

char * pencilPMEProcessors


Define Documentation

#define fftwf_free   fftw_free
 

Definition at line 14 of file ComputePme.C.

Referenced by PmePencil< CBase_PmeZPencil >::~PmePencil().

#define fftwf_malloc   fftw_malloc
 

Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved.

Definition at line 13 of file ComputePme.C.

Referenced by PmeXPencil::fft_init(), PmeYPencil::fft_init(), and PmeZPencil::fft_init().

#define MIN_DEBUG_LEVEL   3
 

Definition at line 41 of file ComputePme.C.


Function Documentation

void generatePmePeList int *  peMap,
int  numPes
 

Definition at line 180 of file ComputePme.C.

References j, ResizeArray< Elem >::resize(), and SortableResizeArray< Elem >::sort().

00180                                               {
00181   // decide which pes to use by bit reversal
00182   int i;
00183   int ncpus = CkNumPes();
00184   
00185   // find next highest power of two
00186   int npow2 = 1;  int nbits = 0;
00187   while ( npow2 < ncpus ) { npow2 *= 2; nbits += 1; }
00188   
00189   // build bit reversal sequence
00190   SortableResizeArray<int> seq(ncpus);
00191   i = 0;
00192   for ( int icpu=0; icpu<ncpus; ++icpu ) {
00193     int ri;
00194     for ( ri = ncpus; ri >= ncpus; ++i ) {
00195       ri = 0;
00196       int pow2 = 1;
00197       int rpow2 = npow2 / 2;
00198       for ( int j=0; j<nbits; ++j ) {
00199         ri += rpow2 * ( ( i / pow2 ) % 2 );
00200         pow2 *= 2;  rpow2 /= 2;
00201       }
00202     }
00203     seq[icpu] = ri;
00204   }
00205   
00206   // extract and sort PME locations
00207   for ( i=0; i<numPes; ++i ) {
00208     seq[i] = seq[ncpus - numPes + i];
00209   }
00210   seq.resize(numPes);
00211   seq.sort();
00212   
00213   for ( i=0; i<numPes; ++i ) 
00214       peMap[i] = seq[i];
00215 
00216   //peMap[0] = 0;
00217 }

void generatePmePeList2 int *  gridPeMap,
int  numGridPes,
int *  transPeMap,
int  numTransPes
 

Definition at line 220 of file ComputePme.C.

References j, ResizeArray< Elem >::resize(), and SortableResizeArray< Elem >::sort().

Referenced by ComputePmeMgr::initialize().

00220                                                                                          {
00221   // decide which pes to use by bit reversal
00222   int i;
00223   int ncpus = CkNumPes();
00224   
00225   // find next highest power of two
00226   int npow2 = 1;  int nbits = 0;
00227   while ( npow2 < ncpus ) { npow2 *= 2; nbits += 1; }
00228   
00229   // build bit reversal sequence
00230   SortableResizeArray<int> seq(ncpus);
00231   SortableResizeArray<int> seq2(ncpus);
00232   i = 0;
00233   for ( int icpu=0; icpu<ncpus; ++icpu ) {
00234     int ri;
00235     for ( ri = ncpus; ri >= ncpus; ++i ) {
00236       ri = 0;
00237       int pow2 = 1;
00238       int rpow2 = npow2 / 2;
00239       for ( int j=0; j<nbits; ++j ) {
00240         ri += rpow2 * ( ( i / pow2 ) % 2 );
00241         pow2 *= 2;  rpow2 /= 2;
00242       }
00243     }
00244     seq[icpu] = ri;
00245     seq2[icpu] = ri;
00246   }
00247   
00248   // extract and sort PME locations
00249   for ( i=0; i<numGridPes; ++i ) {
00250     seq[i] = seq[ncpus - numGridPes + i];
00251   }
00252   seq.resize(numGridPes);
00253   seq.sort();
00254   int firstTransPe = ncpus - numGridPes - numTransPes;
00255   if ( firstTransPe < 0 ) {
00256     firstTransPe = 0;
00257     // 0 should be first in list, skip if possible
00258     if ( ncpus > numTransPes ) firstTransPe = 1;
00259   }
00260   for ( i=0; i<numTransPes; ++i ) {
00261     seq2[i] = seq2[firstTransPe + i];
00262   }
00263   seq2.resize(numTransPes);
00264   seq2.sort();
00265   
00266   for ( i=0; i<numGridPes; ++i ) 
00267     gridPeMap[i] = seq[i];
00268 
00269   for ( i=0; i<numTransPes; ++i ) 
00270     transPeMap[i] = seq2[i];
00271 }

int isPmeProcessor int  p  ) 
 

Definition at line 409 of file ComputePme.C.

00409                          { 
00410   return CProxy_ComputePmeMgr::ckLocalBranch(CkpvAccess(BOCclass_group).computePmeMgr)->isPmeProcessor(p);
00411 }


Variable Documentation

char* pencilPMEProcessors
 

Definition at line 53 of file ComputePme.C.

Referenced by OptPmeMgr::initialize(), OptPmePencilMapZ::initialize(), OptPmePencilMapY::initialize(), OptPmePencilMapX::initialize(), ComputePmeMgr::initialize(), and ComputePmeMgr::isPmeProcessor().


Generated on Sun Feb 12 04:07:58 2012 for NAMD by  doxygen 1.3.9.1