Як компілювати програму OpenMP за допомогою clang?


9

Мій gcc добре компілюється, але кланг не вдається наступним повідомленням:

clang -fopenmp=libomp -o main main.c
main.c:5:10: fatal error: 'omp.h' file not found

Я також встановив libomp5пакет і змінив прапор на -fopenmp=libomp5, хоча це також не допомогло:

clang -fopenmp=libomp5 -o main main.c
clang: error: unsupported argument 'libomp5' to option 'fopenmp='
clang: error: unsupported argument 'libomp5' to option 'fopenmp='

ці рекомендації не спрацювали.

Будемо вдячні за підказки щодо встановлення необхідних 16,04 конкретних пакетів та передачі відповідних прапорів.


Яку версію Clang ви використовуєте? У мене така ж проблема BTW з clang-3.8 та clang-3.9 на Ubuntu 16.10.
Z boson

1
sudo apt install libomp-dev
Z boson

Нарешті, я можу використовувати OpenMP з Clang в Ubuntu! Я цього хотів уже давно !.
Z boson

Відповіді:


16

У мене була така ж проблема.

sudo apt install libomp-dev

Виправлено це за допомогою Ubuntu 16.10

//test.c
#include "omp.h"
#include <stdio.h>

int main(void) {
  #pragma omp parallel
  printf("thread %d\n", omp_get_thread_num());
}

Тоді

clang test.c -fopenmp
./a.out
thread 0
thread 5
thread 2
thread 1
thread 7
thread 3
thread 4
thread 6

Також

clant-3.9 test.c -fopenmp

працює.


GCC та Clang використовують різні бібліотеки виконання OpenMP: libgomp та libomp респективно.

Час виконання Кланг - це LLVM OpenMP, який в свою чергу базується на режимі виконання Open OpenMP (який є відкритим кодом). https://www.openmprtl.org/

У моїй системі GCC встановлений omp.hна

/usr/lib/gcc/x86_64-linux-gnu/6/include/omp.h

і libomp-devукріплений omp.hпри

/usr/include/omp.h

Це різні файли заголовків, які містять різні визначення функцій. Можливо, добре використовувати будь-який файл заголовка, наприклад, omp_get_wtime()але, як правило, я думаю, що краще, мабуть, використовувати файл заголовка, який відповідає виконуваному часу виконання.


1
Працював над ваніллю 16.04 із запасом шум у репості.
Булат М.

1
Я встановив встановлений Ubuntu 17.04, який за замовчуванням встановив Clang 4.0. Мені довелося скористатися sudo apt install libomp.dev.
Z бозон

Якщо ви випадково зв'язали libgomp з clang 6, ваш код буде мовчки серіалізований.
Ендрю Вагнер

2

Здається, що файл omp.h не існує у вашій системі PATH . спершу спробуйте знайти файл omp.h, якщо ви не знаєте, де це:

find / -name 'omp.h' -type f

А потім запустіть цю команду для складання вашого коду:

clang -o main main.c -I/path/to/omp/folder

Це не вирішує проблему. Він досі не може знайти omp.h.
Z boson

Ви знайшли якісь omp.h у своїй системі? ви можете додати висновок цих команд до свого питання?
Ghasem Pahlavan

*.hє файлами заголовків, чому він хотів би додати їх у свій шлях? вони повинні бути, /usr/includeнаприклад.
Ravexina

1
Дякую Ghasem, розроблена установка libomp-dev 16.04.
Булат М.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.