From 07c0214b5ecab307742e0f9bb9181d49b257db5f Mon Sep 17 00:00:00 2001 From: Tomas Oberhuber <tomas.oberhuber@fjfi.cvut.cz> Date: Sun, 2 Oct 2016 10:26:35 +0200 Subject: [PATCH] Fixed mesh entity creation in CUDA grid traverser. --- CMakeLists.txt | 2 +- src/TNL/Functions/MeshFunction_impl.h | 5 ++++ .../Meshes/GridDetails/GridTraverser_impl.h | 26 +++++++++++-------- src/TNL/Problems/HeatEquationProblem_impl.h | 11 ++++++-- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2fd15a4f5..0cb47189db 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,7 @@ if( WITH_CUDA STREQUAL "yes" ) # disable false compiler warnings # reference for the -Xcudafe flag: http://stackoverflow.com/questions/14831051/how-to-disable-compiler-warnings-with-nvcc/17095910#17095910 # list of possible tokens: http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; --expt-relaxed-constexpr -Xcudafe "\"--diag_suppress=code_is_unreachable --diag_suppress=implicit_return_from_non_void_function\"") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -Wno-deprecated-gpu-targets --expt-relaxed-constexpr -Xcudafe "\"--diag_suppress=code_is_unreachable --diag_suppress=implicit_return_from_non_void_function\"") #AddCompilerFlag( "-DHAVE_NOT_CXX11" ) # -U_GLIBCXX_ATOMIC_BUILTINS -U_GLIBCXX_USE_INT128 " ) set( ALL_CUDA_ARCHS -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 diff --git a/src/TNL/Functions/MeshFunction_impl.h b/src/TNL/Functions/MeshFunction_impl.h index 973f79ac55..97c2408478 100644 --- a/src/TNL/Functions/MeshFunction_impl.h +++ b/src/TNL/Functions/MeshFunction_impl.h @@ -134,6 +134,11 @@ setup( const MeshPointer& meshPointer, if( ! this->load( fileName ) ) return false; } + else + { + std::cerr << "Missing parameter " << prefix << "file." << std::endl; + return false; + } return true; } diff --git a/src/TNL/Meshes/GridDetails/GridTraverser_impl.h b/src/TNL/Meshes/GridDetails/GridTraverser_impl.h index 1f5bcb0608..663308e0c6 100644 --- a/src/TNL/Meshes/GridDetails/GridTraverser_impl.h +++ b/src/TNL/Meshes/GridDetails/GridTraverser_impl.h @@ -121,12 +121,12 @@ GridTraverser1D( typename GridType::CoordinatesType coordinates; coordinates.x() = kernelData->begin.x() + ( gridIdx * Devices::Cuda::getMaxGridSize() + blockIdx.x ) * blockDim.x + threadIdx.x; - - GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); - - entity.refresh(); if( coordinates.x() <= kernelData->end.x() ) + { + GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); + entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), *userData, entity ); + } } template< typename Real, @@ -148,6 +148,7 @@ GridBoundaryTraverser1D( if( threadIdx.x == 0 ) { coordinates.x() = kernelData->begin.x(); + printf( "thread %d coord %d \n", threadIdx.x, coordinates.x() ); GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), *userData, entity ); @@ -155,6 +156,7 @@ GridBoundaryTraverser1D( if( threadIdx.x == 1 ) { coordinates.x() = kernelData->end.x(); + printf( "thread %d coord %d \n", threadIdx.x, coordinates.x() ); GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); entity.refresh(); EntitiesProcessor::processEntity( entity.getMesh(), *userData, entity ); @@ -325,11 +327,12 @@ GridTraverser2D( coordinates.x() = kernelData->begin.x() + ( gridXIdx * Devices::Cuda::getMaxGridSize() + blockIdx.x ) * blockDim.x + threadIdx.x; coordinates.y() = kernelData->begin.y() + ( gridYIdx * Devices::Cuda::getMaxGridSize() + blockIdx.y ) * blockDim.y + threadIdx.y; - GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); + - if( entity.getCoordinates().x() <= kernelData->end.x() && - entity.getCoordinates().y() <= kernelData->end.y() ) + if( coordinates.x() <= kernelData->end.x() && + coordinates.y() <= kernelData->end.y() ) { + GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); entity.refresh(); if( ! processOnlyBoundaryEntities || entity.isBoundaryEntity() ) { @@ -526,12 +529,13 @@ GridTraverser3D( coordinates.y() = kernelData->begin.y() + ( gridYIdx * Devices::Cuda::getMaxGridSize() + blockIdx.y ) * blockDim.y + threadIdx.y; coordinates.z() = kernelData->begin.z() + ( gridZIdx * Devices::Cuda::getMaxGridSize() + blockIdx.z ) * blockDim.z + threadIdx.z; - GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); + - if( entity.getCoordinates().x() <= kernelData->end.x() && - entity.getCoordinates().y() <= kernelData->end.y() && - entity.getCoordinates().z() <= kernelData->end.z() ) + if( coordinates.x() <= kernelData->end.x() && + coordinates.y() <= kernelData->end.y() && + coordinates.z() <= kernelData->end.z() ) { + GridEntity entity( *grid, coordinates, kernelData->entityOrientation, kernelData->entityBasis ); entity.refresh(); if( ! processOnlyBoundaryEntities || entity.isBoundaryEntity() ) { diff --git a/src/TNL/Problems/HeatEquationProblem_impl.h b/src/TNL/Problems/HeatEquationProblem_impl.h index c9e965fbc5..d7ab9b4a57 100644 --- a/src/TNL/Problems/HeatEquationProblem_impl.h +++ b/src/TNL/Problems/HeatEquationProblem_impl.h @@ -85,9 +85,16 @@ setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix ) { - if( ! this->boundaryConditionPointer->setup( meshPointer, parameters, "boundary-conditions-" ) || - ! this->rightHandSidePointer->setup( parameters, "right-hand-side-" ) ) + if( ! this->boundaryConditionPointer->setup( meshPointer, parameters, "boundary-conditions-" ) ) + { + std::cerr << "I was not able to initialize the boundary conditions." << std::endl; return false; + } + if( ! this->rightHandSidePointer->setup( parameters, "right-hand-side-" ) ) + { + std::cerr << "I was not able to initialize the right-hand side function." << std::endl; + return false; + } return true; } -- GitLab