Làm thế nào để biên dịch chương trình OpenMP bằng clang?


9

Gcc của tôi biên dịch tốt, nhưng tiếng kêu thất bại với thông báo sau:

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

Tôi cũng đã cài đặt libomp5gói và đổi cờ thành -fopenmp=libomp5, mặc dù nó cũng không giúp được gì:

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

những khuyến nghị này đã không làm việc.

Sẽ biết ơn những gợi ý về việc cài đặt các gói cụ thể 16.04 cần thiết và chuyển các cờ tương ứng.


Bạn đang sử dụng phiên bản nào của Clang? Tôi có cùng một vấn đề BTW với clang-3.8 và clang-3.9 trên Ubuntu 16.10.
Z boson

1
sudo apt cài đặt libomp-dev
Z boson

Cuối cùng, tôi có thể sử dụng OpenMP với Clang trên Ubuntu! Tôi đã muốn điều này trong một thời gian dài!.
Z boson

Câu trả lời:


16

Tôi đã từng gặp vấn đề tương tự.

sudo apt install libomp-dev

Đã sửa lỗi với 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());
}

Sau đó

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

Cũng thế

clant-3.9 test.c -fopenmp

làm.


GCC và Clang sử dụng các thư viện thời gian chạy OpenMP khác nhau: libgomp và libomply.

Thời gian chạy của Clang là thời gian chạy LLMP OpenMP , lần lượt dựa trên thời gian chạy Intel OpenMP (là nguồn mở). https://www.openmprtl.org/

Trên hệ thống của tôi, GCC được cài đặt omp.htại

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

libomp-devinsalled omp.htại

/usr/include/omp.h

Đây là các tệp tiêu đề khác nhau bao gồm các định nghĩa chức năng khác nhau. Có thể sử dụng một trong hai tệp tiêu đề chẳng hạn, omp_get_wtime()nhưng nói chung tôi nghĩ có lẽ tốt hơn là sử dụng tệp tiêu đề tương ứng với thời gian chạy được liên kết đến.


1
Làm việc trên vanilla 16.04 với tiếng kêu trong kho.
Bulat M.

1
Tôi vừa cài đặt Ubuntu 17.04, mặc định là Clang 4.0. Tôi vẫn phải sử dụng sudo apt install libomp.dev.
Z boson

Nếu bạn vô tình liên kết libgomp từ clang 6, mã của bạn sẽ được âm thầm nối tiếp.
Andrew Wagner

2

Có vẻ như omp.h tập tin không tồn tại trong hệ thống của bạn PATH . trước hết hãy cố gắng xác định vị trí tệp omp.h nếu bạn không biết nó ở đâu:

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

Và sau đó chạy lệnh này để biên dịch mã của bạn:

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

Điều đó không khắc phục vấn đề. Nó vẫn không thể tìm thấy omp.h.
Z boson

Bạn đã tìm thấy bất kỳ omp.h trong hệ thống của bạn? bạn có thể nối đầu ra của các lệnh này vào câu hỏi của bạn không?
Ghasem Pahlavan

*.hlà các tệp tiêu đề, tại sao anh ta muốn thêm chúng vào đường dẫn của mình? họ nên ở trong /usr/includeví dụ.
Ravexina

1
Cảm ơn Ghasem, cài đặt libomp-dev vào ngày 16.04 đã được giải quyết.
Bulat M.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.