簡體   English   中英

動態C ++編譯器,用於與系統無關的程序分發

[英]On-the-fly C++ compiler for system-independent program distribution

我公司內部軟件項目主要使用Java完成的主要原因是Java程序獨立於主機體系結構,這為在國際范圍內分發應用程序提供了很大的靈活性。

我們需要啟動一個進行大量數字運算的新應用程序,我想使用我們提供的C ++庫和代碼(我也更喜歡C ++)。

現在我想知道為什么在以下意義上沒有某些軟件像Java JIT編譯器那樣工作:

  1. 執行編譯直到中間表示(例如LLVM IR)
  2. 將打包的中間表示分發到客戶端計算機
  3. 在本地計算機上編譯一次
  4. 執行

這將結合Java和C ++的多個優點:

  • 針對本地計算機體系結構的優化(就像JIT一樣)
  • 分發軟件的獨立於操作系統的版本(Java)
  • 在沒有虛擬機的情況下執行程序(C ++)

諸如此類的操作未完成的原因是什么?

對於高性能應用程序沒有做到這一點的主要原因是,性能的最后一部分要付出相當高的代價。 現代的JIT是在編譯時延遲和生成的代碼質量之間的不錯的折衷。

取而代之的是,現代的C ++編譯器(包括Intel和GCC)可以靜態編譯多個替代體系結構變體,並在加載程序時選擇正確的變體。 事實證明,您沒有太多要考慮的變體。 實際上,您正在使用的是AVX(無/ 1/2)。

如果您的編譯器不這樣做,那么便宜的手動替代方法是將替代變體放入一堆動態加載的庫中,並在加載時選擇正確的庫。 使用MSVC的延遲加載庫,這可以同樣透明。 您只需鈎住實際的庫負載,即可選擇MathAVX.DLL而不是MathSSE.DLL

當然,對於真正的高性能應用程序,您只能說“ 64位,AVX2”或“ CUDA,計算能力6+”。 對於此類應用程序,軟件定義了硬件,反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM