2016-10-24 16 views
0

我目前正在使用C++實現Tensorflow自定義操作(用於自定義數據提取器)以加速我的Tensorflow模型。由於我的Tensorflow模型並未使用GPU,我相信我可以同時使用多個工作線程實現最高性能。多線程 - 如何儘可能地使用CPU?

問題是,即使我有足夠的工人,我的程序不會利用所有的CPU。在我的開發機器中,(4物理內核)使用大約90%的用戶時間,4%的系統時間,4個工作線程和tf.ConfigProto(inter_op_parallelism_threads=6)選項。

隨着更多的工作線程和inter_op_parallelism_threads選項,我得到比以前的配置更糟糕的模型運行性能。由於我不擅長prpfiling,所以我不知道我的代碼的瓶頸在哪裏。

是否有任何經驗法則來最大限度地利用CPU使用率和/或好的工具來查找Linux中單進程(而非系統範圍)的性能瓶頸/互斥鎖?編輯:我的代碼運行python,但(幾乎)每個執行都在C++代碼中。其中一些不是我的(Tensorflow和Eigen),我創建了一個共享庫,可以在Python中動態加載,並且由Tensorflow內核調用。 Tensorflow擁有他們的線程池,我的動態庫代碼也擁有線程池,我的代碼是thread safe。我還創建了線程來同時調用sess.run()以調用它們。像Python可以同時調用多個HTTP請求,sess.run()釋放GIL。我的目標是儘可能地調用sess.run()來增加「真實」性能,並且任何與python相關的分析器都不成功。

+0

我覺得你自相矛盾一點。首先你提到_「我的程序利用了所有的CPU」_然後你說_「是否有任何經驗法則來最大化CPU使用率」_。那麼你想增加CPU負載還是減少它? – SingerOfTheFall

+0

@SingerOfTheFall這是錯字。固定。 –

+0

您應該首先使用分析器來查找瓶頸。對於什麼是值得的CPU可能正在等待大部分時間從內存/磁盤獲取數據。 – SingerOfTheFall

回答

相關問題