Russian Qt Forum
Ноябрь 04, 2024, 23:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Как в Qt Creator включить поддержку OpenMP?  (Прочитано 62960 раз)
Yadershik
Гость
« : Январь 17, 2010, 17:13 »

Всем привет!

Скажите поддерживает ли minGW библиотеку openMP? вообще в папке minGW  есть opm.h и на сайте openmp написано что компилятор gcc (4.3.2) поддерживает данную библиотеку. А я как понимаю minGW это версия gcc под винду.

Если да, то как включить поддержку? На том же сайте написано "Compile with -fopenmp", но где прописать это мне не понятно. Может в файле *.pro проекта?

У меня Qt Creator 4.6.0 и виста.

P.S. VC2008 это сделать очень просто.
Записан
crackedmind
Гость
« Ответ #1 : Январь 18, 2010, 08:20 »

example.cpp
Код:
#include <omp.h>
#include <stdio.h>

int main(int argc, char **argv)
{
#if defined(_OPENMP)
printf("Compiled by an OpenMP-compliant implementation.\n");
printf("The result of omp_get_num_threads %i\n", omp_get_num_threads());
#endif

    return 0;
}

example.pro
Код:
CONFIG += console
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
QMAKE_LFLAGS += -fopenmp
SOURCES += example.cpp
« Последнее редактирование: Январь 18, 2010, 10:26 от crackedmind » Записан
zlogic
Гость
« Ответ #2 : Январь 20, 2010, 23:33 »

В свойствах проекта нужно дописать (там, где QMake build arguments)

"QMAKE_LIBS+=-static -lgomp -lpthread" "QMAKE_CXXFLAGS+=-msse3 -fopenmp" QMAKE_CXXFLAGS+=-U_WIN32

Только почему-то у меня при вызове omp_get_num_threads() и вообще любых OpenMP функций не из main, а из потока QThread программа выпадает с ошибкой Segmentation Fault.
Записан
Yadershik
Гость
« Ответ #3 : Январь 21, 2010, 00:44 »

to zlogic
Огромное спасибо!!!! все работает!! Улыбающийся И настроение улучилось больше чем прирост скорости счета Улыбающийся Все таки человек очень нелинейная система  Улыбающийся

to crackedmind
Спасибо за содействие, проделал данную процедуру, но она не работает, но зато я понял куда прописывать команды написанные zlogic!
Записан
zlogic
Гость
« Ответ #4 : Январь 21, 2010, 23:11 »

Я рад Улыбающийся

На самом деле можно сократить до
"QMAKE_LIBS+=-static -lgomp -lpthread" "QMAKE_CXXFLAGS+=-fopenmp"

Если будет выпадать с segmentation fault, это известный баг в gcc, описание тут:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42616
Пока что не исправлено Грустный(
Записан
maxwellcut
Гость
« Ответ #5 : Февраль 24, 2010, 00:21 »

Может кто-нибудь, пожалуйста, подсказать, как в qt посмотреть версию поддерживаемой OpenMP или же можете просто написать ее?
Записан
zlogic
Гость
« Ответ #6 : Февраль 24, 2010, 00:24 »

Там в качестве компилятора gcc 4.4.0, а он в свою очередь поддерживает OpenMP 3.0
Записан
maxwellcut
Гость
« Ответ #7 : Февраль 24, 2010, 15:38 »

В свойствах проекта нужно дописать (там, где QMake build arguments)

"QMAKE_LIBS+=-static -lgomp -lpthread" "QMAKE_CXXFLAGS+=-msse3 -fopenmp" QMAKE_CXXFLAGS+=-U_WIN32

Только почему-то у меня при вызове omp_get_num_threads() и вообще любых OpenMP функций не из main, а из потока QThread программа выпадает с ошибкой Segmentation Fault.
А вот я что-то не пойму, куда вставлять этот код.
Скриншот: http://slil.ru/28698022
Если пишу в кавычках - куда бы ни написал, никакой ошибки не возникает, но и OpenMP не работает.
Если пишу в Дополнительные параметры, то возникает ошибка
"***Unknown option -lgomp"
Если пишу в Параметры make, то возникает ошибка
"mingw32-make: openmp: No such file or directory
mingw32-make: *** No rule to make target `openmp'. Stop."
Записан
zlogic
Гость
« Ответ #8 : Февраль 24, 2010, 17:33 »

Кавычки обязательны, нужно писать все параметры в верхнюю строчку (Дополнительные Параметры во вкладке QMake).
И на скриншоте параметры make не обведены, но на самом деле там ничего не должно быть.
А как вообще определяется, что openmp не работает?
Записан
maxwellcut
Гость
« Ответ #9 : Февраль 24, 2010, 23:15 »

А как вообще определяется, что openmp не работает?
Я пытался проверить следующим образом:
#if defined(_OPENMP)
   printf("Compiled by an OpenMP-compliant implementation.\n");
   printf("The result of omp_get_num_threads %i\n", omp_get_num_threads());
#endif
и ни в каком случае это условие не срабатывало, хотя проект компилится и ошибок нет
« Последнее редактирование: Февраль 24, 2010, 23:19 от maxwellcut » Записан
zlogic
Гость
« Ответ #10 : Февраль 24, 2010, 23:27 »

А как вообще определяется, что openmp не работает?
Я пытался проверить следующим образом:
#if defined(_OPENMP)
   printf("Compiled by an OpenMP-compliant implementation.\n");
   printf("The result of omp_get_num_threads %i\n", omp_get_num_threads());
#endif
и ни в каком случае это условие не срабатывало, хотя проект компилится и ошибок нет

Хм, странно, у меня нормально работает
Записан
maxwellcut
Гость
« Ответ #11 : Март 14, 2010, 21:42 »

А у кого-нибудь было такое, что после подключения OpenMP и прописывание #pragma omp parallel for программа компилируется, но после запуска сразу же завершает работу с кодом -1073741515? Я в интернете не нашел расшифровку этой ошибки. Если кто встречался, подскажите что делать
« Последнее редактирование: Март 14, 2010, 21:50 от maxwellcut » Записан
zlogic
Гость
« Ответ #12 : Март 14, 2010, 21:50 »

А у кого-нибудь было такое, что программа компилируется, по после запуска сразу же завершает работу с кодом -1073741515? Я в интернете не нашел расшифровку этой ошибки. Если кто встречался, подскажите что делать

Там в сообщении где-нибудь есть sigsegv, segmentation fault, NULL или нечто подобное? Если есть - поздравляю, это не исправленный баг gcc.
Если нет, скорее всего в директории, откуда делается запуск, не хватает dll, должны быть
libgcc_s_dw2-1.dll
pthreadGC2.dll
и возможно
mingwm10.dll
Записан
maxwellcut
Гость
« Ответ #13 : Март 14, 2010, 21:53 »

Не, ничего такого нет. Просто пишет "Запускается приложение test.exe... test.exe завершился с кодом -1073741515" А где взять libgcc_s_dw2-1.dll?
Записан
zlogic
Гость
« Ответ #14 : Март 14, 2010, 21:54 »

А где взять libgcc_s_dw2-1.dll?

C:\Qt\версия_qt\mingw\bin
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.108 секунд. Запросов: 20.