tdo not generate separate binary for porous flow, add exclusive mode flag - sph… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 7310210eeea7eaea39afad0b6642866a417ef323 | |
parent 7e9994c85ea1f10fc5040bb9d7d628bc5b4cc133 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Mon, 28 Jul 2014 09:58:07 +0200 | |
do not generate separate binary for porous flow, add exclusive mode flag | |
Diffstat: | |
M python/sphere.py | 4 ++-- | |
M src/CMakeLists.txt | 2 -- | |
M src/device.cu | 11 ++++++----- | |
M src/main.cpp | 13 +++++++++++-- | |
D src/porousflow.cpp | 83 -----------------------------… | |
M src/sphere.cpp | 15 ++++++++------- | |
M src/sphere.h | 4 +++- | |
7 files changed, 30 insertions(+), 102 deletions(-) | |
--- | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -3103,10 +3103,10 @@ class sim: | |
if (cudamemcheck == True): | |
cudamemchk = "cuda-memcheck --leak-check full " | |
if (self.fluid == True): | |
- binary = "porousflow" | |
+ fluidarg = "--fluid " | |
cmd = "cd ..; " + valgrindbin + cudamemchk + "./" + binary + " " \ | |
- + quiet + dryarg + "input/" + self.sid + ".bin " + stdout | |
+ + quiet + dryarg + fluidarg + "input/" + self.sid + ".bin " + … | |
#print(cmd) | |
status = subprocess.call(cmd, shell=True) | |
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt | |
t@@ -30,8 +30,6 @@ CUDA_ADD_EXECUTABLE(../porosity | |
CUDA_ADD_EXECUTABLE(../forcechains | |
forcechains.cpp file_io.cpp sphere.cpp device.cu utility.cu utility.cpp | |
navierstokes.cpp) | |
-CUDA_ADD_EXECUTABLE(../porousflow | |
- porousflow.cpp navierstokes.cpp file_io.cpp sphere.cpp device.cu utility.c… | |
#ADD_EXECUTABLE(unittests boost-unit-tests.cpp sphere.cpp) | |
#TARGET_LINK_LIBRARIES(unittests | |
diff --git a/src/device.cu b/src/device.cu | |
t@@ -109,12 +109,13 @@ __host__ void DEM::initializeGPU(void) | |
} | |
device = cudadevice; // store in DEM class | |
- cout << " Using CUDA device ID " << cudadevice << " with " | |
- << max_ncudacores << " cores." << std::endl; | |
- // Comment following line when using a system only containing | |
- // exclusive mode GPUs | |
- cudaChooseDevice(&cudadevice, &prop); | |
+ // Only call cudaChooseDevice if the exlusive mode flag isn't set | |
+ if (exclusive_mode != 1) { | |
+ cout << " Using CUDA device ID " << cudadevice << " with " | |
+ << max_ncudacores << " cores." << std::endl; | |
+ cudaChooseDevice(&cudadevice, &prop); | |
+ } | |
checkForCudaErrors("While initializing CUDA device"); | |
} | |
diff --git a/src/main.cpp b/src/main.cpp | |
t@@ -36,6 +36,8 @@ int main(const int argc, const char *argv[]) | |
int nfiles = 0; // number of input files | |
float max_val = 0.0f; // max value of colorbar | |
float lower_cutoff = 0.0f;// lower cutoff, particles below won't be render… | |
+ int fluid = 0; | |
+ int exclusive_mode = 0; // system GPUs are running on exclusive mode | |
// Process input parameters | |
int i; | |
t@@ -54,6 +56,7 @@ int main(const int argc, const char *argv[]) | |
"-e, --exclusive\t\tset this flag for systems containing\n" | |
" \t\tonly exclusive-mode GPUs\n" | |
"-n, --dry\t\tshow key experiment parameters and quit\n" | |
+ "-f, --fluid\t\tsimulate fluid between particles\n" | |
"-r, --render\t\trender input files to images instead of\n" | |
" \t\tsimulating the temporal evolution\n" | |
"-dc, --dont-check\tdon't check values before running\n" | |
t@@ -101,6 +104,12 @@ int main(const int argc, const char *argv[]) | |
else if (argvi == "-dc" || argvi == "--dont-check") | |
checkVals = 0; | |
+ else if (argvi == "-f" || argvi == "--fluid") | |
+ fluid = 1; | |
+ | |
+ else if (argvi == "-e" || argvi == "--exclusive") | |
+ exlusive_mode = 1; | |
+ | |
else if (argvi == "-m" || argvi == "--method") { | |
render = 1; | |
t@@ -153,7 +162,7 @@ int main(const int argc, const char *argv[]) | |
// Create DEM class, read data from input binary, check values, | |
// init cuda, transfer const mem | |
- DEM dem(argvi, verbose, checkVals, dry, 1, 1); | |
+ DEM dem(argvi, verbose, checkVals, dry, 1, 1, fluid, exclusive… | |
// Render image if requested | |
if (render == 1) | |
dem.render(method, max_val, lower_cutoff); | |
t@@ -165,7 +174,7 @@ int main(const int argc, const char *argv[]) | |
} else { | |
// Do not transfer to const. mem after the first file | |
- DEM dem(argvi, verbose, checkVals, dry, 1, 0); | |
+ DEM dem(argvi, verbose, checkVals, dry, 1, 0, fluid, exclusive… | |
// Render image if requested | |
if (render == 1) | |
diff --git a/src/porousflow.cpp b/src/porousflow.cpp | |
t@@ -1,83 +0,0 @@ | |
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ | |
-/* SPHERE source code by Anders Damsgaard Christensen, 2010-12, */ | |
-/* a 3D Discrete Element Method algorithm with CUDA GPU acceleration. */ | |
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ | |
- | |
-// Licence: GNU Public License (GPL) v. 3. See license.txt. | |
-// See doc/sphere-doc.pdf for full documentation. | |
-// Compile with GNU make by typing 'make' in the src/ directory. | |
-// SPHERE is called from the command line with './sphere_<architecture> projec… | |
- | |
- | |
-// Including library files | |
-#include <iostream> | |
-#include <string> | |
-#include <cstdlib> | |
- | |
-// Including user files | |
-#include "constants.h" | |
-#include "datatypes.h" | |
-#include "sphere.h" | |
- | |
-////////////////// | |
-// MAIN ROUTINE // | |
-////////////////// | |
-// The main loop returns the value 0 to the shell, if the program terminated | |
-// successfully, and 1 if an error occured which caused the program to crash. | |
-int main(const int argc, const char *argv[]) | |
-{ | |
- // Default values | |
- int verbose = 1; | |
- int dry = 0; | |
- int nfiles = 0; | |
- int darcy = 1; | |
- | |
- // Process input parameters | |
- int i; | |
- for (i=1; i<argc; ++i) { // skip argv[0] | |
- | |
- std::string argvi = std::string(argv[i]); | |
- | |
- // Display help if requested | |
- if (argvi == "-h" || argvi == "--help") { | |
- std::cout << argv[0] << ": particle dynamics simulator\n" | |
- << "Usage: " << argv[0] << " [OPTION[S]]... [FILE1 ...]\nOptio… | |
- << "-h, --help\t\tprint help\n" | |
- << "-n, --dry\t\tshow key experiment parameters and quit\n" | |
- << std::endl; | |
- return 0; // Exit with success | |
- } | |
- | |
- else if (argvi == "-n" || argvi == "--dry") | |
- dry = 1; | |
- | |
- else if (argvi == "-q" || argvi == "--quiet") | |
- verbose = 0; | |
- | |
- // The rest of the values must be input binary files | |
- else { | |
- nfiles++; | |
- | |
- if (verbose == 1) | |
- std::cout << argv[0] << ": processing input file: " << argvi << | |
- std::endl; | |
- | |
- // Create DEM class, read data from input binary, | |
- // check values, init cuda, transfer const mem, solve Darcy flow | |
- DEM dem(argvi, verbose, 1, dry, 1, 1, darcy); | |
- if (dry == 0) | |
- dem.startTime(); | |
- } | |
- } | |
- | |
- // Check whether there are input files specified | |
- if (!argv[0] || argc == 1 || nfiles == 0) { | |
- std::cerr << argv[0] << ": missing input binary file\n" | |
- << "See `" << argv[0] << " --help` for more information" | |
- << std::endl; | |
- return 1; // Return unsuccessful exit status | |
- } | |
- | |
- return 0; // Return successfull exit status | |
-} | |
-// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 | |
diff --git a/src/sphere.cpp b/src/sphere.cpp | |
t@@ -14,13 +14,14 @@ | |
// Constructor: Reads an input binary, and optionally checks | |
// and reports the values | |
DEM::DEM(const std::string inputbin, | |
- const int verbosity, | |
- const int checkVals, | |
- const int dry, | |
- const int initCuda, | |
- const int transferConstMem, | |
- const int porousflow) | |
-: verbose(verbosity), navierstokes(porousflow) | |
+ const int verbosity, | |
+ const int checkVals, | |
+ const int dry, | |
+ const int initCuda, | |
+ const int transferConstMem, | |
+ const int fluidFlow, | |
+ const int exlusive) | |
+: verbose(verbosity), navierstokes(fluidFlow), exlusive_mode(exlusive) | |
{ | |
using std::cout; | |
using std::cerr; | |
diff --git a/src/sphere.h b/src/sphere.h | |
t@@ -57,6 +57,7 @@ class DEM { | |
int ndevices; // number of CUDA GPUs | |
int device; // primary GPU | |
int* domain_size; // elements per GPU | |
+ int exlusive_mode; // devices are running in exclusive mode (1) | |
// DEVICE ARRAYS | |
t@@ -296,7 +297,8 @@ class DEM { | |
const int dry = 0, | |
const int initCuda = 1, | |
const int transferConstMem = 1, | |
- const int darcyflow = 0); | |
+ const int fluidFlow = 0, | |
+ const int exclusive = 0); | |
// Destructor | |
~DEM(void); |