【问题标题】:Multithreading C not being faster多线程 C 没有更快
【发布时间】:2015-02-19 22:21:23
【问题描述】:

我正在编写一个程序来将(使用opencv)图像转换为所需的大小,所有这些都由命令行参数给出。我将 pthreads 用于多线程,但在我的测试中,单线程程序的性能与多线程程序非常接近。

这实际上是我的第二个代码设计,首先我先读取所有图像,然后将它们分配给线程。它太消耗内存了,我改变了它。

我是否必须使用 fork() 或更与流程相关的东西才能使其以有效的并行方式运行?非常感谢您的建议!

由于代码太长,这里放不下,我把它放在 paste.ubuntu.com 上。

主程序将 argv 参数正确地传递给转换函数。

http://paste.ubuntu.com/10314628/

【问题讨论】:

  • 我们不会通过链接来筛选大量代码。将您的代码简化为本质(即minimal test-case),然后将其发布在此处。
  • 您的线程是否有机会共享一个瓶颈资源?许多程序都受 I/O 限制,您的硬盘不会因为您的程序是多线程的而变得更快。
  • 看起来您正在线程上进行转换,但打开图像并在初始线程上分配所有内存。你确定转换是昂贵的部分吗?你有没有分析过这些?
  • OT,不熟悉 OpenCV,我冒着很大的风险提到这一点,但 thread_original_images[i] = cvLoadImage(file_address, 0) 超出了您的首次调用逻辑,我看不出任何表明分配已被释放的信息,包括在线程 proc 中,所以除非我读错了,否则你有一个 helluva 内存泄漏。
  • @user3629249 ...或者如果你有一个多处理器系统,就像大多数现代系统一样。

标签: c multithreading performance opencv


【解决方案1】:

感谢所有建议,我想我解决了所有问题,现在使用多线程速度提高了 2 倍以上!在@jeffamaphone 询问转换是否是昂贵的部分后,我尝试在线程内移动加载图像,程序立即变得更快。我正在使用 cvReleaseImage() 管理内存,它也运行良好。

这是新代码:http://paste.ubuntu.com/10345572/

非常感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2023-01-14
    • 2013-06-12
    • 2021-10-11
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多