opencv多线程同时读图的效率不会提高?

qyjiang19 2015-07-29 10:04:58
测试机器是2个CPU,共12核24线程,现在有500张本地图片(放固态硬盘上),需要尽快的把这500张图片读到一个全局的长度为500的IplImage*数组里面,就用_beginthreadex()的方法开多线程,每个线程平均分配一定任务的图片数用cvLoadImage()去读图,现在就是发现开到10个线程左右总的读图效率都基本不会再提高了,甚至有所下降,想请问一下各位大神瓶颈有可能出现在哪里呢

开发环境,vs2010,OpenCV2.3.1

...全文
754 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-07-29
  • 打赏
  • 举报
回复
在文件大小相同的前提下: 读刚读过的文件比头次读没读过的文件快 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快 读没有磁盘碎片的文件比读有磁盘碎片的文件快 读文件不处理比边读边处理快 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上) 读固态硬盘上的文件比读普通硬盘上的文件快
dustpg 2015-07-29
  • 打赏
  • 举报
回复
不用想都知道瓶颈肯定在硬盘上啊,开了10个线程才到瓶颈不错了,目测机械硬盘2~3个就到了
qyjiang19 2015-07-29
  • 打赏
  • 举报
回复
引用 5 楼 dustpg 的回复:
[quote=引用 3 楼 qyjiang19 的回复:] [quote=引用 1 楼 dustpg 的回复:] 不用想都知道瓶颈肯定在硬盘上啊,开了10个线程才到瓶颈不错了,目测机械硬盘2~3个就到了
但测试发现无论是机械硬盘还是固态硬盘,相同线程数下的处理能力是基本相同的,瓶颈出现的地方也是基本相同的,那这该怎么解释呢[/quote] 我不大相信,时间主要就消耗在读取+解码上.相对于从硬盘读取文件, 解码消耗的时间基本忽略不计,除非 解码算法太高级,或者写得太烂了。假如真的如此,基本可以解释你的结果。 CPU繁忙时,超线程对性能基本没怎么提升,所以开12个线程就应该是最快了[/quote] 我也不相信,所以才拿出来请大家指教,读图用的是OpenCV第三方库,烂不烂我不知道,反正大家都用他。开20+线程时,CPU占用率都不到100,大概是60左右
dustpg 2015-07-29
  • 打赏
  • 举报
回复
引用 3 楼 qyjiang19 的回复:
[quote=引用 1 楼 dustpg 的回复:] 不用想都知道瓶颈肯定在硬盘上啊,开了10个线程才到瓶颈不错了,目测机械硬盘2~3个就到了
但测试发现无论是机械硬盘还是固态硬盘,相同线程数下的处理能力是基本相同的,瓶颈出现的地方也是基本相同的,那这该怎么解释呢[/quote] 我不大相信,时间主要就消耗在读取+解码上.相对于从硬盘读取文件, 解码消耗的时间基本忽略不计,除非 解码算法太高级,或者写得太烂了。假如真的如此,基本可以解释你的结果。 CPU繁忙时,超线程对性能基本没怎么提升,所以开12个线程就应该是最快了
赵4老师 2015-07-29
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
qyjiang19 2015-07-29
  • 打赏
  • 举报
回复
引用 1 楼 dustpg 的回复:
不用想都知道瓶颈肯定在硬盘上啊,开了10个线程才到瓶颈不错了,目测机械硬盘2~3个就到了
但测试发现无论是机械硬盘还是固态硬盘,相同线程数下的处理能力是基本相同的,瓶颈出现的地方也是基本相同的,那这该怎么解释呢

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧