我想更多地了解这两个参数:内部和操作间并行线程
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
我读过这篇文章,其中有一个很好的解释:TensorFlow: inter- and intra-op parallelism configuration
但我正在寻求确认,并在下面提出新问题。我在keras 2.0.9,tensorflow 1.3.0中运行我的任务:
非常感谢提前
答案 0 :(得分:2)
当两个参数都设置为1时,4个核心中的1个将运行1个线程。它运行的核心可能会发生变化,但一次只能变为1个。
当并行运行时,总是需要在通信丢失和通过并行化获得时间之间进行权衡。根据使用的硬件和特定任务(如矩阵的大小),加速将改变。有时并行运行某些内容比使用一个内核更慢。
例如,当在cpu上使用浮点数时,由于浮点精度,(a + b) + c
将不等于a + (b + c)
。使用多个并行线程意味着像a + b + c
这样的操作不会总是以相同的顺序计算,导致每次运行时得到不同的结果。然而,这些差异非常小,并且在大多数情况下不会影响整体结果。通常只需要完全可重现的结果进行调试。执行完全可重复性会大大减慢多线程的速度。
答案 1 :(得分:0)
问题1的答案是“否”。
将两个参数都设置为1(intra_op_parallelism_threads = 1,inter_op_parallelism_threads = 1)将生成N个线程,其中N是内核数。我已经在不同版本的TensorFlow上对其进行了多次测试。即使对于最新版本的TensorFlow也是如此。关于如何将线程数减少到1却有多个问题,但没有明确的答案。一些例子是