Bagaimana cara mengkompilasi program OpenMP menggunakan dentang?

9

Gcc saya mengkompilasi dengan baik, tetapi dentang gagal dengan pesan berikut:

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

Saya juga menginstal libomp5paket dan mengubah bendera menjadi -fopenmp=libomp5, meskipun tidak membantu:

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

ini rekomendasi tidak bekerja.

Akan berterima kasih atas petunjuk tentang menginstal paket spesifik 16.04 yang diperlukan dan melewati flag yang sesuai.

Bulat M.
sumber
Versi dentang apa yang Anda gunakan? Saya memiliki masalah yang sama BTW dengan clang-3.8 dan clang-3.9 di Ubuntu 16.10.
Z boson
1
sudo apt install libomp-dev
Z boson
Akhirnya, saya bisa menggunakan OpenMP dengan Dentang di Ubuntu! Saya sudah lama menginginkan ini !.
Z boson

Jawaban:

16

Saya memiliki masalah yang sama.

sudo apt install libomp-dev

Memperbaikinya dengan 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());
}

Kemudian

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

Juga

clant-3.9 test.c -fopenmp

bekerja.


GCC dan Dentang menggunakan pustaka runtime OpenMP yang berbeda: libgomp dan libomp dengan hormat.

Clang's runtime adalah runtime LLVM OpenMP yang pada gilirannya didasarkan pada runtime Intel OpenMP (yang merupakan open source). https://www.openmprtl.org/

Di sistem saya GCC diinstal omp.hdi

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

dan libomp-devtergila - gila omp.hpada

/usr/include/omp.h

Ini adalah file header yang berbeda yang menyertakan definisi fungsi yang berbeda. Mungkin boleh menggunakan file header untuk misalnya, omp_get_wtime()tetapi secara umum saya pikir mungkin lebih baik menggunakan file header yang sesuai dengan runtime yang ditautkan.

Z boson
sumber
1
Bekerja pada vanilla 16.04 dengan stock clang in repos.
Bulat M.
1
Saya hanya menginstal Ubuntu 17,04 yang secara default ke Dentang 4.0. Saya diam harus menggunakan sudo apt install libomp.dev.
Z boson
Jika Anda secara tidak sengaja menautkan libgomp dari dentang 6, kode Anda akan diserialkan secara diam-diam.
Andrew Wagner
2

Tampaknya file omp.h tidak ada di PATH sistem Anda . pertama-tama coba cari file omp.h jika Anda tidak tahu di mana itu:

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

Dan kemudian jalankan perintah ini untuk mengkompilasi kode Anda:

clang -o main main.c -I/path/to/omp/folder
Ghasem Pahlavan
sumber
Itu tidak memperbaiki masalah. Masih tidak dapat menemukan omp.h.
Z boson
Apakah Anda menemukan omp.h di sistem Anda? dapatkah Anda menambahkan output dari perintah ini ke pertanyaan Anda?
Ghasem Pahlavan
*.hitu file header, mengapa dia ingin menambahkannya ke path-nya? mereka harus di /usr/includemisalnya.
Ravexina
1
Terima kasih Ghasem, instalasi libomp-dev pada 16.04 terpecahkan.
Bulat M.