Как установить openmp linux

Обновлено: 05.07.2024

Я новичек в параллельных вычислениях. Почитал литературу, там все речь о написании программ под OpenMP, у меня же есть готовая программа, которую можно скомпилировать на OpenMP, однако я не могу, т.к. OpenMP не установлен. Где мне взять готовый дистрибутив OpenMP (система - Linux OpenSuse, есть компилятор GFortran), какие переменные окружения прописывать и т.д. Заранее спасибо!

OpenMP не является отдельным продуктом.
Это стандарт программирования, который может поддержваться или
не поддерживаться компилятором. Gfortan поддерживает.
Опция -fopenmp
По умолчанию задействуются все ядра.
Ручная регулировка выполняется переменной окружения
OMP_NUM_THREADS

Добрый день! Спасибо что отклинулись!
Дело в том, что эта программа имеет setup, который в зависимости от выбора компилятора пишет makefile.inc. Если я выбираю gfortan он пишет
F90="gfortran"
F90_OPTS="-O3 -funroll-loops -ffast-math"
F77=$F90
F77_OPTS=$F90_OPTS
При этом программа компилируется
если выбираю OpenMP он пишет
F90="f90"
F90_OPTS="+Ofast +Oopenmp +DD64"
F77=$F90
F77_OPTS=$F90_OPTS

Программа НЕ компилируется

Поэтому, если не трудно, подскажите как я должен вручную прописать опции, чтобы заработало?
P.S. А переменную окружения OMP_NUM_THREADS я должен сам прописать и до или после компиляции это делать?

Выбрать Вы должны, конечно, gfortran.
В этом случае правильно устанавливаются все переменный.
Единственное, в переменной
F90_OPTS="-O3 -funroll-loops -ffast-math"
не хватает опции -fopenmp
если можно дописать ее руками, то дальше все сработает.
Выбор OpenMP устанавливает опции для какого-то компилятора,
даже не знаю какого. Возможно, Absoft.
Переменная OMP_NUM_THREADS на компиляцию
ни как не влияет. Она устанавливается перед
запуском программы. Это делается либо в .profile или .bashrc
или непосредственно в командной строке
OMP_NUM_THREADS=N ./exe_prog
Еще раз повторю, этой переменной можно только
уменьшить количество ядер. По умолчанию захватываются все ядра.
в узле. Зделал все, как Вы сказали. Программа скомпилировалась, правда, по-моему, быстрее работать не стала. Кстати, а как убедиться в том, что считают столько-то процессоров? Может надо её как-то по-особому запускать? P.S. Может быть, дело в не самой новой версии gfortran (OpenSuse где-то двухлетней давности). В gfortran OpenMP поддерживается, по-моему, с версии 4.х.х
При этом версии 4.1.х очень кривые.
Что касается, как убедиться, что задействованы несколько ядер.
Запустите параллельно с программой команду top и смотрите
загрузку CPU -. она должна быть более 100%. В идеале 100*n
Что касается ускорения, то не факт, что многонитевая программа
будет работать быстрее обычной. Все зависит от алгоритма и
качества распараллеливания.Кроме того, нужно корректно измерять
время. Стандартные процедуры время умножают на количество ядер.
Наиболее надежно смотрить по секундамеру Все правильно Вы сказали! С секундомером действительно получается почти в два раза быстрее Да и загрузка ЦП под 200% (пускал на двухядерной машине). Так что большое Вам спасибо за помощь!

Часовой пояс: UTC + 4 часа [ Летнее время ]

Кто сейчас на конференции

Читайте также: