我有一个简单的C++代码,它使用英特尔的TBB在集群上使用PBS运行脚本列表。我想确认的是,我正在使用所有的核心,如预期的。每个节点有16个核。我已经创建了脚本来占用不同的时间,这样如果列表被平均分配,我就会有空闲的核心。如果当内核可用时,列表被分开了,那么我应该没有空闲的核心。代码在单个节点上似乎运行良好,但对于多个节点则不起作用。
我想要一些类似于echo $HOSTNAME的东西,除了核心。谷歌辜负了我,并给出了反映核心数量或核心使用数量的结果。我试过使用top并监视作业运行情况,但这并不能告诉我哪个核心。
发布于 2015-05-07 13:39:50
在任何给定的时刻,都要由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关联掩码。
https://stackoverflow.com/questions/30087999
复制相似问题