I have encountered a problem when using SuperLU_dist (7.2.0 and 8.2.1) in combiniation with Trilinos.
Trilinos currently does not support SuperLU_dist 9.0.0 or master, that's why I can't test these versions.
All my problems only occur when using the classic intel compiler suite, that I have to use for this project:
And the problems are related to the compilation flags of SuperLU_dist. I have tried many ways of how I compile my software stack, but the situation is now, that I can compile metis, parmetis and trilinos in release mode with -O3, but as soon as I compile SuperLU_dist with -O2 or -O3 (default), my problems start.
But let me start from scratch.
I can compile SuperLU dist with default settings in Release mode (-O3) just fine. And I cann run all the tests in the TEST folder:
$ ./pdtest.sh
**-- nrhs = 1, process grid = 1 X 1, fill 2, relax 4, max-super 10
**-- nrhs = 1, process grid = 1 X 1, fill 2, relax 4, max-super 20
**-- nrhs = 1, process grid = 1 X 1, fill 2, relax 8, max-super 10
**-- nrhs = 1, process grid = 1 X 1, fill 2, relax 8, max-super 20
**-- nrhs = 1, process grid = 1 X 1, fill 6, relax 4, max-super 10
**-- nrhs = 1, process grid = 1 X 1, fill 6, relax 4, max-super 20
**-- nrhs = 1, process grid = 1 X 1, fill 6, relax 8, max-super 10
**-- nrhs = 1, process grid = 1 X 1, fill 6, relax 8, max-super 20
**-- nrhs = 1, process grid = 1 X 3, fill 2, relax 4, max-super 10
**-- nrhs = 1, process grid = 1 X 3, fill 2, relax 4, max-super 20
**-- nrhs = 1, process grid = 1 X 3, fill 2, relax 4, max-super 10
**-- nrhs = 1, process grid = 1 X 3, fill 2, relax 4, max-super 20
**-- nrhs = 1, process grid = 1 X 3, fill 2, relax 8, max-super 10
**-- nrhs = 1, process grid = 1 X 3, fill 2, relax 8, max-super 20
**-- nrhs = 1, process grid = 1 X 3, fill 6, relax 4, max-super 10
**-- nrhs = 1, process grid = 1 X 3, fill 6, relax 4, max-super 20
**-- nrhs = 1, process grid = 1 X 3, fill 6, relax 8, max-super 10
**-- nrhs = 1, process grid = 1 X 3, fill 6, relax 8, max-super 20
**-- nrhs = 1, process grid = 2 X 1, fill 2, relax 4, max-super 10
**-- nrhs = 1, process grid = 2 X 1, fill 2, relax 4, max-super 20
**-- nrhs = 1, process grid = 2 X 1, fill 2, relax 8, max-super 10
**-- nrhs = 1, process grid = 2 X 1, fill 2, relax 8, max-super 20
**-- nrhs = 1, process grid = 2 X 1, fill 6, relax 4, max-super 10
**-- nrhs = 1, process grid = 2 X 1, fill 6, relax 4, max-super 20
**-- nrhs = 1, process grid = 2 X 1, fill 6, relax 8, max-super 10
**-- nrhs = 1, process grid = 2 X 1, fill 6, relax 8, max-super 20
**-- nrhs = 1, process grid = 2 X 3, fill 2, relax 4, max-super 10
**-- nrhs = 1, process grid = 2 X 3, fill 2, relax 4, max-super 20
**-- nrhs = 1, process grid = 2 X 3, fill 2, relax 8, max-super 10
**-- nrhs = 1, process grid = 2 X 3, fill 2, relax 8, max-super 20
**-- nrhs = 1, process grid = 2 X 3, fill 6, relax 4, max-super 10
**-- nrhs = 1, process grid = 2 X 3, fill 6, relax 4, max-super 20
**-- nrhs = 1, process grid = 2 X 3, fill 6, relax 8, max-super 10
**-- nrhs = 1, process grid = 2 X 3, fill 6, relax 8, max-super 20
**-- nrhs = 3, process grid = 1 X 1, fill 2, relax 4, max-super 10
**-- nrhs = 3, process grid = 1 X 1, fill 2, relax 4, max-super 20
**-- nrhs = 3, process grid = 1 X 1, fill 2, relax 8, max-super 10
**-- nrhs = 3, process grid = 1 X 1, fill 2, relax 8, max-super 20
**-- nrhs = 3, process grid = 1 X 1, fill 6, relax 4, max-super 10
**-- nrhs = 3, process grid = 1 X 1, fill 6, relax 4, max-super 20
**-- nrhs = 3, process grid = 1 X 1, fill 6, relax 8, max-super 10
**-- nrhs = 3, process grid = 1 X 1, fill 6, relax 8, max-super 20
**-- nrhs = 3, process grid = 1 X 3, fill 2, relax 4, max-super 10
**-- nrhs = 3, process grid = 1 X 3, fill 2, relax 4, max-super 20
**-- nrhs = 3, process grid = 1 X 3, fill 2, relax 8, max-super 10
**-- nrhs = 3, process grid = 1 X 3, fill 2, relax 8, max-super 20
**-- nrhs = 3, process grid = 1 X 3, fill 6, relax 4, max-super 10
**-- nrhs = 3, process grid = 1 X 3, fill 6, relax 4, max-super 20
**-- nrhs = 3, process grid = 1 X 3, fill 6, relax 8, max-super 10
**-- nrhs = 3, process grid = 1 X 3, fill 6, relax 8, max-super 20
**-- nrhs = 3, process grid = 2 X 1, fill 2, relax 4, max-super 10
**-- nrhs = 3, process grid = 2 X 1, fill 2, relax 4, max-super 20
**-- nrhs = 3, process grid = 2 X 1, fill 2, relax 8, max-super 10
**-- nrhs = 3, process grid = 2 X 1, fill 2, relax 8, max-super 20
**-- nrhs = 3, process grid = 2 X 1, fill 6, relax 4, max-super 10
**-- nrhs = 3, process grid = 2 X 1, fill 6, relax 4, max-super 20
**-- nrhs = 3, process grid = 2 X 1, fill 6, relax 8, max-super 10
**-- nrhs = 3, process grid = 2 X 1, fill 6, relax 8, max-super 20
**-- nrhs = 3, process grid = 2 X 3, fill 2, relax 4, max-super 10
**-- nrhs = 3, process grid = 2 X 3, fill 2, relax 4, max-super 20
**-- nrhs = 3, process grid = 2 X 3, fill 2, relax 8, max-super 10
**-- nrhs = 3, process grid = 2 X 3, fill 2, relax 8, max-super 20
**-- nrhs = 3, process grid = 2 X 3, fill 6, relax 4, max-super 10
**-- nrhs = 3, process grid = 2 X 3, fill 6, relax 4, max-super 20
**-- nrhs = 3, process grid = 2 X 3, fill 6, relax 8, max-super 10
**-- nrhs = 3, process grid = 2 X 3, fill 6, relax 8, max-super 20
Later I want to use SuperLU_dist in combination with Trilinos. Here is a minimal working example, that depends on Trilinos
To use it, you need to adjust CMakeLists.txt and set the path to a Trilinos install directory.
Now the following problems occur:
This is even the case, if I set the problem size much larger.
3.) If I compile SuperLU_dist with only -O1, everything works as expected, even for many MPI processes, e.g. 80:
As I have already written, the problem only occurs with the Intel compiler. With GCC 14.1.1 and OpenMPI 5.0.5 everything works as expected (even with SuperLU_dist in -O3 mode).
At first I have opened a bug report at Trilinos.
but since the problem is only related to SuperLU_dist compilation flags I closed this and opened a report here.
As I have written there already: I had a similiar issue with the intel compiler just recently and have a minimal working example for this:
I don't know if there is anything to do on the SuperLU_dist side, or if only the Intel developers are to blame for this.
Maybe someone can also give the Intel compiler a test and try to reproduce the issue, so that maybe other default optimization flags for the Intel compiler (in specific versions) can be used?
Hello,
I have encountered a problem when using SuperLU_dist (7.2.0 and 8.2.1) in combiniation with Trilinos.
Trilinos currently does not support SuperLU_dist 9.0.0 or master, that's why I can't test these versions.
All my problems only occur when using the classic intel compiler suite, that I have to use for this project:
And the problems are related to the compilation flags of SuperLU_dist. I have tried many ways of how I compile my software stack, but the situation is now, that I can compile metis, parmetis and trilinos in release mode with -O3, but as soon as I compile SuperLU_dist with -O2 or -O3 (default), my problems start.
But let me start from scratch.
I can compile SuperLU dist with default settings in Release mode (-O3) just fine. And I cann run all the tests in the TEST folder:
Later I want to use SuperLU_dist in combination with Trilinos. Here is a minimal working example, that depends on Trilinos
trilinos_superlu_dist.zip
To use it, you need to adjust CMakeLists.txt and set the path to a Trilinos install directory.
Now the following problems occur:
but if I set the process numbers higher it crashes:
This is even the case, if I set the problem size much larger.
3.) If I compile SuperLU_dist with only -O1, everything works as expected, even for many MPI processes, e.g. 80:
As I have already written, the problem only occurs with the Intel compiler. With GCC 14.1.1 and OpenMPI 5.0.5 everything works as expected (even with SuperLU_dist in -O3 mode).
At first I have opened a bug report at Trilinos.
but since the problem is only related to SuperLU_dist compilation flags I closed this and opened a report here.
As I have written there already: I had a similiar issue with the intel compiler just recently and have a minimal working example for this:
intel_O3_bug.zip
compiling this with
icc -O3 intel_O3_bug.c -o intel_O3_bugand running the executable:
./intel_O3_bugresults in the "wrong" result. Changing to "-O2" fixes the issue. If one uses GCC (even with -Ofast) one alwasy gets the correct result. So intel compiler (icc (ICC) 2021.9.0 20230302) is doing some nasty things here. But I don't know if the problem that I report here is related to this.
I don't know if there is anything to do on the SuperLU_dist side, or if only the Intel developers are to blame for this.
Maybe someone can also give the Intel compiler a test and try to reproduce the issue, so that maybe other default optimization flags for the Intel compiler (in specific versions) can be used?
Many greetings
mathse