Python tensorflow,它是如何并行工作的

Python tensorflow,它是如何并行工作的,python,tensorflow,Python,Tensorflow,我在学习机器学习和tensorflow。 但是我有一个问题 我看到了Tensorflow默认使用多线程的文档。 所以我试着用log来检查这个 with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: x = tf.constant(2) y2 = x - 66 y1 = x + 300 y = y1 + y2 result = sess.run(y) print(result) 然后我可以得

我在学习机器学习和tensorflow。 但是我有一个问题 我看到了Tensorflow默认使用多线程的文档。 所以我试着用log来检查这个

with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
 x = tf.constant(2)
 y2 = x - 66
 y1 = x + 300
 y = y1 + y2
 result = sess.run(y)
 print(result)
然后我可以得到下面的结果

常量:(常量):/job:localhost/replica:0/task:0/cpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:827]Const:(Const)/job:localhost/replica:0/task:0/cpu:0 添加:(添加):/job:localhost/replica:0/task:0/cpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:827]add:(add)/job:localhost/replica:0/task:0/cpu:0 sub:(sub):/job:localhost/replica:0/task:0/cpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:827]sub:(sub)/job:localhost/replica:0/task:0/cpu:0 add_1:(add):/job:localhost/replica:0/task:0/cpu:0 I tensorflow/core/common_runtime/simple_placer.cc:827]add_1:(add)/job:localhost/replica:0/task:0/cpu:0 添加/y:(常量):/job:localhost/replica:0/task:0/cpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:827]add/y:(Const)/job:localhost/replica:0/task:0/cpu:0 sub/y:(Const):/job:localhost/replica:0/task:0/cpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:827]sub/y:(Const)/job:localhost/replica:0/task:0/cpu:0 238

它似乎是并行和同步工作的,对吗?
是否为默认值?

检查direct_session.c和executor.cc中的实现,其中为图的每个分区创建ExecutorState,并使用线程池来执行准备处理的每个节点

在下面的函数中,“ready”是一个用图的输入节点初始化的向量,因此每个节点将在单独的线程中运行,并继续执行满足其依赖关系的分支中的节点。随着跨线程处理的继续,不同节点的依赖关系将得到满足并执行

void ExecutorState::RunAsync(Executor::DoneCallback done)
    // Schedule to run all the ready ops in thread pool.
    ScheduleReady(ready, nullptr);
}

ExecutorState::ScheduleReady是一个触发并行性的函数,从节点准备好处理的代码中调用,其中包括ExecutorState::RunAsync和ExecutorState::NodeOne

Device placement将告诉您ops在哪个设备(CPU/GPU)上运行。要了解CPU上的并行性,可以查看。通常,存在操作内并行和操作间并行。