2017-03-18 29 views
0

我正在嘗試做出一些關於如何處理我可用於與我正在爲TensorFlow移植的系統進行通信的資源的決定。我想了解BaseGPUDevice :: Init()after line 209.中的代碼。TensorFlow:爲什麼GPU設備只有一個設備上下文(並且真的*)?

代碼循環運行max_streams個循環,並且每次都會創建一組用於跨設備通信的流,然後實例化將使用該組流的一個GPUDeviceContext

然後,在FillContextMap()的主體中,調用複雜的函數來確定可用流之間的流的最優分配。將最佳流與返回的映射中創建的流的總數進行模數化,然後使用該映射將節點分配給函數的其餘部分中的設備上下文。

好吧,到目前爲止,這麼好。我們有一個系統,它看起來像使用了很多代碼來確保它很好地分配資源。但是引起我的是code to instantiate a device,它最終將max_streams的值硬編碼爲1,這意味着行279之後的所有上下文映射代碼都不應該被調用。

我在查看不再適用的舊代碼,或GPU設備將具有多個上下文時未來日期的佔位符代碼,或者有沒有發現GPU設備可以創建多個背景?

回答

0

是的,你正在看看有點陳舊的代碼;我們嘗試過使用多個計算流,並發現迄今爲止,它在重要的使用案例中沒有多大幫助。我們在技術上支持多個流,但我們從不打開它。

在未來的某個時間點,我們希望再次開始使用多個計算流,所以很高興在那裏有代碼。

設備可以使用任意數量的DeviceContexts;在GPU上我們只使用了一些,我們使用FillContextMap來進行映射,但是它確實取決於硬件應該如何使用。

相關問題