1

我有 180 个 SVM 模型要同时运行。目前我在开始时将模型加载到数组中。然后当我需要运行模型时,我使用 pthread 创建 180 个线程,然后每个线程获取指向每个模型的指针,并进行一些计算。

我担心的是,每次我想做一些计算时创建 180 个线程可能会产生严重的开销(并且有很多计算要做)。所以我想的是,一开始就将 SVM 模型加载到 180 个线程中,并在每次我想做一些计算时重用它们。

我的想法完全可行吗?将不同的模型加载到每个线程中并同时使用所有线程?我考虑过线程池,但我认为这不是典型的线程池用例。我将不胜感激任何建议。谢谢。

4

1 回答 1

0

除非您有 180 个 CPU 可供使用,否则您无法真正同时运行它们。否则,当线程相互争斗以取得进展时,您会浪费大量精力在线程之间切换。

更好的方法可能是创建与您可用的 CPU 或内核数量接近的线程数,并将各个模型从队列中分配给线程。

假设您有 8 个要用于此目的的内核。创建 8 个“工作”线程,让每个线程从 180 个队列中挑选一个并处理它。当任何工作线程完成时,它会对上述 180 线程场景中的结果执行任何操作,并从队列中获取下一个 SVM 模型。继续此操作,直到处理完所有 180 个模型。

与一次 180 个线程相比,它可能需要更少的挂钟时间来完成,并且几乎可以肯定地在系统上施加的资源负载更少。完成此设置后,您可以试验运行的工作线程数以确定池大小的最佳位置。

于 2013-03-12T08:52:40.023 回答