Нет проблем с Qt.
вы не можете иметь разрыв в цикле, который был распараллелен с помощью openMP.
Рассуждение за этим: Допустим, у вас есть петля с 10 итерациями. Теперь вы хотите, чтобы разорвать петлю на итерации 5. Вы говорите,
if (iteration==5)
break;
Теперь приходит к параллельному контексту, вы создали 10 тему, и каждые сделать свои соответствующие итерации параллельно. Поэтому, когда thread5 достигает определенного состояния вы хотите, чтобы все другие темы для
- определить это
- отменить свой выход
- Не обрабатывать больше итераций
- сделать это динамически и для всех различных политик планирования.
как вы можете видеть, это невозможно/практически в большинстве случаев. Следовательно, OpenMP запретил использовать разрыв в параллельном цикле.
Теперь скажите, что вы знаете, что определенное условие для взлома очень редко встречается в вашей петле, и вы чертовски настроены на разрыв в вашем параллельном цикле.
Thread i
Check input condition
If input leads to breaking flag a marker break_loop
******** barrier across all threads *************
if flag break_loop is true
then
discontinue this operation
mark a variable
discontinue all the remaining iterations
endif
do your normal work
Это всего лишь рамка. Вам нужно будет посмотреть на угловые шкафы, замки и т. Д. Для этого вы можете каждый поток проверить свой вход до итерации. Если их входное состояние приводит к разрыву петли, они устанавливают значение con
Nice описание. –
, если он решает ваш вопрос, вы можете принять его :) –
Я написал это неправильно Qt для openMP (название довольно явно) – octoback