OpenMP: ALLOCATABLE - переменная внутри PARALLEL блока

Добрый день,

не могли бы вы помочь ответить вот на какой вопрос:
внутри PARALLEL блока идет вызов подпрограммы, которая,
схематично, выполняет следующую последовательность действий:

SUBROUTINE TEST
...
INTEGER M, N
REAL,ALLOCATABLE:: TMP(:,:)
...
ALLOCATE(TMP(M,N))
....
DEALLOCATE(TMP)
...
END

Предположим, что программа запускается на N вычислительных узлах и на
каждом узле запускаем два треда.
Тогда наблюдается такая картина, что оба треда на каждом вычислительном
узле заходят в эту функцию, но РОВНО один из этих двух успешно
зовет ALLOCATE и переходит к выполнению следующей строчки, а ДРУГОЙ
застревает в вызове ALLOCATE и не переходит к выполнению следующей
за вызовом ALLOCATE строчки.

Скажите, пожалуйста, в чем может быть дело.
Баг или фича :)

Во-первых, проверьте, используете ли Вы версию скрипта компиляции, заканчивающуюся на _r.

Во-вторых, попробуйте посмотреть, что говорит стандарт OpenMP про allocatable-массивы в Фортране.

К слову, следующий C-код успешно отрабатывает на моей персоналке:

/*
 * Compilation:
 * $> gcc -fopenmp -Wall -Wextra openmp.c
 */


#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

#define N 4
#define NUM_THREADS 3

int main()
{
    omp_set_num_threads(NUM_THREADS);

#pragma omp parallel
    {
        int *a = (int *)malloc(N * sizeof(a[0]));
        int tn = omp_get_thread_num();
        int i, t;

        /* Fill-in array */
        for (i = 0; i < N; ++i)
            a[i] = tn * N + i;

        /* Print array */
        for (t = 0; t < NUM_THREADS; ++t)
        {
            if (t == tn)
            {
                printf("%d: ", tn);

                for (i = 0; i < N; ++i)
                    printf("%d ", a[i]);

                putchar('\n');
            }
#pragma omp barrier
        }

        /* Clean-up */
        free(a);
    }

    return EXIT_SUCCESS;
}

Спасибо за комментарий.

Я использовал версию mpixlf77_r.
Когда заменил на mpixlf90_r - все заработало.
Как появится возможность, постараюсь написать простейший
тест-кейс (быть может, подойдет и ваш пример).
Или известно, что (mpixlf77_r + MPI + OpenMP)
могут вызвать проблемы?