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

Johannes Doerfert via Openmp-dev openmp-dev at lists.llvm.org
Thu May 21 09:38:53 PDT 2020


On 5/21/20 11:12 AM, Raúl Peñacoba Veigas via Openmp-dev wrote:
> 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
>
Thanks for the reproducer! We might need to file a bug report for this one

but maybe someone will pick it up from here, let's wait a little while :)



> 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