Использование OpenMP с llvm-clang

Поэтому я попытался использовать OpenMP с одной из последних версий clang, clang version 3.4.2 (tags/RELEASE_34/dot2-final). Выполнил процедуру компиляции и добавления PATH omp.h, затем скомпилировал мой hello.c, используя:

clang -fopenmp hello.c

а затем запустив его, он все равно не может использовать более 1 потока:

Bash-4.1$ ./a.out 
Hello from thread 0, nthreads 1

P.S. Я пытался вручную экспортировать export OMP_NUM_THREADS=8, но это тоже ничего не решило. Любые идеи?

ОБНОВЛЕНИЕ: это hello.c:

#include <omp.h>
#include <stdio.h>
int main() {
#pragma omp parallel
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());}

person Amir    schedule 06.11.2014    source источник
comment
Пожалуйста, покажите нам код для hello.c.   -  person Mysticial    schedule 07.11.2014
comment
вот он @Mysticial   -  person Amir    schedule 07.11.2014
comment
Почему бы не попробовать #pragma omp parallel num_threads(#noofthreads)   -  person coder hacker    schedule 07.11.2014
comment
@TejasPatel, я уже пробовал это, но не сработало. появляется тот же Hello from thread 0, nthreads 1   -  person Amir    schedule 07.11.2014


Ответы (3)


Несмотря на то, что это немного поздно в отношении временной метки моего первоначального вопроса, я хотел бы упомянуть ответ здесь, чтобы, по крайней мере, это экономило время людей, столкнувшихся с подобной проблемой.

Сам LLVM в настоящее время не поддерживает Openmp прямо из коробки. Вы можете заставить его скомпилировать и запустить код с тегом omp с помощью Intel Runtime Support. Однако, если вы хотите иметь чистый clang с поддержкой OpenMP, есть ствол проекта по адресу OpenMP-Clang который вы можете клонировать и создавать. Текущая поддержка — это спецификация OpenMP 3.1, и скоро они будут поддерживать спецификацию OpenMP 4.0:

$ git clone https://github.com/clang-omp/llvm_trunk llvm
$ git clone https://github.com/clang-omp/compiler-rt_trunk llvm/projects/compiler-rt
$ git clone https://github.com/clang-omp/clang_trunk llvm/tools/clang

Не забудьте построить Intel® OpenMP* Runtime Library после этого, так как вам нужны omp.h и /path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so

person Amir    schedule 28.11.2015

Попробуйте установить количество потоков с помощью функции omp_set_num_thread(). Если это не сработает, попробуйте снова настроить clang.

#include <omp.h>
#include <stdio.h>
int main() {
      omp_set_num_threads(4);
      #pragma omp parallel
      {
      printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(),       omp_get_num_threads());
      }    
}

Также попробуйте вызвать mp_get_max_threads() как в параллельной, так и в последовательной области, и посмотрите, что вы получите.

person coder hacker    schedule 07.11.2014
comment
интересно, когда я выполняю это: clang -g -emit-llvm -S -c -fopenmp hello.c -o hello.ll я получаю это предупреждение: clang: warning: argument unused during compilation: '-fopenmp', знаете почему?? - person Amir; 08.11.2014
comment
Если вы не используете -fopenmp, компилятор выдает ошибку о неопределенной ссылке на функции openMP. Если нет, библиотека может быть включена по умолчанию. - person coder hacker; 08.11.2014
comment
нет, я выполнил процедуры здесь: http://openmp.llvm.org/ и установил библиотеку и экспортировал путь. до этого у меня была ошибка, но теперь уже нет. - person Amir; 08.11.2014
comment
так что, если вы не используете -fopenmp, он успешно скомпилируется? - person coder hacker; 08.11.2014
comment
да. подождите минутку. мне нужно было загрузить новую версию clang для использования с opennmp? я использовал свой текущий clang - person Amir; 08.11.2014
comment
попробуйте загрузить новый. Кстати, что дает omp_get_max_threads() в параллельной области - person coder hacker; 08.11.2014
comment
да, я забыл. он вручную установил максимальное значение 4: Hello from thread 0, nthreads 1, maxThreads is 4 - person Amir; 08.11.2014
comment
странное поведение. извините, я больше не знаю об этом. возможно, у вас должно быть больше шансов на форуме openmp - person coder hacker; 08.11.2014
comment
ура, приятель;) позвольте мне попробовать эту другую версию clang и сообщить об этом. - person Amir; 08.11.2014

Я тоже видел только один поток с clang версии 3.8.0 (транк 252425). Затем я прочитал последние новости на https://clang-omp.github.io:

27 ноября 2015 г. — Дальнейшая разработка поддержки OpenMP в компиляторе clang/llvm перенесена на сайт www.llvm.org. Этот сайт поддерживается только в архивных целях. Спасибо всем, кто вносил свой вклад все эти годы!

... и поэтому я скомпилировал LLVM/Clang из транка; скомпилировал библиотеку времени выполнения OpenMP, используя отличные инструкции здесь; и теперь это работает.

person user2023370    schedule 16.12.2015