gpt4 book ai didi

c++ - 使用 OpenMP 在程序中处理 GUI 线程

转载 作者:太空狗 更新时间:2023-10-29 23:19:59 25 4
gpt4 key购买 nike

我有一个 C++ 程序,它使用 OpenMP 并行执行一些冗长的计算。现在该程序还必须响应用户输入并更新一些图形。到目前为止,我一直从主/GUI 线程开始我的计算,小心地平衡工作负载,这样既不会太短以掩盖 OpenMP 线程开销,也不会太长导致 GUI 变得无响应。

很明显,我想通过同时运行所有内容来解决这个问题。据我所知,OpenMP 2.5 没有为此提供良好的机制。我认为它不适用于此类问题。我也不想将整个核心专用于 GUI 线程,它只需要 <10% 的核心来完成它的工作。

我想也许将计算分离到一个单独的 pthread 中来启动并行结构是解决这个问题的好方法。我对此进行了编码,但从 pthread 调用时 OpenMP 崩溃,类似于此错误:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36242 .请注意,我并没有尝试一次从多个线程启动并行构造,在整个程序中,OpenMP 仅在一个 pthread 中使用。

看来我既不能使用 OpenMP 来同时安排我的 GUI 工作,也不能使用 pthreads 让并行结构同时运行。我正在考虑在一个单独的线程中处理我的 GUI 工作,但在我的情况下这恰好相当丑陋,并且由于我使用的各种库而实际上可能无法工作。

这里的教科书解决方案是什么?我确信其他人在需要同时处理 GUI/网络等的程序中使用了 OpenMP,但我无法使用 Google 或 OpenMP 论坛找到任何信息。

谢谢!

最佳答案

没有教科书式的解法。 OpenMP 的教科书应用程序是非交互式程序,它们读取输入文件、进行大量计算并写入输出文件,所有这些都使用相同大小的线程池 ~ #CPUs 在你的 super 计算机中。它不是为交互和计算代码的并发执行而设计的,我认为规范不保证与任何线程库的互操作。

撇开理论不谈,您似乎在 OpenMP 的 GCC 实现中遇到了错误。请向 GCC 维护者提交错误报告,暂时寻找不同的编译器或在单独的进程中运行您的 GUI 代码,通过某种 IPC 机制与 OpenMP 程序通信。 (例如,套接字上的异步 I/O。)

关于c++ - 使用 OpenMP 在程序中处理 GUI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com