测试环境是安装在双 Intel Xeon E5-2699 v4 和 Supermicro X10DAi 主板的机器上的 Ubuntu 20.04.3 LTS。我尝试使用最新/最新的英特尔 oneAPI 基础和 hpc 工具包编译和测试VASP.6.3.0 。
测试命令如下:
VASP_TESTSUITE_EXE_STD="mpirun -np $nranks -genv OMP_NUM_THREADS=$nthrds -genv I_MPI_PIN_DOMAIN=omp -genv KMP_AFFINITY=verbose,granularity=fine,compact,1,0 -genv KMP_STACKSIZE=512m /home/werner/Public/hpc/vasp/vasp.6.3.0/testsuite/../bin/vasp_std"
VASP_TESTSUITE_EXE_NCL="mpirun -np $nranks -genv OMP_NUM_THREADS=$nthrds -genv I_MPI_PIN_DOMAIN=omp -genv KMP_AFFINITY=verbose,granularity=fine,compact,1,0 -genv KMP_STACKSIZE=512m /home/werner/Public/hpc/vasp/vasp.6.3.0/testsuite/../bin/vasp_ncl"
VASP_TESTSUITE_EXE_GAM="mpirun -np $nranks -genv OMP_NUM_THREADS=$nthrds -genv I_MPI_PIN_DOMAIN=omp -genv KMP_AFFINITY=verbose,granularity=fine,compact,1,0 -genv KMP_STACKSIZE=512m /home/werner/Public/hpc/vasp/vasp.6.3.0/testsuite/../bin/vasp_gam"
我发现对于具有不同组合np
(即number of processes
)和OMP_NUM_THREADS
. 在我的测试中,我发现和的组合-np 16
非常OMP_NUM_THREADS=16
耗时,所以我在它结束之前终止了这个测试步骤。有关此处测试对应的时间基准的摘要,请参阅此文件和此处的讨论以及更多详细信息。
所以一个自然的问题是:如何为特定的计算任务找到设置值number of processes
的最佳组合?OMP_NUM_THREADS
有经验法则吗?
以下是对 Victor Eijkhout、Homer512 和 Jérôme Richard 的评论的补充信息:
- 查看inxi给出的相关信息:
werner@X10DAi-00:~$ inxi -Cxxx
CPU: Topology: 2x 22-Core model: Intel Xeon E5-2699 v4 bits: 64 type: MT MCP SMP arch: Broadwell rev: 1
L2 cache: 110.0 MiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 387287
Speed: 1200 MHz min/max: 1200/3600 MHz Core speeds (MHz): 1: 1200 2: 1202 3: 1202 4: 1202 5: 1200
6: 1202 7: 1203 8: 1201 9: 1204 10: 1201 11: 1654 12: 2007 13: 2204 14: 2200 15: 1245 16: 1202
17: 1202 18: 1202 19: 1203 20: 1202 21: 1203 22: 1202 23: 1202 24: 1201 25: 1202 26: 1202 27: 1201
28: 1202 29: 1202 30: 1202 31: 2066 32: 1202 33: 1202 34: 1202 35: 1203 36: 1202 37: 1202 38: 1202
39: 1202 40: 1202 41: 1200 42: 1516 43: 1200 44: 1200 45: 1200 46: 1202 47: 1200 48: 1200 49: 1200
50: 1200 51: 1201 52: 1201 53: 1201 54: 1201 55: 1200 56: 1201 57: 1204 58: 1200 59: 1200 60: 1609
61: 1871 62: 2200 63: 1251 64: 1201 65: 1201 66: 1201 67: 1200 68: 1203 69: 1200 70: 1201 71: 1201
72: 1201 73: 1201 74: 1201 75: 1200 76: 1200 77: 1200 78: 1201 79: 1203 80: 1523 81: 1201 82: 1200
83: 1200 84: 1201 85: 1201 86: 1200 87: 1200 88: 1204
werner@X10DAi-00:~$ inxi -Mxxx
Machine: Type: Desktop System: Supermicro product: X10DAi v: 123456789 serial: <superuser/root required>
Mobo: Supermicro model: X10DAI v: 1.02 serial: <superuser/root required> UEFI: American Megatrends
v: 3.2 date: 12/16/2019
werner@X10DAi-00:~$ inxi -Sxxx
System: Host: X10DAi-00 Kernel: 5.8.0-43-generic x86_64 bits: 64 compiler: N/A Desktop: GNOME 3.36.9
tk: GTK 3.24.20 wm: gnome-shell dm: GDM3 3.36.3 Distro: Ubuntu 20.04.3 LTS (Focal Fossa)
- 我重新测试这里讨论的测试。有关时间基线和相应的选项组合,请参见以下内容:
nranks=4 nthrds=2
real 0m13.666s
user 1m20.643s
sys 0m4.314s
nranks=8 nthrds=2
real 0m11.908s
user 2m9.973s
sys 0m7.549s
nranks=12 nthrds=2
real 0m11.043s
user 2m55.062s
sys 0m11.161s
nranks=16 nthrds=2
real 0m11.087s
user 3m45.074s
sys 0m15.343s
nranks=4 nthrds=2
real 0m13.511s
user 1m19.949s
sys 0m4.185s
nranks=6 nthrds=4
real 0m13.736s
user 3m38.704s
sys 0m12.471s
nranks=8 nthrds=5
real 0m12.378s
user 5m13.113s
sys 0m18.022s
看来上面的结果和 Homer512 给出的评论是一致的:
典型的测试设置是每个内核一个进程(1-2 个线程)或每个 LLC 一个进程,线程数尽可能多。
问候,HZ