tensorflow,它是如何并行工作的

时间:2017-02-06 01:52:35

标签: python 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)

然后我可以得到以下结果。

  

Const:(Const):/ job:localhost / replica:0 / task:0 / cpu:0   我是tensorflow / core / common_runtime / simple_placer.cc:827] Const:(Const)/ job:localhost / replica:0 / task:0 / cpu:0   add :(添加):/ job:localhost / replica:0 / task:0 / cpu:0   我的tensorflow / core / common_runtime / simple_placer.cc:827] add :(添加)/ job:localhost / replica:0 / task:0 / cpu:0   sub:(Sub):/ job:localhost / replica:0 / task:0 / cpu:0   我是tensorflow / core / common_runtime / simple_placer.cc:827] sub:(Sub)/ job:localhost / replica:0 / task:0 / cpu:0   add_1 :(添加):/ job:localhost / replica:0 / task:0 / cpu:0   我是tensorflow / core / common_runtime / simple_placer.cc:827] add_1 :(添加)/ job:localhost / replica:0 / task:0 / cpu:0   add / y:(Const):/ job:localhost / replica:0 / task:0 / cpu:0   我的tensorflow / core / common_runtime / simple_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   我的tensorflow / core / common_runtime / simple_placer.cc:827] sub / y:(Const)/ job:localhost / replica:0 / task:0 / cpu:0   238

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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