NAMD
Classes | Macros | Functions | Variables
ComputePme.C File Reference
#include <sfftw.h>
#include <srfftw.h>
#include <vector>
#include <algorithm>
#include <deque>
#include "InfoStream.h"
#include "Node.h"
#include "PatchMap.h"
#include "PatchMap.inl"
#include "AtomMap.h"
#include "ComputePme.h"
#include "ComputePmeMgr.decl.h"
#include "PmeBase.inl"
#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 "ckhashtable.h"
#include "Priorities.h"
#include "CudaUtils.h"
#include "ComputeMoa.h"
#include "ComputeMoaMgr.decl.h"
#include "DeviceCUDA.h"
#include <cuda_runtime.h>
#include <cuda.h>
#include "ComputePmeCUDAKernel.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  PmeEvirMsg
 
class  PmePencilMap
 
struct  PmePencilInitMsgData
 
class  PmePencilInitMsg
 
struct  LocalPmeInfo
 
struct  NodePmeInfo
 
struct  sortop_bit_reversed
 
struct  ijpair
 
struct  ijpair_sortop_bit_reversed
 
class  ComputePmeMgr
 
struct  ComputePmeMgr::cuda_submit_charges_args
 
class  NodePmeMgr
 
class  PmePencil< T >
 
class  PmeZPencil
 
class  PmeYPencil
 
class  PmeXPencil
 

Macros

#define fftwf_malloc   fftw_malloc
 
#define fftwf_free   fftw_free
 
#define MIN_DEBUG_LEVEL   3
 
#define NUM_STREAMS   1
 
#define CUDA_STREAM_CREATE(X)   cudaStreamCreate(X)
 
#define CUDA_EVENT_ID_PME_CHARGES   80
 
#define CUDA_EVENT_ID_PME_FORCES   81
 
#define CUDA_EVENT_ID_PME_TICK   82
 
#define CUDA_EVENT_ID_PME_COPY   83
 
#define CUDA_EVENT_ID_PME_KERNEL   84
 
#define count_limit   1000000
 
#define CUDA_POLL(FN, ARG)   CcdCallFnAfter(FN,ARG,0.1)
 
#define EVENT_STRIDE   10
 
#define XCOPY(X)   masterPmeMgr->X = X;
 
#define XCOPY(X)   X = masterPmeMgr->X;
 
#define DEBUG_NODE_PAR_RECV   0
 

Functions

void cuda_errcheck (const char *msg)
 
static int findRecipEvirPe ()
 
void generatePmePeList2 (int *gridPeMap, int numGridPes, int *transPeMap, int numTransPes)
 
int compare_bit_reversed (int a, int b)
 
bool less_than_bit_reversed (int a, int b)
 
ResizeArray< ComputePme * > & getComputes (ComputePmeMgr *mgr)
 
int isPmeProcessor (int p)
 
void Pme_init ()
 
static void PmeSlabSendTrans (int first, int last, void *result, int paraNum, void *param)
 
static void PmeSlabSendUntrans (int first, int last, void *result, int paraNum, void *param)
 
static void PmeSlabSendUngrid (int first, int last, void *result, int paraNum, void *param)
 
void CcdCallBacksReset (void *ignored, double curWallTime)
 
void cuda_check_pme_forces (void *arg, double walltime)
 
void cuda_check_pme_charges (void *arg, double walltime)
 
static void PmeXZPencilFFT (int first, int last, void *result, int paraNum, void *param)
 
static void PmeZPencilSendTrans (int first, int last, void *result, int paraNum, void *param)
 
static void PmeYPencilForwardFFT (int first, int last, void *result, int paraNum, void *param)
 
static void PmeYPencilSendTrans (int first, int last, void *result, int paraNum, void *param)
 
static void PmeXPencilSendUntrans (int first, int last, void *result, int paraNum, void *param)
 
static void PmeYPencilBackwardFFT (int first, int last, void *result, int paraNum, void *param)
 
static void PmeYPencilSendUntrans (int first, int last, void *result, int paraNum, void *param)
 
static void PmeZPencilSendUngrid (int first, int last, void *result, int paraNum, void *param)
 

Variables

__thread DeviceCUDAdeviceCUDA
 
char * pencilPMEProcessors
 

Macro Definition Documentation

◆ count_limit

#define count_limit   1000000

Definition at line 2495 of file ComputePme.C.

Referenced by cuda_check_pme_charges(), and cuda_check_pme_forces().

◆ CUDA_EVENT_ID_PME_CHARGES

#define CUDA_EVENT_ID_PME_CHARGES   80

◆ CUDA_EVENT_ID_PME_COPY

#define CUDA_EVENT_ID_PME_COPY   83

◆ CUDA_EVENT_ID_PME_FORCES

#define CUDA_EVENT_ID_PME_FORCES   81

◆ CUDA_EVENT_ID_PME_KERNEL

#define CUDA_EVENT_ID_PME_KERNEL   84

◆ CUDA_EVENT_ID_PME_TICK

#define CUDA_EVENT_ID_PME_TICK   82

◆ CUDA_POLL

#define CUDA_POLL (   FN,
  ARG 
)    CcdCallFnAfter(FN,ARG,0.1)

◆ CUDA_STREAM_CREATE

#define CUDA_STREAM_CREATE (   X)    cudaStreamCreate(X)

◆ DEBUG_NODE_PAR_RECV

#define DEBUG_NODE_PAR_RECV   0

Definition at line 5010 of file ComputePme.C.

◆ EVENT_STRIDE

#define EVENT_STRIDE   10

Definition at line 2497 of file ComputePme.C.

Referenced by cuda_check_pme_forces(), and ComputePmeMgr::ungridCalc().

◆ fftwf_free

#define fftwf_free   fftw_free

Definition at line 14 of file ComputePme.C.

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

◆ fftwf_malloc

#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 PmeZPencil::fft_init(), PmeYPencil::fft_init(), and PmeXPencil::fft_init().

◆ MIN_DEBUG_LEVEL

#define MIN_DEBUG_LEVEL   3

Definition at line 47 of file ComputePme.C.

◆ NUM_STREAMS

#define NUM_STREAMS   1

Definition at line 540 of file ComputePme.C.

Referenced by ComputePmeMgr::ComputePmeMgr().

◆ XCOPY [1/2]

#define XCOPY (   X)    masterPmeMgr->X = X;

◆ XCOPY [2/2]

#define XCOPY (   X)    X = masterPmeMgr->X;

Function Documentation

◆ CcdCallBacksReset()

void CcdCallBacksReset ( void *  ignored,
double  curWallTime 
)

◆ compare_bit_reversed()

int compare_bit_reversed ( int  a,
int  b 
)

Definition at line 344 of file ComputePme.C.

344  {
345  int d = a ^ b;
346  int c = 1;
347  if ( d ) while ( ! (d & c) ) {
348  c = c << 1;
349  }
350  return (a & c) - (b & c);
351 }

◆ cuda_check_pme_charges()

void cuda_check_pme_charges ( void *  arg,
double  walltime 
)

Definition at line 3493 of file ComputePme.C.

References CcdCallBacksReset(), ComputePmeMgr::charges_time, ComputePmeMgr::check_charges_count, count_limit, CUDA_EVENT_ID_PME_CHARGES, CUDA_POLL, cudaDie(), ComputePmeMgr::end_charges, ComputePmeMgr::saved_sequence, and ComputePmeMgr::sendChargeGridReady().

Referenced by ComputePmeMgr::pollChargeGridReady().

3493  {
3494  ComputePmeMgr *argp = (ComputePmeMgr *) arg;
3495 
3496  cudaError_t err = cudaEventQuery(argp->end_charges);
3497  if ( err == cudaSuccess ) {
3498  traceUserBracketEvent(CUDA_EVENT_ID_PME_CHARGES,argp->charges_time,walltime);
3499  argp->charges_time = walltime - argp->charges_time;
3500  argp->sendChargeGridReady();
3501  argp->check_charges_count = 0;
3502  } else if ( err != cudaErrorNotReady ) {
3503  char errmsg[256];
3504  sprintf(errmsg,"in cuda_check_pme_charges after polling %d times over %f s on seq %d",
3505  argp->check_charges_count, walltime - argp->charges_time,
3506  argp->saved_sequence);
3507  cudaDie(errmsg,err);
3508  } else if ( ++(argp->check_charges_count) >= count_limit ) {
3509  char errmsg[256];
3510  sprintf(errmsg,"cuda_check_pme_charges polled %d times over %f s on seq %d",
3511  argp->check_charges_count, walltime - argp->charges_time,
3512  argp->saved_sequence);
3513  cudaDie(errmsg,err);
3514  } else {
3515  CcdCallBacksReset(0,walltime); // fix Charm++
3517  }
3518 }
#define CUDA_POLL(FN, ARG)
Definition: ComputePme.C:2496
cudaEvent_t end_charges
Definition: ComputePme.C:452
void cudaDie(const char *msg, cudaError_t err)
Definition: CudaUtils.C:9
void sendChargeGridReady()
Definition: ComputePme.C:3552
int check_charges_count
Definition: ComputePme.C:458
void CcdCallBacksReset(void *ignored, double curWallTime)
void cuda_check_pme_charges(void *arg, double walltime)
Definition: ComputePme.C:3493
#define count_limit
Definition: ComputePme.C:2495
int saved_sequence
Definition: ComputePme.C:474
double charges_time
Definition: ComputePme.C:456
#define CUDA_EVENT_ID_PME_CHARGES

◆ cuda_check_pme_forces()

void cuda_check_pme_forces ( void *  arg,
double  walltime 
)

Definition at line 2503 of file ComputePme.C.

References CcdCallBacksReset(), ComputePmeMgr::check_forces_count, count_limit, CUDA_EVENT_ID_PME_FORCES, CUDA_POLL, cudaDie(), ComputePmeMgr::end_forces, EVENT_STRIDE, ComputePmeMgr::forces_count, ComputePmeMgr::forces_done_count, ComputePmeMgr::forces_time, WorkDistrib::messageEnqueueWork(), ComputePmeMgr::pmeComputes, and ComputePmeMgr::saved_sequence.

Referenced by ComputePmeMgr::pollForcesReady().

2503  {
2504  ComputePmeMgr *argp = (ComputePmeMgr *) arg;
2505 
2506  while ( 1 ) { // process multiple events per call
2507  cudaError_t err = cudaEventQuery(argp->end_forces[argp->forces_done_count/EVENT_STRIDE]);
2508  if ( err == cudaSuccess ) {
2509  argp->check_forces_count = 0;
2510  for ( int i=0; i<EVENT_STRIDE; ++i ) {
2512  if ( ++(argp->forces_done_count) == argp->forces_count ) break;
2513  }
2514  if ( argp->forces_done_count == argp->forces_count ) { // last event
2515  traceUserBracketEvent(CUDA_EVENT_ID_PME_FORCES,argp->forces_time,walltime);
2516  argp->forces_time = walltime - argp->forces_time;
2517  //CkPrintf("cuda_check_pme_forces forces_time == %f\n", argp->forces_time);
2518  return;
2519  } else { // more events
2520  continue; // check next event
2521  }
2522  } else if ( err != cudaErrorNotReady ) {
2523  char errmsg[256];
2524  sprintf(errmsg,"in cuda_check_pme_forces for event %d after polling %d times over %f s on seq %d",
2526  argp->check_forces_count, walltime - argp->forces_time,
2527  argp->saved_sequence);
2528  cudaDie(errmsg,err);
2529  } else if ( ++(argp->check_forces_count) >= count_limit ) {
2530  char errmsg[256];
2531  sprintf(errmsg,"cuda_check_pme_forces for event %d polled %d times over %f s on seq %d",
2533  argp->check_forces_count, walltime - argp->forces_time,
2534  argp->saved_sequence);
2535  cudaDie(errmsg,err);
2536  } else {
2537  break; // call again
2538  }
2539  } // while ( 1 )
2540  CcdCallBacksReset(0,walltime); // fix Charm++
2542 }
#define CUDA_POLL(FN, ARG)
Definition: ComputePme.C:2496
double forces_time
Definition: ComputePme.C:457
#define EVENT_STRIDE
Definition: ComputePme.C:2497
void cudaDie(const char *msg, cudaError_t err)
Definition: CudaUtils.C:9
static void messageEnqueueWork(Compute *)
Definition: WorkDistrib.C:2852
#define CUDA_EVENT_ID_PME_FORCES
void CcdCallBacksReset(void *ignored, double curWallTime)
void cuda_check_pme_forces(void *arg, double walltime)
Definition: ComputePme.C:2503
#define count_limit
Definition: ComputePme.C:2495
ResizeArray< ComputePme * > pmeComputes
Definition: ComputePme.C:480
cudaEvent_t * end_forces
Definition: ComputePme.C:453
int saved_sequence
Definition: ComputePme.C:474
int forces_done_count
Definition: ComputePme.C:455
int check_forces_count
Definition: ComputePme.C:459

◆ cuda_errcheck()

void cuda_errcheck ( const char *  msg)

Definition at line 67 of file ComputePme.C.

References NAMD_die().

Referenced by ComputePmeMgr::ComputePmeMgr(), ComputePme::doWork(), ComputePmeMgr::initialize(), ComputePmeMgr::initialize_computes(), and ComputePmeMgr::ungridCalc().

67  {
68  cudaError_t err;
69  if ((err = cudaGetLastError()) != cudaSuccess) {
70  char host[128];
71  gethostname(host, 128); host[127] = 0;
72  char devstr[128] = "";
73  int devnum;
74  if ( cudaGetDevice(&devnum) == cudaSuccess ) {
75  sprintf(devstr, " device %d", devnum);
76  }
77  cudaDeviceProp deviceProp;
78  if ( cudaGetDeviceProperties(&deviceProp, devnum) == cudaSuccess ) {
79  sprintf(devstr, " device %d pci %x:%x:%x", devnum,
80  deviceProp.pciDomainID, deviceProp.pciBusID, deviceProp.pciDeviceID);
81  }
82  char errmsg[1024];
83  sprintf(errmsg,"CUDA error %s on Pe %d (%s%s): %s", msg, CkMyPe(), host, devstr, cudaGetErrorString(err));
84  NAMD_die(errmsg);
85  }
86 }
void NAMD_die(const char *err_msg)
Definition: common.C:147

◆ findRecipEvirPe()

static int findRecipEvirPe ( )
static

Definition at line 267 of file ComputePme.C.

References NAMD_bug(), PatchMap::numPatchesOnNode(), and PatchMap::Object().

Referenced by PmeXPencil::evir_init(), and ComputePmeMgr::initialize().

267  {
268  PatchMap *patchMap = PatchMap::Object();
269  {
270  int mype = CkMyPe();
271  if ( patchMap->numPatchesOnNode(mype) ) {
272  return mype;
273  }
274  }
275  {
276  int node = CmiMyNode();
277  int firstpe = CmiNodeFirst(node);
278  int nodeSize = CmiNodeSize(node);
279  int myrank = CkMyRank();
280  for ( int i=0; i<nodeSize; ++i ) {
281  int pe = firstpe + (myrank+i)%nodeSize;
282  if ( patchMap->numPatchesOnNode(pe) ) {
283  return pe;
284  }
285  }
286  }
287  {
288  int *pelist;
289  int nodeSize;
290  CmiGetPesOnPhysicalNode(CmiPhysicalNodeID(CkMyPe()), &pelist, &nodeSize);
291  int myrank;
292  for ( int i=0; i<nodeSize; ++i ) {
293  if ( pelist[i] == CkMyPe() ) myrank = i;
294  }
295  for ( int i=0; i<nodeSize; ++i ) {
296  int pe = pelist[(myrank+i)%nodeSize];
297  if ( patchMap->numPatchesOnNode(pe) ) {
298  return pe;
299  }
300  }
301  }
302  {
303  int mype = CkMyPe();
304  int npes = CkNumPes();
305  for ( int i=0; i<npes; ++i ) {
306  int pe = (mype+i)%npes;
307  if ( patchMap->numPatchesOnNode(pe) ) {
308  return pe;
309  }
310  }
311  }
312  NAMD_bug("findRecipEvirPe() failed!");
313  return -999; // should never happen
314 }
static PatchMap * Object()
Definition: PatchMap.h:27
void NAMD_bug(const char *err_msg)
Definition: common.C:195
int numPatchesOnNode(int node)
Definition: PatchMap.h:60

◆ generatePmePeList2()

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

Definition at line 318 of file ComputePme.C.

References WorkDistrib::peDiffuseOrdering.

Referenced by ComputePmeMgr::initialize().

318  {
319  int ncpus = CkNumPes();
320 
321  for ( int i=0; i<numGridPes; ++i ) {
322  gridPeMap[i] = WorkDistrib::peDiffuseOrdering[ncpus - numGridPes + i];
323  }
324  std::sort(gridPeMap,gridPeMap+numGridPes);
325  int firstTransPe = ncpus - numGridPes - numTransPes;
326  if ( firstTransPe < 0 ) {
327  firstTransPe = 0;
328  // 0 should be first in list, skip if possible
329  if ( ncpus > numTransPes ) firstTransPe = 1;
330  }
331  for ( int i=0; i<numTransPes; ++i ) {
332  transPeMap[i] = WorkDistrib::peDiffuseOrdering[firstTransPe + i];
333  }
334  std::sort(transPeMap,transPeMap+numTransPes);
335 }
static int * peDiffuseOrdering
Definition: WorkDistrib.h:115

◆ getComputes()

ResizeArray<ComputePme*>& getComputes ( ComputePmeMgr mgr)

Definition at line 613 of file ComputePme.C.

References ComputePmeMgr::pmeComputes.

Referenced by ComputeQM::saveResults().

613  {
614  return mgr->pmeComputes ;
615 }
ResizeArray< ComputePme * > pmeComputes
Definition: ComputePme.C:480

◆ isPmeProcessor()

int isPmeProcessor ( int  p)

Definition at line 624 of file ComputePme.C.

References Node::Object(), pencilPMEProcessors, Node::simParameters, and simParams.

624  {
626  if (simParams->usePMECUDA) {
627  return 0;
628  } else {
629  return pencilPMEProcessors[p];
630  }
631 }
static Node * Object()
Definition: Node.h:86
SimParameters * simParameters
Definition: Node.h:181
#define simParams
Definition: Output.C:129
char * pencilPMEProcessors
Definition: ComputePme.C:133

◆ less_than_bit_reversed()

bool less_than_bit_reversed ( int  a,
int  b 
)
inline

Definition at line 353 of file ComputePme.C.

Referenced by sortop_bit_reversed::operator()(), and ijpair_sortop_bit_reversed::operator()().

353  {
354  int d = a ^ b;
355  int c = 1;
356  if ( d ) while ( ! (d & c) ) {
357  c = c << 1;
358  }
359  return d && (b & c);
360 }

◆ Pme_init()

void Pme_init ( )

Definition at line 880 of file ComputePme.C.

881 {
882 #if USE_TOPO_SFC
883  if (CkMyRank() == 0)
884  tmgr_lock = CmiCreateLock();
885 #endif
886 }

◆ PmeSlabSendTrans()

static void PmeSlabSendTrans ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 1960 of file ComputePme.C.

References ComputePmeMgr::sendTransSubset().

Referenced by ComputePmeMgr::sendTrans().

1960  {
1961  ComputePmeMgr *mgr = (ComputePmeMgr *)param;
1962  mgr->sendTransSubset(first, last);
1963 }
void sendTransSubset(int first, int last)
Definition: ComputePme.C:1981

◆ PmeSlabSendUngrid()

static void PmeSlabSendUngrid ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 2390 of file ComputePme.C.

References ComputePmeMgr::sendUngridSubset().

Referenced by ComputePmeMgr::sendUngrid().

2390  {
2391  ComputePmeMgr *mgr = (ComputePmeMgr *)param;
2392  mgr->sendUngridSubset(first, last);
2393 }
void sendUngridSubset(int first, int last)
Definition: ComputePme.C:2411

◆ PmeSlabSendUntrans()

static void PmeSlabSendUntrans ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 2204 of file ComputePme.C.

References ComputePmeMgr::sendUntransSubset().

Referenced by ComputePmeMgr::sendUntrans().

2204  {
2205  ComputePmeMgr *mgr = (ComputePmeMgr *)param;
2206  mgr->sendUntransSubset(first, last);
2207 }
void sendUntransSubset(int first, int last)
Definition: ComputePme.C:2236

◆ PmeXPencilSendUntrans()

static void PmeXPencilSendUntrans ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 5771 of file ComputePme.C.

References PmeXPencil::send_subset_untrans().

Referenced by PmeXPencil::send_untrans().

5771  {
5772  PmeXPencil *xpencil = (PmeXPencil *)param;
5773  xpencil->send_subset_untrans(first, last);
5774 }
void send_subset_untrans(int fromIdx, int toIdx)
Definition: ComputePme.C:5776

◆ PmeXZPencilFFT()

static void PmeXZPencilFFT ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 5208 of file ComputePme.C.

Referenced by PmeZPencil::backward_fft(), PmeXPencil::backward_fft(), PmeZPencil::forward_fft(), and PmeXPencil::forward_fft().

5208  {
5209 #ifdef NAMD_FFTW
5210 #ifdef NAMD_FFTW_3
5211  fftwf_plan *plans = (fftwf_plan *)param;
5212  for(int i=first; i<=last; i++) fftwf_execute(plans[i]);
5213 #endif
5214 #endif
5215 }

◆ PmeYPencilBackwardFFT()

static void PmeYPencilBackwardFFT ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 5946 of file ComputePme.C.

References PmeYPencil::backward_subset_fft().

Referenced by PmeYPencil::backward_fft().

5946  {
5947  PmeYPencil *ypencil = (PmeYPencil *)param;
5948  ypencil->backward_subset_fft(first, last);
5949 }
void backward_subset_fft(int fromIdx, int toIdx)
Definition: ComputePme.C:5951

◆ PmeYPencilForwardFFT()

static void PmeYPencilForwardFFT ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 5437 of file ComputePme.C.

References PmeYPencil::forward_subset_fft().

Referenced by PmeYPencil::forward_fft().

5437  {
5438  PmeYPencil *ypencil = (PmeYPencil *)param;
5439  ypencil->forward_subset_fft(first, last);
5440 }
void forward_subset_fft(int fromIdx, int toIdx)
Definition: ComputePme.C:5441

◆ PmeYPencilSendTrans()

static void PmeYPencilSendTrans ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 5489 of file ComputePme.C.

References PmeYPencil::send_subset_trans().

Referenced by PmeYPencil::send_trans().

5489  {
5490  PmeYPencil *ypencil = (PmeYPencil *)param;
5491  ypencil->send_subset_trans(first, last);
5492 }
void send_subset_trans(int fromIdx, int toIdx)
Definition: ComputePme.C:5494

◆ PmeYPencilSendUntrans()

static void PmeYPencilSendUntrans ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 6005 of file ComputePme.C.

References PmeYPencil::send_subset_untrans().

Referenced by PmeYPencil::send_untrans().

6005  {
6006  PmeYPencil *ypencil = (PmeYPencil *)param;
6007  ypencil->send_subset_untrans(first, last);
6008 }
void send_subset_untrans(int fromIdx, int toIdx)
Definition: ComputePme.C:6010

◆ PmeZPencilSendTrans()

static void PmeZPencilSendTrans ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 5273 of file ComputePme.C.

References PmeZPencil::send_subset_trans().

Referenced by PmeZPencil::send_trans().

5273  {
5274  PmeZPencil *zpencil = (PmeZPencil *)param;
5275  zpencil->send_subset_trans(first, last);
5276 }
void send_subset_trans(int fromIdx, int toIdx)
Definition: ComputePme.C:5278

◆ PmeZPencilSendUngrid()

static void PmeZPencilSendUngrid ( int  first,
int  last,
void *  result,
int  paraNum,
void *  param 
)
inlinestatic

Definition at line 6241 of file ComputePme.C.

References PmeZPencil::send_subset_ungrid().

Referenced by PmeZPencil::send_all_ungrid().

6241  {
6242  //to take advantage of the interface which allows 3 user params at most.
6243  //under such situtation, no new parameter list needs to be created!! -Chao Mei
6244  PmeZPencil *zpencil = (PmeZPencil *)param;
6245  zpencil->send_subset_ungrid(first, last);
6246 }
void send_subset_ungrid(int fromIdx, int toIdx)
Definition: ComputePme.C:6262

Variable Documentation

◆ deviceCUDA

__thread DeviceCUDA* deviceCUDA

◆ pencilPMEProcessors

char* pencilPMEProcessors

Definition at line 133 of file ComputePme.C.

Referenced by ComputePmeMgr::initialize(), and isPmeProcessor().