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 2504 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 5068 of file ComputePme.C.

◆ EVENT_STRIDE

#define EVENT_STRIDE   10

Definition at line 2506 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 542 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 346 of file ComputePme.C.

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

◆ cuda_check_pme_charges()

void cuda_check_pme_charges ( void *  arg,
double  walltime 
)

Definition at line 3540 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().

3540  {
3541  ComputePmeMgr *argp = (ComputePmeMgr *) arg;
3542 
3543  cudaError_t err = cudaEventQuery(argp->end_charges);
3544  if ( err == cudaSuccess ) {
3545  traceUserBracketEvent(CUDA_EVENT_ID_PME_CHARGES,argp->charges_time,walltime);
3546  argp->charges_time = walltime - argp->charges_time;
3547  argp->sendChargeGridReady();
3548  argp->check_charges_count = 0;
3549  } else if ( err != cudaErrorNotReady ) {
3550  char errmsg[256];
3551  sprintf(errmsg,"in cuda_check_pme_charges after polling %d times over %f s on seq %d",
3552  argp->check_charges_count, walltime - argp->charges_time,
3553  argp->saved_sequence);
3554  cudaDie(errmsg,err);
3555  } else if ( ++(argp->check_charges_count) >= count_limit ) {
3556  char errmsg[256];
3557  sprintf(errmsg,"cuda_check_pme_charges polled %d times over %f s on seq %d",
3558  argp->check_charges_count, walltime - argp->charges_time,
3559  argp->saved_sequence);
3560  cudaDie(errmsg,err);
3561  } else {
3562  CcdCallBacksReset(0,walltime); // fix Charm++
3564  }
3565 }
#define CUDA_POLL(FN, ARG)
Definition: ComputePme.C:2505
cudaEvent_t end_charges
Definition: ComputePme.C:454
void cudaDie(const char *msg, cudaError_t err)
Definition: CudaUtils.C:9
void sendChargeGridReady()
Definition: ComputePme.C:3599
int check_charges_count
Definition: ComputePme.C:460
void CcdCallBacksReset(void *ignored, double curWallTime)
void cuda_check_pme_charges(void *arg, double walltime)
Definition: ComputePme.C:3540
#define count_limit
Definition: ComputePme.C:2504
int saved_sequence
Definition: ComputePme.C:476
double charges_time
Definition: ComputePme.C:458
#define CUDA_EVENT_ID_PME_CHARGES

◆ cuda_check_pme_forces()

void cuda_check_pme_forces ( void *  arg,
double  walltime 
)

Definition at line 2512 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().

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

◆ 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 269 of file ComputePme.C.

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

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

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

References WorkDistrib::peDiffuseOrdering.

Referenced by ComputePmeMgr::initialize().

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

◆ getComputes()

ResizeArray<ComputePme*>& getComputes ( ComputePmeMgr mgr)

Definition at line 615 of file ComputePme.C.

References ComputePmeMgr::pmeComputes.

Referenced by ComputeQM::saveResults().

615  {
616  return mgr->pmeComputes ;
617 }
ResizeArray< ComputePme * > pmeComputes
Definition: ComputePme.C:482

◆ isPmeProcessor()

int isPmeProcessor ( int  p)

Definition at line 626 of file ComputePme.C.

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

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

◆ less_than_bit_reversed()

bool less_than_bit_reversed ( int  a,
int  b 
)
inline

Definition at line 355 of file ComputePme.C.

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

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

◆ Pme_init()

void Pme_init ( )

Definition at line 882 of file ComputePme.C.

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

◆ PmeSlabSendTrans()

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

Definition at line 1962 of file ComputePme.C.

References ComputePmeMgr::sendTransSubset().

Referenced by ComputePmeMgr::sendTrans().

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

◆ PmeSlabSendUngrid()

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

Definition at line 2399 of file ComputePme.C.

References ComputePmeMgr::sendUngridSubset().

Referenced by ComputePmeMgr::sendUngrid().

2399  {
2400  ComputePmeMgr *mgr = (ComputePmeMgr *)param;
2401  mgr->sendUngridSubset(first, last);
2402 }
void sendUngridSubset(int first, int last)
Definition: ComputePme.C:2420

◆ PmeSlabSendUntrans()

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

Definition at line 2213 of file ComputePme.C.

References ComputePmeMgr::sendUntransSubset().

Referenced by ComputePmeMgr::sendUntrans().

2213  {
2214  ComputePmeMgr *mgr = (ComputePmeMgr *)param;
2215  mgr->sendUntransSubset(first, last);
2216 }
void sendUntransSubset(int first, int last)
Definition: ComputePme.C:2245

◆ PmeXPencilSendUntrans()

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

Definition at line 5830 of file ComputePme.C.

References PmeXPencil::send_subset_untrans().

Referenced by PmeXPencil::send_untrans().

5830  {
5831  PmeXPencil *xpencil = (PmeXPencil *)param;
5832  xpencil->send_subset_untrans(first, last);
5833 }
void send_subset_untrans(int fromIdx, int toIdx)
Definition: ComputePme.C:5835

◆ PmeXZPencilFFT()

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

Definition at line 5266 of file ComputePme.C.

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

5266  {
5267 #ifdef NAMD_FFTW
5268 #ifdef NAMD_FFTW_3
5269  fftwf_plan *plans = (fftwf_plan *)param;
5270  for(int i=first; i<=last; i++) fftwf_execute(plans[i]);
5271 #endif
5272 #endif
5273 }

◆ PmeYPencilBackwardFFT()

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

Definition at line 6005 of file ComputePme.C.

References PmeYPencil::backward_subset_fft().

Referenced by PmeYPencil::backward_fft().

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

◆ PmeYPencilForwardFFT()

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

Definition at line 5495 of file ComputePme.C.

References PmeYPencil::forward_subset_fft().

Referenced by PmeYPencil::forward_fft().

5495  {
5496  PmeYPencil *ypencil = (PmeYPencil *)param;
5497  ypencil->forward_subset_fft(first, last);
5498 }
void forward_subset_fft(int fromIdx, int toIdx)
Definition: ComputePme.C:5499

◆ PmeYPencilSendTrans()

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

Definition at line 5547 of file ComputePme.C.

References PmeYPencil::send_subset_trans().

Referenced by PmeYPencil::send_trans().

5547  {
5548  PmeYPencil *ypencil = (PmeYPencil *)param;
5549  ypencil->send_subset_trans(first, last);
5550 }
void send_subset_trans(int fromIdx, int toIdx)
Definition: ComputePme.C:5552

◆ PmeYPencilSendUntrans()

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

Definition at line 6064 of file ComputePme.C.

References PmeYPencil::send_subset_untrans().

Referenced by PmeYPencil::send_untrans().

6064  {
6065  PmeYPencil *ypencil = (PmeYPencil *)param;
6066  ypencil->send_subset_untrans(first, last);
6067 }
void send_subset_untrans(int fromIdx, int toIdx)
Definition: ComputePme.C:6069

◆ PmeZPencilSendTrans()

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

Definition at line 5331 of file ComputePme.C.

References PmeZPencil::send_subset_trans().

Referenced by PmeZPencil::send_trans().

5331  {
5332  PmeZPencil *zpencil = (PmeZPencil *)param;
5333  zpencil->send_subset_trans(first, last);
5334 }
void send_subset_trans(int fromIdx, int toIdx)
Definition: ComputePme.C:5336

◆ PmeZPencilSendUngrid()

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

Definition at line 6300 of file ComputePme.C.

References PmeZPencil::send_subset_ungrid().

Referenced by PmeZPencil::send_all_ungrid().

6300  {
6301  //to take advantage of the interface which allows 3 user params at most.
6302  //under such situtation, no new parameter list needs to be created!! -Chao Mei
6303  PmeZPencil *zpencil = (PmeZPencil *)param;
6304  zpencil->send_subset_ungrid(first, last);
6305 }
void send_subset_ungrid(int fromIdx, int toIdx)
Definition: ComputePme.C:6321

Variable Documentation

◆ deviceCUDA

__thread DeviceCUDA* deviceCUDA

◆ pencilPMEProcessors

char* pencilPMEProcessors

Definition at line 135 of file ComputePme.C.

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