git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@6263 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2011-05-31 22:36:53 +00:00
parent 7af10d8e0f
commit 5bf395f4d7
9 changed files with 107 additions and 76 deletions

View File

@ -50,32 +50,16 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
screen = NULL;
logfile = NULL;
// create CUDA class if USER-CUDA installed, else dummy
cuda = new Cuda(this);
if (!cuda->cuda_exists) {
delete cuda;
cuda = NULL;
}
// parse input switches
int inflag = 0;
int screenflag = 0;
int logflag = 0;
if (cuda) {
int n = strlen("cuda") + 1;
asuffix = new char[n];
strcpy(asuffix,"cuda");
accelerator = 1;
} else {
asuffix = NULL;
accelerator = 0;
}
int cudaflag = -1;
suffix = NULL;
suffix_enable = 0;
int iarg = 1;
while (iarg < narg) {
if (strcmp(arg[iarg],"-partition") == 0 ||
strcmp(arg[iarg],"-p") == 0) {
@ -92,7 +76,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
inflag = iarg + 1;
iarg += 2;
} else if (strcmp(arg[iarg],"-screen") == 0 ||
strcmp(arg[iarg],"-s") == 0) {
strcmp(arg[iarg],"-sc") == 0) {
if (iarg+2 > narg) error->universe_all("Invalid command-line argument");
screenflag = iarg + 1;
iarg += 2;
@ -110,23 +94,25 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
strcmp(arg[iarg],"-e") == 0) {
if (iarg+2 > narg) error->universe_all("Invalid command-line argument");
iarg += 2;
} else if (strcmp(arg[iarg],"-accel") == 0 ||
strcmp(arg[iarg],"-a") == 0) {
} else if (strcmp(arg[iarg],"-cuda") == 0 ||
strcmp(arg[iarg],"-c") == 0) {
if (iarg+2 > narg) error->universe_all("Invalid command-line argument");
if (strcmp(arg[iarg+1],"none") == 0) {
delete [] asuffix;
asuffix = NULL;
accelerator = 0;
} else if (strcmp(arg[iarg+1],"opt") == 0 ||
strcmp(arg[iarg+1],"gpu") == 0 ||
strcmp(arg[iarg+1],"cuda") == 0) {
if (strcmp(arg[iarg+1],"on") == 0) cudaflag = 1;
else if (strcmp(arg[iarg+1],"off") == 0) cudaflag = 0;
else error->universe_all("Invalid command-line argument");
iarg += 2;
} else if (strcmp(arg[iarg],"-suffix") == 0 ||
strcmp(arg[iarg],"-sf") == 0) {
if (iarg+2 > narg) error->universe_all("Invalid command-line argument");
if (strcmp(arg[iarg+1],"opt") == 0 ||
strcmp(arg[iarg+1],"gpu") == 0 ||
strcmp(arg[iarg+1],"cuda") == 0) {
delete [] suffix;
int n = strlen(arg[iarg+1]) + 1;
asuffix = new char[n];
strcpy(asuffix,arg[iarg+1]);
accelerator = 1;
suffix = new char[n];
strcpy(suffix,arg[iarg+1]);
suffix_enable = 1;
}
if (strcmp(asuffix,"cuda") == 0 && !cuda)
error->all("Cannot use -a cuda without USER-CUDA package installed");
iarg += 2;
} else error->universe_all("Invalid command-line argument");
}
@ -297,6 +283,31 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
if (mpisize != sizeof(bigint))
error->all("MPI_LMP_BIGINT and bigint in lmptype.h are not compatible");
// create CUDA class if USER-CUDA installed, unless explicitly switched off
// instantiation creates dummy CUDA class if USER-CUDA is not installed
if (cudaflag == 0) {
cuda = NULL;
if (suffix && strcmp(suffix,"cuda") == 0)
error->all("Cannot use -suffix cuda without USER-CUDA installed");
} else if (cudaflag == 1) {
cuda = new Cuda(this);
if (!cuda->cuda_exists)
error->all("Cannot use -cuda on without USER-CUDA installed");
} else {
cuda = new Cuda(this);
if (!cuda->cuda_exists) {
delete cuda;
cuda = NULL;
}
}
int me;
MPI_Comm_rank(world,&me);
if (cuda && me == 0) error->message("USER-CUDA mode is enabled");
if (cuda && suffix && strcmp(suffix,"cuda") != 0 && me == 0)
error->warning("Non-cuda suffix used with USER-CUDA mode enabled");
// allocate input class now that MPI is fully setup
input = new Input(this,narg,arg);
@ -328,8 +339,8 @@ LAMMPS::~LAMMPS()
if (world != universe->uworld) MPI_Comm_free(&world);
delete [] asuffix;
delete cuda;
delete [] suffix;
delete input;
delete universe;
@ -340,7 +351,7 @@ LAMMPS::~LAMMPS()
/* ----------------------------------------------------------------------
allocate single instance of top-level classes
fundamental classes are allocated in constructor
some classes have accelerator variants
some classes have package variants
------------------------------------------------------------------------- */
void LAMMPS::create()