Smilei icon indicating copy to clipboard operation
Smilei copied to clipboard

VectorPatch Compiling Errors

Open W-Wuxian opened this issue 1 year ago • 5 comments

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

W-Wuxian avatar Dec 15 '23 11:12 W-Wuxian

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.

Z10Frank avatar Dec 15 '23 12:12 Z10Frank

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 &params, 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 &params, 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];
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~

W-Wuxian avatar Dec 19 '23 12:12 W-Wuxian

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 avatar Dec 19 '23 17:12 Z10Frank

@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

mccoys avatar Jan 18 '24 09:01 mccoys

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

Z10Frank avatar Jan 18 '24 12:01 Z10Frank

I'll close the issue, feel free to reopen it in case of related questions.

Z10Frank avatar Jun 10 '24 09:06 Z10Frank