【发布时间】:2014-02-20 08:20:37
【问题描述】:
我有一个带有 opencv 库的 c++ 程序,该程序将图像作为输入并执行姿势估计、颜色检测、phog。当我从命令行运行这个程序时,大约需要 4-5 秒才能完成。它需要大约 60% 的 cpu。当我尝试同时从两个不同的命令行窗口运行相同的程序时,该过程大约需要 10-15 秒才能完成,并且两个过程几乎同时完成。 CPU 使用率达到 100%。
我有一个使用 exec() 命令调用这个 c++ exe 的网站。因此,当两个用户尝试上传图像并运行时,正如我上面在命令行中解释的那样,它需要更多时间。这是因为 c++ 程序涉及大量计算并且 CPU 达到 100% 会变慢吗?但是我读到 CPU 达到 100% 并不是一件坏事,因为计算机正在使用其全部容量来运行程序。那么这是因为我的 c++ 程序还是与我的服务器(计算机)设置有关?这可能不是 apache 服务器问题,因为当我尝试从命令行运行它时,它也会变慢。我正在使用四核处理器,当我尝试同时运行相同的进程时,所有 4 个 CPU 都达到 100%,所以我认为它分布在所有处理器中。所以我还有几个问题:
1) 这可以通过在我的 c++ 代码中使用多线程来解决吗?目前我没有使用它,但多线程会使 c++ 代码的计算成本更高并增加 CPU 使用率(如果这是问题的话)。
2) 速度变慢的原因是什么?进程是否在队列中,每个进程只运行一定时间,并在两个进程之间切换?
3)如果这是因为它涉及到高计算,如果我将一些函数更改为opencv gpu函数会有所帮助吗?
4) 有什么办法可以解决这个问题吗?
我在运行一个进程并同时运行两次同一个进程时插入了top的结果:
版本5是进程,运行一次 两个版本5同时运行
CPU 信息:
提前致谢。
【问题讨论】:
-
没有真正看到你的代码,很难确切地说出代码在做什么......但似乎有点可疑。
-
了解您的 CPU 是什么也很有帮助。例如,英特尔超线程处理器的行为与具有“四个真实内核”的处理器不同。
-
我已经添加了我的 CPU 详细信息。
-
当Version5运行一次循环运行时表现如何
-
我想你还没有听说过复制/粘贴文本?
标签: c++ multithreading opencv ubuntu command-line