LINUX.ORG.RU

Большое приложение на QT - проблема с threadprivate (((


0

3

Уважаемые коллеги! Помогите со следующим вопросом....

Долго и упорно переписывал большой проект с Delphi на С++

(использую QT), переписал, отладил...

Пришло время распараллеливания... Решил использовать OpenMP,

чтобы сильно не «курочить» программу - в ней десятки программных модулей,

сотни глобальных переменных - писали разные люди (математики) собирали код

лет 15...

И вот столкнулся со следующим при распараллеливании замого «напряжённого» участка

потребовалось некоторые глобальные переменные сделать как threadprivate,

они через кучу ссылок (через разные модули), в h-нике объявлены как extern.

Так вот - в доках нарыл, что директиву threadprivate необходимо применять в каждом

юните, где используются оные глобальные перменные, и получается, что компилятор

ругается, если эта директива применяется в тех юнитах, в которых подключен h-ник, в котором объявлены (extern-ном) эти глобальные переменные.

Как быть?...

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

Qt Qt Qt Qt Qt Qt Qt Qt

anonymous
()
Ответ на: комментарий от anonymous

Ночь спать не могу, как такое увижу.

anonymous
()
Ответ на: комментарий от red_eyed_peguin

На счёт написать в хидере

Если в хидере написать #pragma omp threadprivate(varname), то выдаётся ошибка типа «varname не является статическим или глобальным объектом». Т.е. компилятор, если это именно ОБЪЯВЛЕНИЕ объекта, считает, что его нет.

AndrewMT
() автор топика
Ответ на: Дело на делать от AndrewMT

Мистер Умник даже не понял, о чём речь. Qt прекрасный инструмент, а вот QuickTime вообще непонятно каким боком здесь.

anonymous
()
Ответ на: комментарий от dt1

Спасибо, сейчас гляну на багу

))))))) Спасибо, сейчас гляну на багу....

AndrewMT
() автор топика
Ответ на: комментарий от red_eyed_peguin

Тут дело в большом количестве глобальных переменных... Опасаюсь, что потом, при агрегации после параллельного региона проблемы будут.... И дело принципа ))) Но как вариант приму )))))

AndrewMT
() автор топика
Ответ на: комментарий от dt1

Есть подозрение

Есть подозрение, что именно эта бага )) Спасибо! Проверю...

AndrewMT
() автор топика
Ответ на: Не могу найти патч от AndrewMT

а зачем два раза писать одно и то же?

а зачем два раза писать одно и то же?

nanoolinux ★★★★
()
Ответ на: комментарий от dt1

Что тут скажешь...

Я ведь делаю кросс-платформенное приложение, у нас в кластере компы и виндой, и с линуксом... Пока пользуюсь макрософтовским компилятором....

AndrewMT
() автор топика
Ответ на: Что тут скажешь... от AndrewMT

Пока пользуюсь макрософтовским компилятором....

пользуйтесь другим компилятором

RedPossum ★★★★★
()
Ответ на: комментарий от r2d2

А если вы тут такой весь здоровый, то что в больнице^W^W на ЛОРе забыли?

Pavval ★★★★★
()
Ответ на: Что тут скажешь... от AndrewMT

Ты имел неосторожность наступить, как минимум, на две больных мозоли местных обитателей. Правильное написание Qt имеет сакральный смысл для многих. Да и лучше не спрашивать о произношении. Потом, такой облом с компилятором. Можно сказать, фиаско.

Теперь по теме. Не знаю, что такое threadprivate, но разве глобальные переменные и параллельность не являются недругами?

dave ★★★★★
()
Ответ на: Что тут скажешь... от AndrewMT

Но ты еще можешь исправиться, если признаешься, что испытываешь душевные недуги от самой мысли использовать компилятор такой недостойной фирмы, как Микрософт. Некоторые тут выражаются проще, и прямо говорят, что приходится «пачкаться», используя msvc. Можно найти немало сторонников.

А твой код можно откпомпилировать с помощью gcc? Тот баг, что тебе приводили выше, относился к gcc.

dave ★★★★★
()
Ответ на: комментарий от dave

gcc

Да, думаю, код откомпилировать с помощью gcc можно, только я не знаю, будет ли программа 64-битной и работать под Windows?? Мне ведь необходимо кроссплатформенное ПО....

AndrewMT
() автор топика
Ответ на: комментарий от dave

Душевные муки на счёт компилятора от ms, признаюсь, испытываю ))))) Да, глобальные переменные и параллельность - опасные соседи, но тут ситуация заставляет....

AndrewMT
() автор топика
Ответ на: комментарий от dave

Погуглил немного. Результаты необнадеживающие

Спасибо! Н-да..... По крайней мере, пока доделаю софт (с такими вылезающими проблемами), может, ситуация изменится?? ))))))))))))))))))))))))))))))))))))) Но чувство досады с этим threadprivate преследует постоянно )))

AndrewMT
() автор топика
Ответ на: комментарий от dave

Еще такой вопрос

Вопрос законный... Надо попробывать....

AndrewMT
() автор топика
Ответ на: комментарий от dave

MinGW

Хорошая мысль! Я, видимо, отстал от жизни, не знал, что есть 64-битный MinGW, раньше пользовался 32-битным MinGW. Так и сделаю. Спасибо за совет! ))

AndrewMT
() автор топика
Ответ на: комментарий от dave

Некоторые результаты

Докладываю ))) о некоторых результатах исследований моего больного вопроса.

На другом компе, где у меня установлен Qt с MinGW 32-bit долго и упорно активировал OpenMP (другая история со скачиванием библиотек и т.п.)... И вот - этого бага с threadprivate НЕТ! Действительно был исправлен в 2005 году.

Теперь буду пересобирать Qt с MinGW 64-bit, не факт, что это получится - официально Nokia не поддерживает Qt с MinGW 64-bit, насколько я знаю...

Может кто проделывал это????

AndrewMT
() автор топика
Ответ на: Что тут скажешь... от AndrewMT

Пока пользуюсь макрософтовским компилятором

Подскажете ключики с помощью которых вы ELF файлы собираете?

P.S. Ошибка при сборке gcc воспроизводится?

trex6 ★★★★★
()
Ответ на: комментарий от trex6

??? Никаких ключей и не требовалось... Или я не понял чего-то... А ошибки как раз поссле сборки gcc нет, как и говорил народ - в 2005 году GNU этот баг исправил. Один микрософ ))))) как всегда делает вид, что всё ОК )))

AndrewMT
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.