多线程—怎么判断需要开多少线程数

julia 在一个本地电脑 或者一个远程服务器上最多开几个线程能达到最快的速度?

你这个问题问得相当广泛,答案也会相应宽泛:因地制宜(It depends)。

首先,你需要了解你的机器上的CPU有多少个线程,俗称hardware threads。你可以在Julia中开10000个线程(>>硬件线程),但是这并不会让你的程序跑得更快。通常我们会选择Julia threads < hardware threads。

其次,不同的程序的最优线程数目是不一样的。它取决于

  1. 问题的规模(比如你需要算10个数还是10000个数)
  2. 算法的特性
  3. 硬件上对于每一个线程分配的stack的大小
  4. 其他因素

如果你想在具体问题中了解,最好的方式就是针对特定机器做一系列同样规模不同线程数的测试,根据测试结果来判断到底多少个线程是最优解。

1 个赞

去年冬季会议,有一个报告是讲并行计算,感兴趣去看看回放

这里提到的物理线程可以用 Hwloc 查看

# using Pkg;Pkg.add("Hwloc")
using Hwloc
Hwloc.num_physical_cores()