2.关于OMP_NUM_THREADS对性能的影响,我自己对于我们的计算模块做了一些测试。设置不同的OMP_NUM_THREADS,这里仅列出几组数据。由于测试环境的cpu有40个逻辑核心,不设置时numpy的一个进程会产生40个线程。可以看到默认情况下有大量的内核开销,在我这个场景中,将线程数设置到1是比较合适的。
编号 |
OMP_NUM_THREADS |
进程数 |
Real time |
User time |
Sys time |
1 |
1 |
8 |
1min37.590s |
4min36.826s |
0min19.033s |
2 |
1min42.593s |
4min40.117s |
0min21.201s |
||
3 |
4 |
1min41.253s |
4min46.988s |
0min50.904s |
|
4 |
1min38.686s |
4min45.723s |
0min49.018s |
||
5 |
不设置 |
1min42.618s |
6min0.386s |
6min2.305s |
|
6 |
1min40.361s |
6min5.274s |
6min14.955s |
这个地址讨论了numpy线程数和性能的关系,使用10核心20线程的CPU时,当OMP_NUM_THREADS=10或20时,效果是比较好的,矩阵的大小、指令集也对性能有较大的影响。可能确实将线程数设置低一点可以减小线程切换以及不同线程协作的开销。