我有一个C++程序,它使用OpenMP并行执行一些冗长的计算。现在该程序还必须响应用户输入并更新一些图形。到目前为止,我一直从主/ GUI线程开始我的计算,仔细平衡工作负载,以便既不掩盖OpenMP线程开销,也不会长时间地使GUI不响应。在使用OpenMP的程序中处理GUI线程
显然我想通过同时运行所有东西来解决这个问题。据我所知,OpenMP 2.5不提供这样做的好机制。我认为这不是针对这种类型的问题。我也不想将整个内核专用于GUI线程,它只需要其中一个的10%用于其工作。
我想也许分开计算成一个单独的pthread启动并行构造将是解决这个问题的好方法。我编写了这个代码,但是从pthread调用OpenMP时崩溃,类似于这个bug:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36242。请注意,我并未尝试从多个线程同时启动并行结构,OpenMP仅在整个程序的一个pthread中使用。
看来我既不能使用OpenMP来同时调度我的GUI工作,也不能使用pthreads来让并行结构同时运行。我想在一个单独的线程中处理我的GUI工作,但在我的情况下这种情况相当丑陋,实际上可能因为我使用的各种库而不起作用。
这是什么教科书解决方案?我确信其他人已经在需要同时处理GUI /网络等的程序中使用OpenMP,但是我还没有能够使用Google或OpenMP论坛找到任何信息。
谢谢!
您是否必须使用OpenMP?您可以尝试使用pthread来处理所有事情,并且可以很容易地创建“显示”线程和“计算”线程。 – 2011-03-12 00:39:21
当然,没有人严格*使用OpenMP,但我宁愿解决这个问题,并学习一些放弃OpenMP并将其替换为更详细的手动管理线程池的代码 – ASD1 2011-03-12 00:45:29