NAMD
Functions | Variables
BackEnd.C File Reference
#include "BackEnd.h"
#include "ProcessorPrivate.h"
#include "common.h"
#include "Node.h"
#include "memusage.h"
#include <new>
#include "Lattice.h"
#include "ComputeMoa.h"
#include "ComputeMsmMsa.h"
#include "main.decl.h"
#include "main.h"
#include "BOCgroup.h"
#include "WorkDistrib.decl.h"
#include "ProxyMgr.decl.h"
#include "PatchMgr.decl.h"
#include "DataExchanger.decl.h"
#include "ReductionMgr.decl.h"
#include "CollectionMgr.decl.h"
#include "CollectionMaster.decl.h"
#include "CollectionMgr.h"
#include "CollectionMaster.h"
#include "BroadcastMgr.decl.h"
#include "LdbCoordinator.decl.h"
#include "Sync.decl.h"
#include "PatchData.decl.h"
#include "GlobalGPUMgr.decl.h"
#include "SynchronousCollectives.decl.h"
#include <tcl.h>

Go to the source code of this file.

Functions

void _initCharm (int, char **)
 
 CkpvStaticDeclare (int, exitSchedHndlr)
 
void exit_sched (void *msg)
 
static void register_exit_sched (void)
 
void NAMD_new_handler ()
 
void topo_getargs (char **)
 
void cuda_getargs (char **)
 
void cuda_affinity_initialize ()
 
void mic_getargs (char **)
 
void all_init (int argc, char **argv)
 
void after_backend_init (int argc, char **argv)
 
void master_init (int argc, char **argv)
 
void slave_init (int argc, char **argv)
 

Variables

float cpuTime_start
 
float wallTime_start
 
char * gNAMDBinaryName = NULL
 

Function Documentation

◆ _initCharm()

void _initCharm ( int  ,
char **   
)

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

Referenced by all_init().

◆ after_backend_init()

void after_backend_init ( int  argc,
char **  argv 
)

Definition at line 55 of file mainfunc.C.

References CHDIR, CWDSIZE, endi(), ScriptTcl::eval(), BackEnd::exit(), GETCWD, iINFO(), iout, ScriptTcl::load(), NAMD_die(), NAMD_err(), Node::Object(), PATHSEP, PATHSEPSTR, ScriptTcl::run(), PatchData::script, Node::setScript(), and ScriptTcl::tclmain().

Referenced by main(), and slave_init().

55  {
56 #define CWDSIZE 1024
57  char origcwd_buf[CWDSIZE];
58  char currentdir_buf[CWDSIZE];
59 
60  ScriptTcl *script = new ScriptTcl;
61  Node::Object()->setScript(script);
62  // Node is a group that contains common pointers across many PEs,
63  // since script is not shared among nodes, into the nodegroup it goes
64 
65 #ifdef NODEGROUP_FORCE_REGISTER
66  CProxy_PatchData cpdata(CkpvAccess(BOCclass_group).patchData);
67  PatchData* patchData = cpdata.ckLocalBranch();
68  patchData->script =script;
69 #endif
70 
71  for(argc = 0; argv[argc]; ++argc);
72  if ( argc < 2 ) {
73 #if defined(WIN32) && !defined(__CYGWIN__)
74  CkPrintf("\nFATAL ERROR: No simulation config file specified on command line.\n");
75  CkPrintf("\nNOTE: NAMD has no graphical interface and must be run from a command line.\n");
76  int nsleep = 10;
77  CkPrintf("\nSleeping %d seconds before exiting...\n", nsleep);
78  fflush(stdout);
79  sleep(nsleep);
80  CkPrintf("\n");
81 #endif
82  NAMD_die("No simulation config file specified on command line.");
83  }
84  char *origcwd = GETCWD(origcwd_buf,CWDSIZE);
85  if ( ! origcwd ) NAMD_err("getcwd");
86 #ifdef NAMD_TCL
87  for(int i = 1; i < argc; ++i) {
88  if ( strstr(argv[i],"--") == argv[i] ) {
89  char buf[1024];
90  if ( i + 1 == argc ) {
91  sprintf(buf, "missing argument for command line option %s", argv[i]);
92  NAMD_die(buf);
93  }
94  if ( ! strcmp(argv[i],"--tclmain") ) {
95  // pass all remaining arguments to script
96  iout << iINFO << "Command-line argument is";
97  for ( int j=i; j<argc; ++j ) { iout << " " << argv[j]; }
98  iout << "\n" << endi;
99  script->tclmain(argc-i-1,argv+i+1);
100  BackEnd::exit();
101  return;
102  }
103  sprintf(buf, "%s %s", argv[i]+2, argv[i+1]);
104  iout << iINFO << "Command-line argument is --" << buf << "\n" << endi;
105  script->eval(buf);
106  ++i;
107  continue;
108  }
109  char *confFile = argv[i];
110 #else
111  char *confFile = argv[argc-1];
112 #endif
113  iout << iINFO << "Configuration file is " << confFile << "\n" << endi;
114 
115  char *currentdir=confFile;
116  char *tmp;
117  char tmpcurdir[3];
118  for(tmp=confFile;*tmp;++tmp); // find final null
119  for( ; tmp != confFile && *tmp != PATHSEP; --tmp); // find last '/'
120 #if defined(WIN32) && !defined(__CYGWIN__)
121  if (tmp == confFile) {
122  // in case this is under cygwin, search for '/' as well
123  for(tmp=confFile;*tmp;++tmp); // find final null
124  for( ; tmp != confFile && *tmp != '/'; --tmp); // find last '/'
125  }
126 #endif
127  if ( CHDIR(origcwd) ) NAMD_err(origcwd);
128  if ( tmp != confFile )
129  {
130  *tmp = 0; confFile = tmp + 1;
131  if ( CHDIR(currentdir) ) NAMD_err(currentdir);
132  struct stat statBuf;
133  if (stat(confFile, &statBuf)) {
134  char buf[1024];
135  sprintf(buf,"Unable to access config file %s%c%s",currentdir,PATHSEP,confFile);
136  NAMD_die(buf);
137  }
138  iout << iINFO << "Changed directory to " << currentdir << "\n" << endi;
139  currentdir = GETCWD(currentdir_buf,CWDSIZE);
140  if ( ! currentdir ) NAMD_err("getcwd after chdir");
141  }
142  else{
143  if ( *tmp == PATHSEP ){ // config file in / is odd, but it might happen
145  struct stat statBuf;
146  if (stat(confFile, &statBuf)) {
147  char buf[1024];
148  sprintf(buf,"Unable to access config file %s",confFile);
149  NAMD_die(buf);
150  }
151  }else{ // just a config file name, so the path is the current working path
152  struct stat statBuf;
153  if (stat(confFile, &statBuf)) {
154  char buf[1024];
155  if ( confFile[0] == '-' || confFile[0] == '+' ) {
156  sprintf(buf,"Unknown command-line option %s",confFile);
157  } else {
158  sprintf(buf,"Unable to access config file %s",confFile);
159  }
160  NAMD_die(buf);
161  }
162  tmpcurdir[0] = '.';
163  tmpcurdir[1] = PATHSEP;
164  tmpcurdir[2] = 0;
165  currentdir = tmpcurdir;
166  iout << iINFO << "Working in the current directory " << origcwd << "\n" << endi;
167  }
168  }
169 
170 #ifdef MEM_OPT_VERSION
171  int dirlen = strlen(currentdir);
172  gWorkDir = new char[dirlen+1];
173  gWorkDir[dirlen]=0;
174  memcpy(gWorkDir, currentdir, dirlen);
175 #endif
176 
177  currentdir = NULL;
178 
179 #ifdef NAMD_TCL
180  script->load(confFile);
181 #else
182  script->run(confFile);
183 #endif
184 
185 #ifdef NAMD_TCL
186 }
187  script->run();
188 #endif
189 
190  BackEnd::exit();
191 }
static Node * Object()
Definition: Node.h:86
std::ostream & iINFO(std::ostream &s)
Definition: InfoStream.C:81
void NAMD_err(const char *err_msg)
Definition: common.C:170
void load(char *scriptFile)
Definition: ScriptTcl.C:2420
static void exit(int status=0)
Definition: BackEnd.C:284
std::ostream & endi(std::ostream &s)
Definition: InfoStream.C:54
#define iout
Definition: InfoStream.h:51
#define CHDIR
Definition: mainfunc.C:24
#define PATHSEP
Definition: mainfunc.C:26
void run()
Definition: ScriptTcl.C:2437
void setScript(ScriptTcl *s)
Definition: Node.h:194
#define CWDSIZE
ScriptTcl * script
Definition: PatchData.h:160
void NAMD_die(const char *err_msg)
Definition: common.C:147
void tclmain(int, char **)
Definition: ScriptTcl.C:2403
void eval(char *script)
Definition: ScriptTcl.C:2363
#define PATHSEPSTR
Definition: mainfunc.C:27
#define GETCWD
Definition: mainfunc.C:25

◆ all_init()

void all_init ( int  argc,
char **  argv 
)

Definition at line 102 of file BackEnd.C.

References _initCharm(), cuda_affinity_initialize(), cuda_getargs(), mic_getargs(), NAMD_new_handler(), ProcessorPrivateInit(), register_exit_sched(), and topo_getargs().

Referenced by master_init(), and slave_init().

103 {
104 #if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW_H)
105  _set_new_handler(NAMD_new_handler);
106 #else
107  std::set_new_handler(NAMD_new_handler);
108 #endif
111  CmiGetArgFlag(argv, "+idlepoll"); // remove +idlepoll if it's still there
112  topo_getargs(argv);
113 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
114  cuda_getargs(argv);
115  argc = CmiGetArgc(argv);
116 #endif
117 #ifdef NAMD_MIC
118  CmiGetArgFlag(argv, "+idlepoll"); // remove +idlepoll if it's still there
119  mic_getargs(argv);
120  argc = CmiGetArgc(argv);
121 #endif
122 #ifdef NAMD_AVXTILES
123  avxTilesCommandLineDisable = CmiGetArgFlag(argv, "+notiles");
124 #endif
125 
126 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
127  // launch CUDA runtime threads before affinity is set by _initCharm
128  // _initCharm contains a node barrier so there is no race here
129  if(CmiMyRank()==0){
131  }
132 #endif
133 
134  _initCharm(argc, argv); // message main Chare
135 
136 //#if 0 // moved to WorkDistrib
137 //#ifdef NAMD_CUDA
138 // if ( CkMyPe() < CkNumPes() ) cuda_initialize();
139 //#endif
140 //#ifdef NAMD_MIC
141 // if ( CkMyPe() < CkNumPes() ) mic_initialize();
142 //#endif
143 //#endif
144 }
void NAMD_new_handler()
Definition: BackEnd.C:80
void cuda_getargs(char **)
Definition: DeviceCUDA.C:69
void ProcessorPrivateInit(void)
void mic_getargs(char **)
void topo_getargs(char **)
Definition: WorkDistrib.C:93
void _initCharm(int, char **)
static void register_exit_sched(void)
Definition: BackEnd.C:64
void cuda_affinity_initialize()
Definition: CudaUtils.C:55

◆ CkpvStaticDeclare()

CkpvStaticDeclare ( int  ,
exitSchedHndlr   
)

◆ cuda_affinity_initialize()

void cuda_affinity_initialize ( )

Definition at line 55 of file CudaUtils.C.

Referenced by all_init().

55  {
56  int devcnt = 0;
57  cudaError_t err = cudaGetDeviceCount(&devcnt);
58  if ( devcnt == 1 ) { // only one device so it must be ours
59  int *dummy;
60  if ( err == cudaSuccess ) err = cudaSetDevice(0);
61  if ( err == cudaSuccess ) err = cudaSetDeviceFlags(cudaDeviceMapHost);
62  if ( err == cudaSuccess ) err = cudaMalloc(&dummy, 4);
63  }
64  if ( err != cudaSuccess ) {
65  char host[128];
66  gethostname(host, 128); host[127] = 0;
67  fprintf(stderr,"CUDA initialization error on %s: %s\n", host, cudaGetErrorString(err));
68  }
69 }

◆ cuda_getargs()

void cuda_getargs ( char **  )

Definition at line 69 of file DeviceCUDA.C.

References cuda_args, cuda_args_t::devicelist, cuda_args_t::devicesperreplica, cuda_args_t::globaldevice, cuda_args_t::ignoresharing, cuda_args_t::mergegrids, NAMD_die(), cuda_args_t::nomergegrids, cuda_args_t::nostreaming, cuda_args_t::pmedevice, cuda_args_t::pmePes, and cuda_args_t::usedevicelist.

Referenced by all_init().

69  {
71  cuda_args.usedevicelist = CmiGetArgStringDesc(argv, "+devices", &cuda_args.devicelist,
72  "comma-delimited list of CUDA device numbers such as 0,2,1,2");
74  CmiGetArgInt(argv, "+devicesperreplica", &cuda_args.devicesperreplica);
75  if ( cuda_args.devicesperreplica < 0 ) NAMD_die("Devices per replica must be positive\n");
76  cuda_args.ignoresharing = CmiGetArgFlag(argv, "+ignoresharing");
77  cuda_args.mergegrids = CmiGetArgFlag(argv, "+mergegrids");
78  cuda_args.nomergegrids = CmiGetArgFlag(argv, "+nomergegrids");
79  if ( cuda_args.mergegrids && cuda_args.nomergegrids ) NAMD_die("Do not specify both +mergegrids and +nomergegrids");
80  cuda_args.nostreaming = CmiGetArgFlag(argv, "+nostreaming");
81 #ifdef NODEGROUP_FORCE_REGISTER
82  CmiGetArgInt(argv, "+pmedevice", &cuda_args.pmedevice);
83  CmiGetArgInt(argv, "+pmepes", &cuda_args.pmePes);
85  CmiGetArgInt(argv, "+globaldevice", &cuda_args.globaldevice);
86 #endif
87 }
int devicesperreplica
Definition: DeviceCUDA.C:57
int nomergegrids
Definition: DeviceCUDA.C:60
static __thread cuda_args_t cuda_args
Definition: DeviceCUDA.C:67
int globaldevice
Definition: DeviceCUDA.C:64
int usedevicelist
Definition: DeviceCUDA.C:56
int mergegrids
Definition: DeviceCUDA.C:59
int nostreaming
Definition: DeviceCUDA.C:61
int pmedevice
Definition: DeviceCUDA.C:62
void NAMD_die(const char *err_msg)
Definition: common.C:147
int ignoresharing
Definition: DeviceCUDA.C:58
char * devicelist
Definition: DeviceCUDA.C:55

◆ exit_sched()

void exit_sched ( void *  msg)

Definition at line 58 of file BackEnd.C.

Referenced by register_exit_sched().

59 {
60  // CmiPrintf("Exiting scheduler on %d\n",CmiMyPe());
61  CsdExitScheduler();
62 }

◆ master_init()

void master_init ( int  argc,
char **  argv 
)

Definition at line 170 of file BackEnd.C.

References all_init(), BOCgroup::broadcastMgr, BOCgroup::collectionMgr, BOCgroup::computeCUDAMgr, BOCgroup::computeExtMgr, BOCgroup::computeFmmSerialMgr, BOCgroup::computeGBISserMgr, BOCgroup::computeLjPmeSerialMgr, BOCgroup::computeMgr, BOCgroup::computeMsmMgr, BOCgroup::computeMsmMsaMgr, BOCgroup::computeMsmSerialMgr, BOCgroup::computePmeCUDAMgr, BOCgroup::computeQMMgr, cpuTime_start, BOCgroup::dataExchanger, BOCgroup::globalGPUMgr, GroupInitMsg::group, BOCgroup::ioMgr, BOCgroup::ldbCoordinator, SlaveInitMsg::master, BOCgroup::multicastMgr, BOCgroup::nodePmeMgr, BOCgroup::patchData, BOCgroup::patchMgr, BOCgroup::proxyMgr, BOCgroup::reductionMgr, BOCgroup::sync, BOCgroup::synchronousCollectives, wallTime_start, and BOCgroup::workDistrib.

Referenced by BackEnd::init(), and slave_init().

170  {
171  cpuTime_start = CmiCpuTimer();
172  wallTime_start = CmiWallTimer();
173  if ( CmiMyPe() ) {
174  all_init(argc, argv);
175  CsdScheduler(-1);
176  ConverseExit(); // should never return
177  }
178 
179  all_init(argc, argv);
180 
181  // Create branch-office chares
182  BOCgroup group;
183  group.workDistrib = CProxy_WorkDistrib::ckNew();
184  group.proxyMgr = CProxy_ProxyMgr::ckNew();
185  group.patchMgr = CProxy_PatchMgr::ckNew();
186  group.computeMgr = CProxy_ComputeMgr::ckNew();
187  group.reductionMgr = CProxy_ReductionMgr::ckNew();
188  // group.computePmeMgr set in constructor during startup
189  group.nodePmeMgr = CProxy_NodePmeMgr::ckNew();
190 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
191  group.patchData = CProxy_PatchData::ckNew();
192  group.computePmeCUDAMgr = CProxy_ComputePmeCUDAMgr::ckNew();
193  group.computeCUDAMgr = CProxy_ComputeCUDAMgr::ckNew();
194 #endif
195 #ifdef OPENATOM_VERSION
196  group.computeMoaMgr = CProxy_ComputeMoaMgr::ckNew();
197 #endif // OPENATOM_VERSION
198  group.computeExtMgr = CProxy_ComputeExtMgr::ckNew();
199  group.computeQMMgr = CProxy_ComputeQMMgr::ckNew();
200  group.computeGBISserMgr = CProxy_ComputeGBISserMgr::ckNew();
201  group.computeFmmSerialMgr = CProxy_ComputeFmmSerialMgr::ckNew();
202  group.computeMsmSerialMgr = CProxy_ComputeMsmSerialMgr::ckNew();
203  group.computeLjPmeSerialMgr = CProxy_ComputeLjPmeSerialMgr::ckNew();
204 #ifdef CHARM_HAS_MSA
205  group.computeMsmMsaMgr = CProxy_ComputeMsmMsaMgr::ckNew();
206 #endif
207  group.computeMsmMgr = CProxy_ComputeMsmMgr::ckNew();
208  // Charm CkMulticast library module
209  group.multicastMgr = CProxy_CkMulticastMgr::ckNew();
210 #ifdef MEM_OPT_VERSION
211  group.ioMgr=CProxy_ParallelIOMgr::ckNew();
212 #endif
213 
214  group.sync = CProxy_Sync::ckNew();
215 
216  #ifdef USE_NODEPATCHMGR
217  group.nodeProxyMgr = CProxy_NodeProxyMgr::ckNew();
218  #endif
219 
220 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
221  group.globalGPUMgr = CProxy_GlobalGPUMgr::ckNew();
222  group.synchronousCollectives = CProxy_SynchronousCollectives::ckNew();
223 #endif
224 
225 #if CMK_SMP && USE_CKLOOP
226  group.ckLoop = CkLoop_Init();
227 #endif
228 
229  CkChareID collectionMaster = CProxy_CollectionMaster::ckNew(0);
230  SlaveInitMsg *initmsg7 = new SlaveInitMsg;
231  initmsg7->master = collectionMaster;
232  group.collectionMgr = CProxy_CollectionMgr::ckNew(initmsg7);
233 
234  group.broadcastMgr = CProxy_BroadcastMgr::ckNew();
235  group.ldbCoordinator = CProxy_LdbCoordinator::ckNew();
236 
237  group.dataExchanger = CProxy_DataExchanger::ckNew();
238 
239  GroupInitMsg *msg = new GroupInitMsg;
240  msg->group = group;
241  CkGroupID node = CProxy_Node::ckNew(msg);
242 
243  CkStartQD(CkCallback(CkIndex_Node::exitScheduler(), CkMyPe(), node));
244  CsdScheduler(-1);
245 }
CkGroupID broadcastMgr
Definition: BOCgroup.h:45
CkChareID master
Definition: CollectionMgr.h:23
BOCgroup group
Definition: Node.h:68
CkGroupID patchMgr
Definition: BOCgroup.h:20
void all_init(int argc, char **argv)
Definition: BackEnd.C:102
CkGroupID computeLjPmeSerialMgr
Definition: BOCgroup.h:39
CkGroupID computeMsmMsaMgr
Definition: BOCgroup.h:40
CkGroupID patchData
Definition: BOCgroup.h:28
CkGroupID workDistrib
Definition: BOCgroup.h:19
float cpuTime_start
Definition: BackEnd.C:53
CkGroupID computeMgr
Definition: BOCgroup.h:22
CkGroupID computeCUDAMgr
Definition: BOCgroup.h:27
CkGroupID computePmeCUDAMgr
Definition: BOCgroup.h:26
CkGroupID computeMsmSerialMgr
Definition: BOCgroup.h:38
float wallTime_start
Definition: BackEnd.C:54
CkGroupID dataExchanger
Definition: BOCgroup.h:58
CkGroupID collectionMgr
Definition: BOCgroup.h:44
CkGroupID computeMsmMgr
Definition: BOCgroup.h:41
CkGroupID computeExtMgr
Definition: BOCgroup.h:34
CkGroupID multicastMgr
Definition: BOCgroup.h:42
CkGroupID proxyMgr
Definition: BOCgroup.h:21
CkGroupID ldbCoordinator
Definition: BOCgroup.h:46
CkGroupID synchronousCollectives
Definition: BOCgroup.h:60
CkGroupID nodePmeMgr
Definition: BOCgroup.h:24
CkGroupID computeGBISserMgr
Definition: BOCgroup.h:36
CkGroupID ioMgr
Definition: BOCgroup.h:49
CkGroupID globalGPUMgr
Definition: BOCgroup.h:59
CkGroupID sync
Definition: BOCgroup.h:47
CkGroupID computeFmmSerialMgr
Definition: BOCgroup.h:37
CkGroupID computeQMMgr
Definition: BOCgroup.h:35
CkGroupID reductionMgr
Definition: BOCgroup.h:43

◆ mic_getargs()

void mic_getargs ( char **  )

Referenced by all_init().

◆ NAMD_new_handler()

void NAMD_new_handler ( )

Definition at line 80 of file BackEnd.C.

References NAMD_die().

Referenced by all_init().

80  {
81 #endif
82  char tmp[100];
83  sprintf(tmp,"Memory allocation failed on processor %d.",CmiMyPe());
84  NAMD_die(tmp);
85 #if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW_H)
86  return 0;
87 #endif
88 }
void NAMD_die(const char *err_msg)
Definition: common.C:147

◆ register_exit_sched()

static void register_exit_sched ( void  )
static

Definition at line 64 of file BackEnd.C.

References exit_sched().

Referenced by all_init().

65 {
66  CkpvInitialize(int,exitSchedHndlr);
67  CkpvAccess(exitSchedHndlr) = CmiRegisterHandler((CmiHandler)exit_sched);
68 }
void exit_sched(void *msg)
Definition: BackEnd.C:58

◆ slave_init()

void slave_init ( int  argc,
char **  argv 
)

Definition at line 150 of file BackEnd.C.

References after_backend_init(), all_init(), and master_init().

Referenced by BackEnd::init().

151 {
152 #if CMK_SMP
153  //the original main thread could now be a comm thread
154  //and a slave thread could now be the main thread,
155  //so we have to do the master initialization here
156  if(CmiMyRank()==0){
157  master_init(argc, argv);
158  if(CmiMyPe()==0)
159  after_backend_init(argc, argv);
160  return;
161  }
162 #endif
163 
164  all_init(argc, argv);
165 
166  if (CkMyRank() < CkMyNodeSize()) // skip the communication thread
167  CsdScheduler(-1);
168 }
void after_backend_init(int argc, char **argv)
Definition: mainfunc.C:55
void all_init(int argc, char **argv)
Definition: BackEnd.C:102
void master_init(int argc, char **argv)
Definition: BackEnd.C:170

◆ topo_getargs()

void topo_getargs ( char **  )

Definition at line 93 of file WorkDistrib.C.

References build_ordering(), and randtopo.

Referenced by all_init().

93  {
94  randtopo = CmiGetArgFlag(argv, "+randtopo");
95  if ( CkMyPe() >= CkNumPes() ) return;
96 #if CCD_COND_FN_EXISTS
97  CcdCallOnCondition(CcdTOPOLOGY_AVAIL, (CcdCondFn)build_ordering, (void*)0);
98 #else
99  CcdCallOnCondition(CcdTOPOLOGY_AVAIL, (CcdVoidFn)build_ordering, (void*)0);
100 #endif
101 }
static int randtopo
Definition: WorkDistrib.C:87
static void build_ordering(void *)
Definition: WorkDistrib.C:89

Variable Documentation

◆ cpuTime_start

float cpuTime_start

Definition at line 53 of file BackEnd.C.

Referenced by BackEnd::exit(), and master_init().

◆ gNAMDBinaryName

char* gNAMDBinaryName = NULL

Definition at line 247 of file BackEnd.C.

Referenced by BackEnd::init(), and Node::outputPatchComputeMaps().

◆ wallTime_start

float wallTime_start

Definition at line 54 of file BackEnd.C.

Referenced by BackEnd::exit(), and master_init().