如何将任务分配给特定的CPU核心?

时间:2018-05-24 10:56:14

标签: python multithreading tensorflow concurrency

我在tensorflow中阅读with tf.device("/job:ps/task:0"): weights_1 = tf.Variable(...) biases_1 = tf.Variable(...) with tf.device("/job:ps/task:1"): weights_2 = tf.Variable(...) biases_2 = tf.Variable(...) 的材料,可以将培训分配给特定的CPU核心。

我们可以将任务/线程分配给CPU内核以实现并发或并行处理吗?

.Formula

2 个答案:

答案 0 :(得分:0)

您可以获取python进程的当前pid并使用第三方实用程序(如taskset)将其分配给CPU核心。

我不太了解tensorflow,但我认为GIL将在这里发挥作用。你将不得不使用多处理并将每个进程分配给一个不同的核心。

答案 1 :(得分:0)

您可以将特定的进程线程绑定到任意核心(假设您使用的是linux)。这不仅适用于python,也适用于任何进程。我制作了一个python脚本来展示你如何做到这一点。

您可以通过ps命令获取线程ID: [user @ dev~] $ ps -Lo pid,%cpu,lwp -p {pid} 输出给我:

  PID %CPU   LWP
28216 98.0 28216
28216  0.0 28217
28216  0.0 28218

这里28216是进程的PID,你可以看到在一个简单的python脚本中运行其他线程。

现在,您可以通过taskset

将线程分配给特定核心
taskset -cp 0-5 28218

它将显示以下输出:

pid 28218's current affinity list: 0-11
pid 28218's new affinity list: 0-5

然后您可以观察到某些线程绑定到不同的CPU集合:

[user@host ~]$ taskset -cp 28218
pid 28218's current affinity list: 0-5
[user@host ~]$ taskset -cp 28217
pid 28217's current affinity list: 0-11