我正在开发一个进行大量数字运算的应用程序。它旨在在单台计算机上运行。最近,我们开始研究多线程以加快计算速度。一些算法可以毫不费力地并行运行,我使用一个固定的线程池来运行每个子任务。
我想知道的是:通常为这些算法指定的线程数(池的大小)如何?我怀疑这通常是通过使用配置文件或命令行参数来完成的,但我还没有看到任何这样的例子,所以我想知道是否有更好的方法。
与此相关:指定线程数是否相关?我在想将池大小设置为可分配内核的数量可能会运行得最快,但是在过度分配的情况下处理能力的线程争用甚至与性能相关吗?例如:在 4 核机器上设置 20 个最大线程会比设置 4 个最大线程更糟糕吗?
编辑:该应用程序打算出售,所以我不知道它将在什么计算机上运行。我正在寻找一般准则和最佳实践。