我正在尝试做出一些关于如何处理我可用于与我正在为TensorFlow移植的系统进行通信的资源的决定。我正在尝试理解BaseGPUDevice :: Init()after line 209.中的代码。
代码在max_streams
个周期的循环中运行,每次通过它创建一组用于跨设备通信的流,然后实例化将使用该组流的一个GPUDeviceContext
。 / p>
然后,在FillContextMap()
的主体中,调用复杂的函数来确定可用流之间的流的最佳分配。最佳流将根据返回的地图中创建的流的总数进行模数化,然后使用该地图进行分配
节点到函数其余部分的设备上下文。
好的,到目前为止,这么好。我们的系统看起来像是使用大量代码来确保它能够很好地分配资源。但是让我感到震惊的是code to instantiate a device,它最终将max_streams
的值硬编码为1,这意味着第279行之后的所有上下文映射代码都不会被调用。
我是在查看不再适用的旧代码,还是在GPU设备将具有多个上下文的未来日期的占位符代码,或者是否存在我没有找到可以使用多个上下文创建GPU设备的情况?
答案 0 :(得分:0)
是的,您正在查看有点陈旧的代码;我们已经尝试过尝试多个计算流,并且发现到目前为止,它在重要的用例中没有那么多帮助。我们在技术上支持多个流,但我们永远不会打开它。
在未来的某个时刻,我们希望再次开始使用多个计算流,所以很高兴在那里使用代码。
设备可以使用任意数量的DeviceContexts;在GPU上我们只使用了一些,我们使用FillContextMap进行映射,但它实际上取决于硬件应该如何使用。