PBS 中给定 shell 的 Linux echo cpu(核心)名称/编号

标签 linux cpu cpu-usage tbb pbs

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

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

最佳答案

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

您可以使用 ps 命令的 psr 选项获取 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 affinity mask。

关于PBS 中给定 shell 的 Linux echo cpu(核心)名称/编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30087999/

相关文章:

java - 多线程java程序阻止cpu监控自身热度

iphone - 分析 iOS 应用程序的 CPU 使用率

linux - BeagleBoard Narcissus 工具链与 OpenCv 问题

linux - Linux 中 shell 脚本的更改不会刷新

java - Tomcat 7 启动时无连接时 CPU 使用率较高

system - CPU如何处理 sleep 功能?

web-services - gen_tcp获得极高的CPU

.net - 限制 Windows .NET 服务的 CPU 使用率

c++ - 你如何在 Anjuta 中找到变量和函数定义?

linux - 围攻仅捕获最终统计数据