Smilei
Smilei copied to clipboard
VectorPatch Compiling Errors
Description
Errors at Compile time.
Compiling src/picsar_interface/interface.cpp
src/Patch/VectorPatch.cpp: Dans la fonction membre « void VectorPatch::dynamics(Params&, SmileiMPI*, SimWindow*, RadiationTables&, MultiphotonBreitWheelerTables&, double, Timers&, int) »:
src/Patch/VectorPatch.cpp:353:10: erreur: redéclaration de « bool diag_PartEventTracing »
353 | bool diag_PartEventTracing {false};
| ^~~~~~~~~~~~~~~~~~~~~
src/Patch/VectorPatch.cpp:334:10: note: « bool diag_PartEventTracing » précédemment déclaré ici
334 | bool diag_PartEventTracing {false};
| ^~~~~~~~~~~~~~~~~~~~~
src/Patch/VectorPatch.cpp:356:42: erreur: « class SmileiMPI » n'a pas de membre nommé « reference_time »; vouliez-vous utiliser « reference_time_ » ?
356 | if (diag_PartEventTracing) smpi->reference_time = MPI_Wtime();
| ^~~~~~~~~~~~~~
| reference_time_
src/Patch/VectorPatch.cpp:335:12: attention: variable « reference_time » inutilisée [-Wunused-variable]
335 | double reference_time;
| ^~~~~~~~~~~~~~
src/Patch/VectorPatch.cpp: Dans la fonction membre « void VectorPatch::ponderomotiveUpdateSusceptibilityAndMomentum(Params&, SmileiMPI*, SimWindow*, double, Timers&, int) »:
src/Patch/VectorPatch.cpp:4352:38: erreur: « class SmileiMPI » n'a pas de membre nommé « reference_time »; vouliez-vous utiliser « reference_time_ » ?
4352 | if (diag_PartEventTracing) smpi->reference_time = MPI_Wtime();
| ^~~~~~~~~~~~~~
| reference_time_
Steps to reproduce the problem
module purge
module load python-3.10.13/3.10.13
module load gcc-13.2/13.2.0
module load openmpi/5.0.0/gcc/13.2
module load hdf5/1.14.3/openmpi/5.0.0/gcc/13.2
export HDF5_ROOT_DIR=/opt/apps/hdf5-1.12.0-openmpi/
export BUILD_DIR=/root/Smilei-4.8/Install_openmpi5000_gnucomp
make -j 4 config="omptasks part_event_tracing_tasks_on" machine=Cascadelake_gnu
Parameters
-
Smilei version:
V4.8.0
-
Input Machine file Cascadelake_gnu:
CXXFALGS += -O3 -march=cascadelake -mtune=cascadelake -ftree-vectorize -flto
LDFLAGS += -march=cascadelake -mtune=cascadelake
-
Commands or script used to run the faulty simulation ?
make -j 4 config="omptasks part_event_tracing_tasks_on" machine=Cascadelake_gnu
-
Computing resources
-
type of computer
4 x Intel® Xeon® Platinum 8260 Processor
-
OS
LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.9.2009 (Core) Release: 7.9.2009 Codename: Core
-
C++ compiler (to get some information
g++ --version
) g++ (GCC) 13.2.0 -
MPI version
-
mpic++ --version: g++ (GCC) 13.2.0
-
mpic++ -show: g++ -I/opt/apps/openmpi/5.0.0/gcc/13.2/include -pthread -L/opt/apps/openmpi/5.0.0/gcc/13.2/lib -Wl,-rpath -Wl,/opt/apps/openmpi/5.0.0/gcc/13.2/lib -Wl,--enable-new-dtags -lmpi
-
-
HDF5 version
h5pcc --version gcc (GCC) 13.2.0
-
Python version
python --version Python 3.11.5
-
Hello, thank you for spotting this, I will soon push a fix for this compilation error.
Meanwhile, can you try changing smpi->reference_time
to smpi->reference_time_
in the lines generating the error? At the start of the method void VectorPatch::dynamics
, can you remove entirely this code block, then make clean
and compile again?
#ifdef _PARTEVENTTRACING
bool diag_PartEventTracing {false};
double reference_time;
#endif
Task parallelisation is an experimental feature and unfortunately in case of related issues we will likely not progress rapidly because there are other more pressing developments to implement.
Using gcc/10.2.0 openmpi/5.0.0 HDF5/1.14.3 parallel and Python/3.10.13, then after applying your fix:
Dans le fichier inclus depuis src/Diagnostic/DiagnosticParticleList.h:4,
depuis src/Diagnostic/DiagnosticTrack.h:4,
depuis src/Species/Species.cpp:45:
src/Patch/VectorPatch.h: Dans la fonction membre « void VectorPatch::writeParticleEventTracingOutput(Params&, SmileiMPI*, int) »:
src/Patch/VectorPatch.h:117:44: attention: comparaison d'expressions entières de types signés différents: « int » et « std::vector<double>::size_type » {aka « long unsigned int »} [-Wsign-compare]
117 | for (int event_id = 0; event_id<smpi->particle_event_tracing_event_time_[ithread].size();event_id++){
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dans le fichier inclus depuis src/Diagnostic/DiagnosticParticleList.h:4,
depuis src/Diagnostic/DiagnosticTrack.h:4,
depuis src/Species/Species.cpp:45:
src/Patch/VectorPatch.h:109:50: attention: paramètre « params » inutilisé [-Wunused-parameter]
109 | void writeParticleEventTracingOutput(Params ¶ms, SmileiMPI *smpi, int iteration){
| ~~~~~~~~^~~~~~
src/Species/Species.cpp: Dans la fonction membre « virtual void Species::dynamicsTasks(double, unsigned int, ElectroMagn*, Params&, bool, PartWalls*, Patch*, SmileiMPI*, RadiationTables&, MultiphotonBreitWheelerTables&, int) »:
src/Species/Species.cpp:860:76: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
860 | #pragma omp task default(shared) firstprivate(ibin) depend(out:bin_has_interpolated[ibin]) depend(in:buffers_resized)
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:904:80: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
904 | #pragma omp task default(shared) firstprivate(ibin) depend(out:bin_has_interpolated[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:945:88: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
945 | #pragma omp task default(shared) firstprivate(ibin) depend(out:bin_has_interpolated[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:992:88: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
992 | #pragma omp task default(shared) firstprivate(ibin) depend(out:bin_has_interpolated[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1033:65: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
1033 | #pragma omp task default(shared) depend(out:bin_has_interpolated[0:(Nbins-1)])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1062:122: erreur: « Species::bin_has_pushed » n'est pas une variable dans la clause « depend »
1062 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_interpolated[ibin]) depend(out:bin_has_pushed[ibin])
| ^~~~~~~~~~~~~~
src/Species/Species.cpp:1062:83: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
1062 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_interpolated[ibin]) depend(out:bin_has_pushed[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:850:13: attention: variable « buffers_resized » inutilisée [-Wunused-variable]
850 | int buffers_resized;
| ^~~~~~~~~~~~~~~
src/Species/Species.cpp:1102:108: erreur: « Species::bin_has_done_particles_BC » n'est pas une variable dans la clause « depend »
1102 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_pushed[ibin]) depend(out:bin_has_done_particles_BC[ibin])
| ^~~~~~~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1102:75: erreur: « Species::bin_has_pushed » n'est pas une variable dans la clause « depend »
1102 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_pushed[ibin]) depend(out:bin_has_done_particles_BC[ibin])
| ^~~~~~~~~~~~~~
src/Species/Species.cpp:1155:129: erreur: « Species::bin_has_projected » n'est pas une variable dans la clause « depend »
1155 | #pragma omp task default(shared) firstprivate(ibin,bin_size0) depend(in:bin_has_done_particles_BC[ibin]) depend(out:bin_has_projected[ibin])
| ^~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1155:85: erreur: « Species::bin_has_done_particles_BC » n'est pas une variable dans la clause « depend »
1155 | #pragma omp task default(shared) firstprivate(ibin,bin_size0) depend(in:bin_has_done_particles_BC[ibin]) depend(out:bin_has_projected[ibin])
| ^~~~~~~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1227:88: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
1227 | #pragma omp task default(shared) firstprivate(ibin) depend(out:bin_has_interpolated[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1253:98: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
1253 | #pragma omp task default(shared) firstprivate(ibin,bin_size0) depend(out:bin_has_interpolated[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1263:50: attention: comparaison d'expressions entières de types signés différents: « int » et « unsigned int » [-Wsign-compare]
1263 | for( int imode = 0; imode<params.nmodes; imode++ ) {
| ~~~~~^~~~~~~~~~~~~~
src/Species/Species.cpp:1312:98: erreur: « Species::bin_has_projected » n'est pas une variable dans la clause « depend »
1312 | #pragma omp task default(shared) firstprivate(ibin,bin_size0) depend(out:bin_has_projected[ibin])
| ^~~~~~~~~~~~~~~~~
src/Species/Species.cpp:1323:50: attention: comparaison d'expressions entières de types signés différents: « int » et « unsigned int » [-Wsign-compare]
1323 | for( int imode = 0; imode<params.nmodes; imode++ ) {
| ~~~~~^~~~~~~~~~~~~~
src/Species/Species.cpp: Dans la fonction membre « virtual void Species::ponderomotiveUpdateSusceptibilityAndMomentumTasks(double, ElectroMagn*, Params&, Patch*, SmileiMPI*, int) »:
src/Species/Species.cpp:2359:10: attention: variable « bin_has_interpolated » inutilisée [-Wunused-variable]
2359 | int *bin_has_interpolated = new int[Nbins];
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:2360:10: attention: variable « bin_has_projected_chi » inutilisée [-Wunused-variable]
2360 | int *bin_has_projected_chi = new int[Nbins];
| ^~~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp: Dans la fonction membre « virtual void Species::ponderomotiveUpdatePositionAndCurrentsTasks(double, unsigned int, ElectroMagn*, Params&, bool, PartWalls*, Patch*, SmileiMPI*, int) »:
src/Species/Species.cpp:2743:76: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
2743 | #pragma omp task default(shared) firstprivate(ibin) depend(out:bin_has_interpolated[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:2780:114: erreur: « Species::bin_has_pushed » n'est pas une variable dans la clause « depend »
2780 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_interpolated[ibin]) depend(out:bin_has_pushed[ibin])
| ^~~~~~~~~~~~~~
src/Species/Species.cpp:2780:75: erreur: « Species::bin_has_interpolated » n'est pas une variable dans la clause « depend »
2780 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_interpolated[ibin]) depend(out:bin_has_pushed[ibin])
| ^~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:2803:108: erreur: « Species::bin_has_done_particles_BC » n'est pas une variable dans la clause « depend »
2803 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_pushed[ibin]) depend(out:bin_has_done_particles_BC[ibin])
| ^~~~~~~~~~~~~~~~~~~~~~~~~
src/Species/Species.cpp:2803:75: erreur: « Species::bin_has_pushed » n'est pas une variable dans la clause « depend »
2803 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_pushed[ibin]) depend(out:bin_has_done_particles_BC[ibin])
| ^~~~~~~~~~~~~~
src/Species/Species.cpp:2842:75: erreur: « Species::bin_has_done_particles_BC » n'est pas une variable dans la clause « depend »
2842 | #pragma omp task default(shared) firstprivate(ibin) depend(in:bin_has_done_particles_BC[ibin])
| ^~~~~~~~~~~~~~~~~~~~~~~~~
make: *** [/opt/apps/smilei-4.8.0/issue/openmpi/5.0.0/gcc/10.2.0/src/Species/Species.o] Erreur 1
make: *** Attente des tâches non terminées....
Dans le fichier inclus depuis src/Diagnostic/DiagnosticParticleList.h:4,
depuis src/Diagnostic/DiagnosticTrack.h:4,
depuis src/Species/SpeciesV.cpp:37:
src/Patch/VectorPatch.h: Dans la fonction membre « void VectorPatch::writeParticleEventTracingOutput(Params&, SmileiMPI*, int) »:
src/Patch/VectorPatch.h:117:44: attention: comparaison d'expressions entières de types signés différents: « int » et « std::vector<double>::size_type » {aka « long unsigned int »} [-Wsign-compare]
117 | for (int event_id = 0; event_id<smpi->particle_event_tracing_event_time_[ithread].size();event_id++){
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dans le fichier inclus depuis src/Diagnostic/DiagnosticParticleList.h:4,
depuis src/Diagnostic/DiagnosticTrack.h:4,
depuis src/Species/SpeciesV.cpp:37:
src/Patch/VectorPatch.h:109:50: attention: paramètre « params » inutilisé [-Wunused-parameter]
109 | void writeParticleEventTracingOutput(Params ¶ms, SmileiMPI *smpi, int iteration){
| ~~~~~~~~^~~~~~
src/Species/SpeciesV.cpp: Dans la fonction membre « virtual void SpeciesV::dynamicsTasks(double, unsigned int, ElectroMagn*, Params&, bool, PartWalls*, Patch*, SmileiMPI*, RadiationTables&, MultiphotonBreitWheelerTables&, int) »:
src/Species/SpeciesV.cpp:692:9: attention: variable « bin_size0 » inutilisée [-Wunused-variable]
692 | int bin_size0 = b_dim[0]; // used for AM
| ^~~~~~~~~
src/Species/SpeciesV.cpp:698:10: attention: variable « bin_has_interpolated » inutilisée [-Wunused-variable]
698 | int *bin_has_interpolated = new int[Nbins];
| ^~~~~~~~~~~~~~~~~~~~
src/Species/SpeciesV.cpp:699:10: attention: variable « bin_has_pushed » inutilisée [-Wunused-variable]
699 | int *bin_has_pushed = new int[Nbins];
| ^~~~~~~~~~~~~~
src/Species/SpeciesV.cpp:700:10: attention: variable « bin_has_done_particles_BC » inutilisée [-Wunused-variable]
700 | int *bin_has_done_particles_BC = new int[Nbins];
| ^~~~~~~~~~~~~~~~~~~~~~~~~
src/Species/SpeciesV.cpp: Dans la fonction membre « virtual void SpeciesV::ponderomotiveUpdateSusceptibilityAndMomentumTasks(double, ElectroMagn*, Params&, Patch*, SmileiMPI*, int) »:
src/Species/SpeciesV.cpp:2011:10: attention: variable « bin_has_interpolated » inutilisée [-Wunused-variable]
2011 | int *bin_has_interpolated = new int[Nbins]; // the last element is used to manage the Multiphoton Breit Wheeler dependency
| ^~~~~~~~~~~~~~~~~~~~
src/Species/SpeciesV.cpp:2012:10: attention: variable « bin_has_ionized » inutilisée [-Wunused-variable]
2012 | int *bin_has_ionized = new int[Nbins];
| ^~~~~~~~~~~~~~~
src/Species/SpeciesV.cpp:2013:10: attention: variable « bin_has_projected_chi » inutilisée [-Wunused-variable]
2013 | int *bin_has_projected_chi = new int[Nbins];
| ^~~~~~~~~~~~~~~~~~~~~
src/Species/SpeciesV.cpp: Dans la fonction membre « virtual void SpeciesV::ponderomotiveUpdatePositionAndCurrentsTasks(double, unsigned int, ElectroMagn*, Params&, bool, PartWalls*, Patch*, SmileiMPI*, int) »:
src/Species/SpeciesV.cpp:2419:10: attention: variable « bin_has_interpolated » inutilisée [-Wunused-variable]
2419 | int *bin_has_interpolated = new int[Nbins]; // the last element is used to manage the Multiphoton Breit Wheeler dependency
| ^~~~~~~~~~~~~~~~~~~~
src/Species/SpeciesV.cpp:2420:10: attention: variable « bin_has_pushed » inutilisée [-Wunused-variable]
2420 | int *bin_has_pushed = new int[Nbins];
| ^~~~~~~~~~~~~~
src/Species/SpeciesV.cpp:2421:10: attention: variable « bin_has_done_particles_BC » inutilisée [-Wunused-variable]
2421 | int *bin_has_done_particles_BC = new int[Nbins];
| ^~~~~~~~~~~~~~~~~~~~~~~~~
Hello, some compilers do not recognise those variables as allowed variables in the OpenMP task directives. I am using clang 17.0, I have already compiled it before with intel 20. I remember that intel version 18 or 19 may have that problem, I don't know about gcc.
@Z10Frank Maybe remove the task compilation from doc temporarily?
Or recommend not to use gcc? A few years ago there were similar errors apparently: https://stackoverflow.com/questions/36322638/depend-clause-in-openmp-is-not-respecting-dependence-declared gcc 10.2 is from 2020. Maybe works with more recent versions
Indeed, from the doc https://smileipic.github.io/Smilei/Use/installation.html#advanced-compilation-options :
make config=omptasks # use OpenMP task parallelization, not supported by old compilers
I'll close the issue, feel free to reopen it in case of related questions.