Linux echo cpu(核心)name/number 对于 PBS 中给定的 shell

Linux echo cpu (core) name/number for a given shell in PBS

我有一个简单的 C++ 代码,它使用英特尔的 TBB 运行 使用 PBS 的集群上的脚本列表。我想确认我是否按预期使用了所有内核。每个节点有 16 个核心。我已经创建了脚本来花费不同的时间,这样如果列表被平均分配,我就会有空闲的核心。如果随着核心变得可用而划分列表,我应该没有空闲的核心。该代码似乎在单个节点上运行良好,但在多个节点上运行不佳。

除了核心,我想要类似于 echo $HOSTNAME 的东西。 Google 让我失望并产生了回应核心数量或使用了多少核心的结果。我已经尝试使用 top 并监视作业 运行 但这并没有告诉我哪个核心。

由 Linux 调度程序决定在任何给定时刻哪个进程获得哪个核心。它每秒多次做出这些决定,根据负载频繁地将进程从一个核心移动到另一个核心。

您可以使用 ps 命令的 psr 选项将进程的 snapshot 分配给 cpu:

ps -o pid,psr,cmd -28832
  PID PSR CMD
28832   1 bash

即这里 bash (pid=28832) 分配给具有 processor id=1.

的第二个核心

C 代码您可以使用 linux/getcpu.h 中定义的 getcpu(2) 调用。

要将进程分配给一组特定的核心,您可以 运行 numactl(8)taskset(1) 指定 cpu 亲和掩码。