在 slurm中, 2 sockets,2cores 的节点, msk_cpu 是多少. 如何计算mask_cpu. mask_cpu 跟 cpu id 的关系
时间: 2024-01-22 18:18:45 浏览: 127
在一个 2 sockets,2cores 的节点上,如果每个core都是单线程的,那么这个节点上共有4个逻辑处理器(logical processors)。在 Slurm 中,msk_cpu 是一个掩码,用于指示要使用哪些逻辑处理器。掩码的每一位对应一个逻辑处理器。如果这个位被设置为1,则表示使用这个逻辑处理器;如果设置为0,则表示不使用。掩码的长度通常等于逻辑处理器的总数。
在这个例子中,如果我们希望使用所有的逻辑处理器,那么掩码应该被设置为“1111”,即十进制的15。这个掩码可以用以下命令生成:
```
echo "obase=16;ibase=2;$(seq -s '' 1 4 | sed 's/1/0/g' | sed 's/2/0/g' | sed 's/3/1/g' | sed 's/4/1/g')" | bc
```
输出结果为"F",即15的十六进制表示。
关于 CPU ID 和掩码的关系,可以通过以下命令将掩码转换为 CPU ID 列表:
```
echo "ibase=16;F" | bc | tr '[A-Z]' '[a-z]' | xargs -I{} echo "obase=2;16#{}" | bc | rev | fold -w 1 | nl | awk '{if ($2 == 1) print $1-1}' | xargs | sed 's/ /,/g'
```
输出结果为“0,2,4,6”,即所有的逻辑处理器的 CPU ID。这个命令的原理是将掩码转换为二进制形式,并且将每个二进制位转换为一个数字,然后输出所有值为1的二进制位所对应的数字,这些数字就是 CPU ID。
阅读全文