【发布时间】:2015-02-19 22:21:23
【问题描述】:
我正在编写一个程序来将(使用opencv)图像转换为所需的大小,所有这些都由命令行参数给出。我将 pthreads 用于多线程,但在我的测试中,单线程程序的性能与多线程程序非常接近。
这实际上是我的第二个代码设计,首先我先读取所有图像,然后将它们分配给线程。它太消耗内存了,我改变了它。
我是否必须使用 fork() 或更与流程相关的东西才能使其以有效的并行方式运行?非常感谢您的建议!
由于代码太长,这里放不下,我把它放在 paste.ubuntu.com 上。
主程序将 argv 参数正确地传递给转换函数。
【问题讨论】:
-
我们不会通过链接来筛选大量代码。将您的代码简化为本质(即minimal test-case),然后将其发布在此处。
-
您的线程是否有机会共享一个瓶颈资源?许多程序都受 I/O 限制,您的硬盘不会因为您的程序是多线程的而变得更快。
-
看起来您正在线程上进行转换,但打开图像并在初始线程上分配所有内存。你确定转换是昂贵的部分吗?你有没有分析过这些?
-
OT,不熟悉 OpenCV,我冒着很大的风险提到这一点,但
thread_original_images[i] = cvLoadImage(file_address, 0)超出了您的首次调用逻辑,我看不出任何表明分配已被释放的信息,包括在线程 proc 中,所以除非我读错了,否则你有一个 helluva 内存泄漏。 -
@user3629249 ...或者如果你有一个多处理器系统,就像大多数现代系统一样。
标签: c multithreading performance opencv