Обработка потока GUI в программе с использованием OpenMP - PullRequest
3 голосов
/ 12 марта 2011

У меня есть программа на C ++, которая выполняет некоторые длительные вычисления параллельно с использованием OpenMP.Теперь эта программа также должна реагировать на ввод пользователя и обновлять некоторые графики.До сих пор я начинал свои вычисления из основного потока / потока графического интерфейса, тщательно балансируя рабочую нагрузку, чтобы не было ни короткого замыкания, ни маскирования накладных расходов на потоки OpenMP, ни слишком длинного, чтобы графический интерфейс пользователя не отвечал.

Очевидно, яЯ хотел бы исправить это, запустив все одновременно.Насколько я могу судить, OpenMP 2.5 не обеспечивает хороший механизм для этого.Я предполагаю, что это не было предназначено для этого типа проблемы.Я также не хотел бы выделять все ядро ​​для потока GUI, ему просто нужно <10% одного для своей работы. </p>

Я подумал, что, возможно, разделение вычислений на отдельный pthread, который запускает параллельные конструкции, будетбыть хорошим способом решения этого.Я закодировал это, но при вызове из pthread произошел сбой OpenMP, похожий на эту ошибку: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36242.Обратите внимание, что я не пытался запускать параллельные конструкции из более чем одного потока одновременно, OpenMP использовался только в одном pthread во всей программе.

Похоже, я не могу использовать OpenMP для планирования своей работы с графическим интерфейсом одновременно илииспользуйте pthreads для параллельного запуска параллельных конструкций.Я думал о том, чтобы просто обработать свою работу с графическим интерфейсом в отдельном потоке, но в моем случае это выглядит довольно уродливо и может не работать из-за различных библиотек, которые я использую.

Какое решение для учебника здесь?Я уверен, что другие использовали OpenMP в программе, которая должна одновременно работать с графическим интерфейсом пользователя / сетью и т. Д., Но я не смог найти никакой информации с помощью Google или форума OpenMP.

Спасибо!

1 Ответ

0 голосов
/ 12 марта 2011

Нет учебника. Учебное приложение для OpenMP - это неинтерактивные программы, которые читают входные файлы, выполняют сложные вычисления и записывают выходные файлы, используя один и тот же пул потоков размером ~ #CPU в вашем суперкомпьютере. Он не был разработан для одновременного выполнения интерактивного и вычислительного кода, и я не думаю, что спецификация гарантирует взаимодействие с какой-либо библиотекой потоков.

Оставляя теорию в стороне, вы, похоже, столкнулись с ошибкой в ​​реализации OpenMP в GCC. Пожалуйста, отправьте отчет об ошибке сопровождающим GCC и на данный момент либо найдите другой компилятор, либо запустите код GUI в отдельном процессе, связываясь с программой OpenMP через некоторый механизм IPC. (Например, асинхронный ввод / вывод через сокеты.)

...