2013-12-10 5 views
2

Я новичок в openmp. Ниже приведена среда.компиляция openmp, macports gcc и eclipse cdt

ОС: Mac OSX Mavericks
Компилятор: GCC (MacPorts gcc48 4.8.2_0) 4.8.2
IDE: Eclipse, Кеплер CDT плагин

Я написал следующую программу OpenMP

#include < stdio.h> 
#include < omp.h> 

int main() 
{ 
#pragma omp parallel 
{ 
    int i=omp_get_thread_num(); 
    printf("hello (%d)",i); 
    printf("world (%d)",i); 
    } 
} 

I скомпилировал вышеуказанную программу и получил ошибку, что omp.h не найден, и lgomp не найден. Следовательно, я добавил в свойствах проекта include include с /opt/local/lib/gcc48/gcc/x86_64-apple-darwin13/4.8.2/include и путь библиотеки/opt/local/lib/gcc48. В путь include был файл omp.h, а путь к библиотеке - файл libomp.o.

Включает опцию -fopenmp как в компоновщике, так и в опции компилятора через свойства проекта. Он компилируется с помощью gcc -I/opt/local/lib/gcc48/gcc/x86_64-apple-darwin13/4.8.2/include -O0 -g3 -Wall -c -fmessage-length = 0 -fopenmp -MMD -MP - MF "src/OpenMPCourseExamples.d" -MT "src/OpenMPCourseExamples.d" -o "src/OpenMPCourseExamples.o" "../src/OpenMPCourseExamples.c" и ссылка на команду "gcc -L/opt/local/lib/gcc48 -fopenmp -o "OpenMPCourseExamples" ./src/OpenMPCourseExamples.o ".

С помощью указанной команды он компилируется без ошибок, но с предупреждением - «предупреждение: неизвестная прагма игнорируется [-Wunknown-pragmas] #pragma omp parallel».

Кроме того, я установил переменную среды в свойствах запуска с помощью OMP_NUM_THREADS = 4. Я запустил программу, скомпилированную с указанным выше предупреждением. Я получаю только «привет (0) мир (0)». У меня создалось впечатление, что я должен начать четыре потока и увидеть другие результаты «hello (1) world (1) hello (2) world (2) hello (3) world (3)» в некотором порядке. Теперь, вот мои следующие вопросы.

  1. Почему я получаю предупреждение #pragma?
  2. Является ли компилятор действительно обнаружением openmp и зданием с openmp?
  3. Если все правильно, почему я не вижу четырех разных потоков?

ответ

1

MacPorts настраивает процесс сборки GCC с --program-suffix=-mp-${major} и, следовательно, все исполняемые файлы компилятора имеют суффикс -mp-4.8. Когда вы вызываете gcc, вы в конечном итоге используете компилятор Apple Clang, который не поддерживает OpenMP и поэтому не распознает опцию -fopenmp и #pragma omp ....

Вы должны сделать следующие изменения в настройках проекта:

  1. Измените команду компилятора для
  2. изменить команду линкер к
  3. Удалить явную спецификацию включают и путей библиотеки поскольку наличие -fopenmp добавляет их автоматически.
+1

Я удалил явную спецификацию путей включения и библиотеки. Я выбрал mp-gcc как компилятор по умолчанию, используя выбор порта --set gcc. Теперь, если я запускаю gcc -version в оболочке, он выбирает только gcc macports. Я изменил компилятор и компоновщик на /opt/local/bin/gcc-mp-4.8 явно в свойствах проекта. В этом случае я получаю ошибку сборки stdio.h не найден. В качестве альтернативы, если я просто использую gcc, я получаю сообщение об ошибке omp.h, поскольку я не удалялся из пути include. Что я должен делать дальше? –

+1

Вы установили инструменты командной строки Xcode с помощью 'xcode-select -install'? Эта команда также устанавливает необходимые файлы include (например, 'stdio.h') в'/usr/include'. –

2

Последние шаги, которые работали для openmp, macports gcc-компилятора, eclipse CDT в mac osx mavericks.

  1. Включить «Сделать ToolChain (s) Preferred» в Eclipse-> Preference-> C/C++ -> Новый мастер проектов C/C++.
  2. sudo port select --list gcc и установить его sudo port select --set gcc с mp-gcc.
  3. Файл-> Новый проект-> Проект C (не C++) и создать приветственный мир.
  4. В Project-> Properties-> C/C++ Build-> Settings-> Настройки инструмента задайте следующее. (a) Компилятор GCC C в /opt/local/bin/gcc-mp-4.8 (b) MAC OSX Linker в /opt/local/bin/gcc-mp-4.8
  5. Создайте проект hello world и убедитесь, он компилируется и запускается успешно.
  6. Включите открытый код mp. Код задан в вопросе этой страницы.
  7. Перейти к еще раз Project-> Properties-> C/C++ Build-> Settings-> Настройки инструмента установите следующее. (a) Компилятор GCC -> Разное add -fopenmp (b) MacOSx Linker-> Разное -fopenmp
  8. Снова создайте код.

Вышеупомянутые этапы работали хорошо для меня.

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