簡體   English   中英

用於優化性能的C ++虛擬機

[英]A virtual machine for C++ for optimizing performance

支持C#和Java等JITed語言的一個論點是它們可以更好地執行優化,因為虛擬機的運行時分析可以比靜態優化的C ++代碼更好地優化代碼。

但是,我想知道我們是否也可以使用虛擬機在運行時為C ++優化代碼,或者更確切地說是任何類似的語言。 例如,我們可以使用LLVM編譯器生成的IR,並創建一個解釋,JIT和優化代碼的虛擬機,就像Java和C#一樣。

當然,沒有垃圾收集,但優化因素就在那里。 有沒有人為此工作過。 這有什么論文,工具嗎? 這種方法有多好?

這是一個有缺陷的論點。 是的,虛擬機可以使用更多信息 - 但與編譯器相比,它們的時間和空間也大大減少。

此外,是的,如果你真的想,你絕對可以做到。 但沒有人這樣做,所以通常不會發生。 至少,不是出於優化原因,您可以將其用於沙盒。

LLVM包含一個JIT編譯器,lli和Clang已經可以從C ++生成bitcode。 我沒有嘗試過,但我假設您可以在生成的bitcode文件上使用lli(您可能必須告訴它在哪里找到要鏈接的C ++ lib文件)和運行時的JIT C ++。 您甚至應該能夠將libc ++構建為bitcode,以便它也可以被JIT。

谷歌的Native Client有一個子項目,Portable Native Client,我認為LLVM IR被發送到客戶端而不是x86二進制文件,可以在客戶端上進行jitted。

從理論上講,是的,JIT可以用於C ++。 它可以利用底層架構中的一些東西來積極地優化代碼。 它還會帶來使應用程序在運行時加載需要更長時間的缺點。

當然,沒有垃圾收集,因此也沒有垃圾收集,但優化因素會存在。 有沒有人為此工作過。 這有什么論文,工具嗎? 這種方法有多好?

這里有很大的誤解。 對於每個用戶定義的類型,在整個板上強加GC是主要的開銷。 盡管最初嘗試僅使用托管虛擬機,但Android,iOS和Windows移動設備都已轉向高性能應用程序的C / C ++,這也是其中一個原因。

當然,額外的間接級別意味着GC可以自由地執行緊湊型內存之類的操作,但優化的C / C ++程序從一開始就已經在使用壓縮內存。 這也意味着內存最初會更加碎片化,這對於C ++擅長的高性能應用程序來說是一種性能殺手(一種是處理大型連續緩沖區,例如視頻處理,光線跟蹤或音頻)處理)。

同時將每個UDT實例轉換為引用意味着所有內容都在堆上,這有效地將最初幾個時鍾周期的操作轉換為數百個。

也就是說,為了解決問題的核心,當然,可以使用JIT構建C ++代碼,但是你可能會發現,由於人們通常使用靜態性質這樣的事情,實際上並沒有這么強有力的理由。 C ++代碼。

暫無
暫無

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

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