我正在研究机器学习和张量流。 但我有一个问题 我看到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
似乎并行和同步工作,是吗? 它是默认的吗?
答案 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