我有180个SVM模型要并发运行。目前,我在开始时将模型加载到数组中。然后,当我需要运行模型时,我使用pthread创建180个线程,然后每个线程获取指向每个模型的指针,并进行一些计算。
我担心的是,每次我想做一些计算时创建180个线程可能会产生严重的开销(而且有很多计算要做)。所以我在想的是,在一开始将SVM模型加载到180个线程中,并在每次我想做一些计算时重用它们。
我的想法可行吗?将不同的模型加载到每个线程中,并同时使用所有线程?我考虑过线程池,但我不认为这是一个典型的线程池用例。如果您能给我任何建议,我将不胜感激。谢谢。
发布于 2013-03-12 16:52:40
除非您有180个CPU可以使用,否则您不能真正地并发运行它们。否则,当线程之间相互竞争以取得进展时,您将浪费大量的能量在线程之间切换。
一种更好的方法可能是创建接近可用的CPU或核心数量的线程数量,并将单个模型从队列分发到线程。
假设你有8个内核,你想用来做这个。创建8个"worker“线程,让每个线程从180个队列中挑选一个并在其上工作。当任何工作线程完成时,它将对上面的180线程场景中的结果执行任何操作,并从队列中获取下一个SVM模型。让这种情况继续下去,直到所有180个模型都处理完毕。
它可能会花费更少的挂钟时间来完成,并且几乎可以肯定的是,与一次性使用180个线程相比,它对系统的资源负载更少。完成此设置后,您可以试验运行的工作线程的数量,以确定池大小的最佳点。
https://stackoverflow.com/questions/14229493
复制相似问题