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 亲和掩码。
我有一个简单的 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 亲和掩码。