TensorFlow:为什么GPU设备只有一个设备上下文(真的*真的*)?

时间:2017-03-18 01:10:02

标签: tensorflow

我正在尝试做出一些关于如何处理我可用于与我正在为TensorFlow移植的系统进行通信的资源的决定。我正在尝试理解BaseGPUDevice :: Init()after line 209.中的代码。

代码在max_streams个周期的循环中运行,每次通过它创建一组用于跨设备通信的流,然后实例化将使用该组流的一个GPUDeviceContext。 / p>

然后,在FillContextMap()的主体中,调用复杂的函数来确定可用流之间的流的最佳分配。最佳流将根据返回的地图中创建的流的总数进行模数化,然后使用该地图进行分配 节点到函数其余部分的设备上下文。

好的,到目前为止,这么好。我们的系统看起来像是使用大量代码来确保它能够很好地分配资源。但是让我感到震惊的是code to instantiate a device,它最终将max_streams的值硬编码为1,这意味着第279行之后的所有上下文映射代码都不会被调用。

我是在查看不再适用的旧代码,还是在GPU设备将具有多个上下文的未来日期的占位符代码,或者是否存在我没​​有找到可以使用多个上下文创建GPU设备的情况?

1 个答案:

答案 0 :(得分:0)

是的,您正在查看有点陈旧的代码;我们已经尝试过尝试多个计算流,并且发现到目前为止,它在重要的用例中没有那么多帮助。我们在技术上支持多个流,但我们永远不会打开它。

在未来的某个时刻,我们希望再次开始使用多个计算流,所以很高兴在那里使用代码。

设备可以使用任意数量的DeviceContexts;在GPU上我们只使用了一些,我们使用FillContextMap进行映射,但它实际上取决于硬件应该如何使用。