Multithreading 使用多线程加载多个模型
我有180个SVM模型要同时运行。 目前,我在开始时将模型加载到一个数组中。 然后当我需要运行模型时,我使用pthread创建180个线程, 然后每个线程获取指向每个模型的指针,并进行一些计算 我担心的是,每次我想做一些计算时创建180个线程可能会产生严重的开销(还有很多计算要做)。 所以我想的是,在开始时将SVM模型加载到180个线程中,每次我想做一些计算时都重用它们 我的想法可行吗?将不同的模型加载到每个线程并同时使用所有线程? 我考虑过线程池,但我不认为这是一个典型的线程池用例。Multithreading 使用多线程加载多个模型,multithreading,pthreads,threadpool,Multithreading,Pthreads,Threadpool,我有180个SVM模型要同时运行。 目前,我在开始时将模型加载到一个数组中。 然后当我需要运行模型时,我使用pthread创建180个线程, 然后每个线程获取指向每个模型的指针,并进行一些计算 我担心的是,每次我想做一些计算时创建180个线程可能会产生严重的开销(还有很多计算要做)。 所以我想的是,在开始时将SVM模型加载到180个线程中,每次我想做一些计算时都重用它们 我的想法可行吗?将不同的模型加载到每个线程并同时使用所有线程? 我考虑过线程池,但我不认为这是一个典型的线程池用例。 我希望你
我希望你能给我任何建议。谢谢。除非有180个CPU可供使用,否则不能同时运行它们。否则,在线程之间切换会浪费大量精力,而线程之间会相互争斗以取得进展 更好的方法可能是创建接近可用CPU或内核数量的线程,并将各个模型从队列中分发给线程 假设您有8个内核希望用于此。创建8个“worker”线程,让每个线程从180个队列中挑选一个线程并处理它。当任何工作线程完成时,它会对上面180线程场景中的结果执行任何操作,并从队列中获取下一个SVM模型。继续此操作,直到处理完所有180个模型
它可能需要更少的挂钟时间来完成,并且几乎可以肯定,与一次180个线程相比,系统上的资源负载更少。设置好此设置后,可以对运行的工作线程数进行实验,以确定池大小的最佳点。确定它是可行的-为什么不可行?在你的计算中循环一段时间,在顶部加上一些合适的信号,应该可以。如果您可以避免持续创建/终止/销毁180个线程,那就太好了!不确定线程池问题-如果其中任何线程进行阻塞调用,180个线程都可以,但是如果它们是CPU密集型的,您可能需要尝试任务/池解决方案。谢谢您的回复!!我的任务实际上是CPU密集型的,所以我用“threadpool.sourceforge.net”做了一些测试。但是性能并不比使用pthread好多少。我想既然boost::thread是pthread的包装器,就性能而言就不会有任何“伟大”的改进。我现在计划测试OpenMP。如果这不起作用,我还不如继续使用pthread。谢谢你的提示!!实际上,我已经用上面提到的线程池方案尝试过了。我使用的是Xeon 12核机器,所以12个“工作”线程自然会给我最好的结果。然后我尝试使用OpenMP,得到了比12“工作者”线程方案略好的结果(将挂钟时间从256秒减少到249秒)。我想OpenMP是一个不错的选择,因为它更容易实现。