Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VectorPatch Compiling Errors #678

Open
W-Wuxian opened this issue Dec 15, 2023 · 5 comments
Open

VectorPatch Compiling Errors #678

W-Wuxian opened this issue Dec 15, 2023 · 5 comments
Labels

Comments

@W-Wuxian
Copy link

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 W-Wuxian added the bug label Dec 15, 2023
@Z10Frank
Copy link
Contributor

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.

@W-Wuxian
Copy link
Author

W-Wuxian commented Dec 19, 2023

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

@Z10Frank
Copy link
Contributor

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.

@mccoys
Copy link
Contributor

mccoys commented Jan 18, 2024

@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

@Z10Frank
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants