天天看點

初試分布式編譯系統 IncrediBuild(轉)

初試分布式編譯系統 IncrediBuild

随着項目複雜性的逐漸增加,編譯時間開始成為一個需要關注的問題。最近我的一個項目裡,由于大量使用了C++的模闆技術,導緻編譯時間非常長。嘗試過很多其他方法,效果都不明顯。今天,嘗試了一下分布式編譯系統 IncrediBuild,感覺有些效果,特此簡要記錄一下。

測試前,我先對項目進行了幾次 rebuild,以确定參考編譯時間:

  • scons mytarget

    : 采用預設參數,編譯時間為 20 分鐘;
  • scons -j16 mytarget

    : 采用 scons 的并發編譯,這樣可以充分利用我的雙核 CPU,編譯時間為 13 分鐘;

IncrediBuild 是一個分布式編譯系統,由兩大部分組成:Coordinator 和 Agent,Coordinator 類似一個中央任務分派器,用來管理各個編譯 Agent:

初試分布式編譯系統 IncrediBuild(轉)

我有兩台可用作編譯的電腦,桌上型電腦 Kingkong 是 Intel E5200,筆記本 Ninja 是 Intel T7100,它們都是雙核 CPU 。根據這個架構,我在 Kingkong 上安裝 Coordinator ,然後将 Agent 分别安裝到 Kingkong 和 Ninja 上。

要進行 IncrediBuild ,還需要配置一個 xml 檔案,比如我的就是:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
  <Tools>
    <Tool Filename="python" AllowIntercept="true" />
    <Tool Filename="cl" AllowRemote="true" VCCompiler="True"/>
    <Tool Filename="link" AllowRemote="false" />
  </Tools>
</Profile>
           

我将這個檔案儲存為 incredibuild.xml。然後從控制台啟動 IncreditBuild:

] XGConsole /command="scons -u -j16 mytarget" /openmonitor /profile="incredibuild.xml"
           

啟動後,一個圖形化的編譯界面就開始記錄整個分布式編譯過程:

初試分布式編譯系統 IncrediBuild(轉)

編譯結束後,從分析報告裡看出,本次編譯用了 10分鐘又10秒。感覺比 13 分鐘的單機編譯沒有提高多少。仔細分析原因,從圖中可以看出,我的項目使用了 CUDA 的編譯器 nvcc ,而這個編譯器并不是被 IncrediBuild 所支援的,是以無法分派到遠端 Agent 上進行編譯。不過,對于 cl 這個 MSVC 的編譯器,從圖中可以看出确實展現了分布式編譯的效果。是以,要想進一步提高編譯速度,有兩個方面:一是看看如何讓 IncrediBuild 支援 nvcc 編譯器;二是,增加更多的 Agent(不過增加更多的 Agent 似乎對于我的這個項目不會有太多的效率提高,因為我的瓶頸在于 nvcc 的編譯過于緩慢了)。

當然,我也是初次嘗試這個系統,對很多設定都還不太了解,比如我就很奇怪,那些使用的第三方庫是怎麼分派到遠端計算機上的呢?IncrediBuild 在設定時會為每個 Agent 分派一個緩沖區,預設是4G ,我估計這就是用來存放這些編譯依賴的檔案的地方,當然,具體怎樣還需要進一步摸索。

總之,對于純 C++ 的項目,我想,這個系統應該是能大大提高編譯速度的。