[Openmp-dev] Debug assert trigger in OpenMP + MPI

Joachim Protze via Openmp-dev openmp-dev at lists.llvm.org
Sat May 23 14:04:55 PDT 2020


I think, I found the issue and posted a fix at:

https://reviews.llvm.org/D80480

- Joachim


Am 21.05.20 um 18:12 schrieb Raúl Peñacoba Veigas via Openmp-dev:
> Hello again,
> 
> I've managed to remove MPI from the equation. It seems a race condition 
> in the runtime.
> 
> int main(int argc, char **argv)
> {
>          int TIMESTEPS = 10;
>          int BLOCKS = 100;
> 
>          int nranks = 4;
> 
>          int DATA;
> 
>          #pragma omp parallel
>          #pragma omp single
>          {
>                  for (int t = 0; t < TIMESTEPS; ++t) {
>                          for (int r = 0; r < nranks; ++r) {
>                                  for (int b = 0; b < BLOCKS; ++b) {
>                                          #pragma omp task depend(in: DATA)
>                                          { }
>                                  }
>                          }
> 
>                          #pragma omp task depend(inout: DATA)
>                          {}
>                  }
>                  #pragma omp taskwait
>          }
> }
> 
> To run it execute:
> 
> clang -fopenmp t1.c -o t1
> 
> for i in {1..5000}; do echo $i; OMP_NUM_THREADS=3 ./t1; done
> 
> Regards,
> 
> Raúl
> 
> El 21/5/20 a las 9:57, Raúl Peñacoba Veigas escribió:
>> Hello everyone,
>>
>> Writing an OpenMP + MPI code I've triggered a debug assert in 
>> __kmp_task_start:
>>
>> KMP_DEBUG_ASSERT(taskdata->td_flags.tasktype == TASK_EXPLICIT);
>>
>> I attach a simpler code that does not do anything special with 
>> additional info.
>>
>> #include <mpi.h>
>>
>> #include <assert.h>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <string.h>
>> #include <unistd.h>
>>
>> int main(int argc, char **argv)
>> {
>>         int TIMESTEPS = 10;
>>         int BLOCKS = 100;
>>
>>         MPI_Init(&argc, &argv);
>>
>>         int rank, nranks;
>>         MPI_Comm_rank(MPI_COMM_WORLD, &rank);
>>         MPI_Comm_size(MPI_COMM_WORLD, &nranks);
>>
>>         int DATA;
>>
>>         #pragma omp parallel
>>         #pragma omp single
>>         {
>>                 for (int t = 0; t < TIMESTEPS; ++t) {
>>                         for (int r = 0; r < nranks; ++r) {
>>                                 for (int b = 0; b < BLOCKS; ++b) {
>>                                         #pragma omp task depend(in: DATA)
>>                                         { }
>>                                 }
>>                         }
>>
>>                         #pragma omp task depend(inout: DATA)
>>                         {}
>>                 }
>>                 #pragma omp taskwait
>>         }
>>
>>         MPI_Finalize();
>>
>> }
>>
>> llvm_project debug build, commitaafdeeade8d
>> MPICH Version: 3.3a2
>> MPICH Release date: Sun Nov 13 09:12:11 MST 2016
>>
>> $ MPICH_CC=clang mpicc -fopenmp t1.c -o t1
>> $ for i in {1..100}; do mpiexec.hydra -n 4 ./t1; done
>>
>>
> 
> http://bsc.es/disclaimer
> _______________________________________________
> Openmp-dev mailing list
> Openmp-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev



More information about the Openmp-dev mailing list