MPI failed with 12 cores
OpenLB – Open Source Lattice Boltzmann Code › Forums › on OpenLB › Bug Reports › MPI failed with 12 cores
- This topic has 4 replies, 3 voices, and was last updated 5 years, 3 months ago by Eric.
-
AuthorPosts
-
August 9, 2019 at 5:14 pm #4495EricParticipant
Hi there,
I met the same problem as Laurent in this thread:
https://www.openlb.net/forum/topic/pb-runmpi/I am running the example code “example/laminar/cylinder2d” with MPI on Ubuntu 16.04. The machine has 16 processors in total.
Everything works fine if I type:
mpiexec -n 8 ./cylinder
But if I specify 12 threads the program terminates at the setup step. The output file is : https://textuploader.com/11heqSame problem was found when running in a cluster with 10G memory.
Could you please help me handle this problem?Best regards,
EricAugust 10, 2019 at 10:28 am #4499mathiasKeymasterWe have fixed that minor bug and we will release the fix in the next release. Meanwhile, please run the code only with as much cores as you have physically available in your system!
August 10, 2019 at 11:49 am #4501EricParticipantHi Mathias,
When will the next release be available? If easier, could you please briefly explain how to fix the bug? I’m running some cases on the cluster but facing the same problem. With OpenMP (shared-memory) it is okay but MPI (distributed-memory) failed.
Best regards,
EricAugust 29, 2019 at 10:56 am #4530AdrianKeymasterThis is the patch that will be included in the next release:
diff –git a/src/functors/lattice/indicator/blockIndicatorF2D.hh b/src/functors/lattice/indicator/blockIndicatorF2D.hh
index 8d01a6b03c8cea37d1d9ec05033d1bda4a616efa..f52a48a3ec4b2b966e6341e186d253fe73bc453c 100644
— a/src/functors/lattice/indicator/blockIndicatorF2D.hh
+++ b/src/functors/lattice/indicator/blockIndicatorF2D.hh
@@ -124,7 +124,7 @@ bool BlockIndicatorMaterial2D<T>::operator() (bool output[], const int input[])
// of BlockGeometry2D<T>::get to avoid resetting geometry
// statistics:
const BlockGeometryStructure2D<T>& blockGeometry = this->_blockGeometryStructure;
– const int current = blockGeometry.get(input[0], input[1]);
+ const int current = blockGeometry.getMaterial(input[0], input[1]);
output[0] = std::any_of(_materials.cbegin(),
_materials.cend(),
[current](int material) { return current == material; });
diff –git a/src/functors/lattice/indicator/blockIndicatorF3D.hh b/src/functors/lattice/indicator/blockIndicatorF3D.hh
index dcf2f5fc0e7658c487d671a02322eea51669378f..60c00322c4f79dacf7cf88ab0687ee746f65bfb8 100644
— a/src/functors/lattice/indicator/blockIndicatorF3D.hh
+++ b/src/functors/lattice/indicator/blockIndicatorF3D.hh
@@ -136,7 +136,7 @@ bool BlockIndicatorMaterial3D<T>::operator() (bool output[], const int input[])
// of BlockGeometry3D<T>::get to avoid resetting geometry
// statistics:
const BlockGeometryStructure3D<T>& blockGeometry = this->_blockGeometryStructure;
– const int current = blockGeometry.get(input[0], input[1], input[2]);
+ const int current = blockGeometry.getMaterial(input[0], input[1], input[2]);
output[0] = std::any_of(_materials.cbegin(),
_materials.cend(),
[current](int material) { return current == material; });i.e. change
BlockGeometry(2,3)D::get
calls toBlockGeometry(2,3)D::getMaterial
for the block indicators.August 29, 2019 at 2:37 pm #4531EricParticipantHi Adrian,
Thank you for your reply! The program works totally fine now.
Best regards,
Eric -
AuthorPosts
- You must be logged in to reply to this topic.