2014-11-06 2 views
7

Итак, я попытался использовать OpenMP с одной из последних версий clang, clang version 3.4.2 (tags/RELEASE_34/dot2-final). Далее следуют процедуры, чтобы собрать и добавить дорожкам omp.h, затем Компиляция мой hello.c с помощью:Использование OpenMP с llvm-clang

clang -fopenmp hello.c 

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

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

PS: Я попытался вручную экспортировать 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());} 
+0

Пожалуйста, покажите нам код для 'hello.c'. – Mysticial

+0

здесь @Mysticial – Amir

+0

Почему бы не попробовать #pragma omp parallel num_threads (#noofthreads) –

ответ

4

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

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

0

Попробуйте установить количество потоков, используя функцию 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() в обоих параллельно и последовательной области, и посмотреть, что вы получаете

+0

Интересно, когда я выполняю это:' clang -g -emit-llvm -S -c -fopenmp hello.c -o hello.ll' Я получаю это предупреждение: 'clang: warning: аргумент, не использованный во время компиляции: '-fopenmp'', вы знаете, почему? – Amir

+0

Если вы не используете -fopenmp, компилятор выдает ошибку о неопределенной ссылке на функции openMP. Если библиотека не может быть включена по умолчанию –

+0

нет Я выполнил здесь следующие процедуры: 'http: // openmp.llvm.org/'и установите библиотеку и экспортируйте путь. до этого у меня была ошибка, но теперь уже нет. – Amir

0

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

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

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

Смежные вопросы