OpenMP и math.h - PullRequest
       67

OpenMP и math.h

0 голосов
/ 27 октября 2019

Я экспериментировал с openmp и некоторыми математическими функциями на C. Если я пытаюсь объявить и инициализировать некоторые переменные вне параллельной конструкции, то использовать их в математической функции внутри параллели, когда я компилирую с использованием gcc -fopenmp practice.c -o practice Iполучить следующую ошибку:

/usr/bin/ld: /tmp/ccQj4iIQ.o: in function `main._omp_fn.0':
practice.c:(.text+0xb3): undefined reference to `fmax'
collect2: error: ld returned 1 exit status

Эта проблема возникает с fmax, fmin, sqrt, pow, cos и т. д. Некоторые примеры кода, иллюстрирующие это:

#include <omp.h>
#include <math.h>

void main(void){

double m=1;
double a=12;

#pragma omp parallel
{
m = fmax(m,a);
}
}

Я обнаружил, что проблема исчезнет, ​​если я 1) переместу fmax за пределы параллели, или 2) повторно инициализирую переменные внутри параллели, или 3) использую fmax на 1и 12 прямо вместо м и а. Эта проблема также НЕ возникает, если я просто пытаюсь использовать printf для печати m и a внутри параллели, поэтому я знаю, что каждый поток может «видеть» значения правильно.

Почему это происходит, иЕсть ли способ исправить это, кроме 3 вещей, которые я уже пробовал? Пока что мне кажется, что 2) - моя лучшая ставка, но глупо делать инициализацию сразу внутри параллели, когда было бы разумнее сделать это заранее.

...