使用多线程加载的多个模型

时间:2013-01-09 06:29:27

标签: multithreading pthreads threadpool

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

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

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

1 个答案:

答案 0 :(得分:0)

你不能真正同时运行它们,除非你有180个CPU可以使用。否则,你在线程之间浪费了大量的能量转换,而他们互相争斗以取得进展。

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

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

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