PaddlePaddle / FlyCV

FlyCV is a high-performance library for processing computer visual tasks.
Apache License 2.0
580 stars 59 forks source link

多线程稳定崩溃 #190

Closed rysngl closed 1 year ago

rysngl commented 1 year ago

开发者您好:

我在使用flycv代码替换opencv实现数据预处理函数时发现,若同时开多个推理线程(包括预处理、推理和后处理),替换flycv后的代码在flycv线程池部分稳定发生崩溃,只有在预处理函数前后加入线程锁才能稳定运行。但opencv不论开几个线程都不会发生这样的现象。烦请排查。 还想请教一下目前imdecode是否无法读取大于4000像素的图片,提示不支持的格式。

TomasRan commented 1 year ago

请问多线程调用了哪些方法?

rysngl commented 1 year ago

包括: normalize_to_submean_to_reorder resize copy_make_border split_to_memcpy(观察到崩溃) convert_to(观察到崩溃)

rysngl commented 1 year ago

运行cpu为鲲鹏920

TomasRan commented 1 year ago

这边验证上述几个方法的多线程调用没有出现crash现象。另外convert_to是mat对象的成员方法,这个是在多个线程中调用同一个mat对象的convert_to还是不同的?另外方便的话可以贴一下调用代码

rysngl commented 1 year ago

这边验证上述几个方法的多线程调用没有出现crash现象。另外convert_to是mat对象的成员方法,这个是在多个线程中调用同一个mat对象的convert_to还是不同的?另外方便的话可以贴一下调用代码

不同的mat对象。每个线程从读图开始到返回推理结果的全流程都是独立的。

下面是一次convert_to多线程报错栈的顶部 Snipaste_2023-04-12_14-55-10

下面是convert_to这部分的函数

ifdef USE_FLYCV

bool Convert::Run(fcv::Mat im) { if (dtype_ == "float") { fcv::Mat target_img; im->convert_to(target_img, fcv::FCVImageType::PKG_BGR_F32); im = target_img; } return true; }

endif

我稍后会尝试写一个最小复现代码

rysngl commented 1 year ago

最新释出的1.2.0预编译版本经测试已经解决了所有我遇到的多线程崩溃问题,感谢开发者,issue关闭。