在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用NVIDIA CUDA 11 . 2優化GPU應用性能

星星科技指導員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-06 10:24 ? 次閱讀

CUDA 11 . 2 的特點是在 GPU 加速應用程序中為設備代碼提供強大的鏈路時間優化( LTO )功能。 Device LTO 將設備代碼優化的性能優勢(只有在 nvcc 整個程序編譯模式下才可能)帶到了 CUDA 5 . 0 中引入的 nvcc 單獨編譯模式。

單獨編譯模式允許 CUDA 設備內核代碼跨多個源文件,而在整個程序編譯模式下,程序中的所有 CUDA 設備內核代碼都必須位于單個源文件中。獨立編譯模式將源代碼模塊化引入設備內核代碼,因此是提高開發人員生產率的重要步驟。獨立的編譯模式使開發人員能夠更好地設計和組織設備內核代碼,并使 GPU 加速許多現有的應用程序,而無需進行大量的代碼重構工作,即可將所有設備內核代碼移動到單個源文件中。它還提高了大型并行應用程序開發的開發人員的生產效率,只需要重新編譯帶有增量更改的設備源文件。

CUDA 編譯器優化的范圍通常限于正在編譯的每個源文件。在單獨的編譯模式下,編譯時優化的范圍可能會受到限制,因為編譯器無法看到源文件之外引用的任何設備代碼,因為編譯器無法利用跨越文件邊界的優化機會。

相比之下,在整個程序編譯模式下,程序中存在的所有設備內核代碼都位于同一源文件中,消除了任何外部依賴關系,并允許編譯器執行在單獨編譯模式下不可能執行的優化。因此,在整個程序編譯模式下編譯的程序通常比在單獨編譯模式下編譯的程序性能更好。

使用 CUDA 11 . 0 中預覽的設備鏈接時間優化( LTO ),可以獲得單獨編譯的源代碼模塊化以及設備代碼整個程序編譯的運行時性能。雖然編譯器在優化單獨編譯的 CUDA 源文件時可能無法進行全局優化的代碼轉換,但鏈接器更適合這樣做。

與編譯器相比,鏈接器具有正在構建的可執行文件的整個程序視圖,包括來自多個源文件和庫的源代碼和符號??蓤绦形募恼麄€程序視圖使鏈接器能夠選擇最適合單獨編譯的程序的性能優化。此設備鏈接時間優化由鏈接器執行,是 CUDA 11 . 2 中 nvlink 實用程序的一個功能。具有多個源文件和庫的應用程序現在可以通過 GPU 進行加速,而不會影響單獨編譯模式下的性能。

圖 1 。不同編程模式下編譯時和鏈接時優化過程的比較。

圖 1 ,在 nvcc 全程序編譯模式下,要在單個源文件 X . cu 中編譯的設備程序,沒有任何未解析的外部設備函數或變量引用,可以在編譯時由編譯器完全優化。然而,在單獨的編譯模式下,編譯器只能優化正在編譯的單個源文件中的設備代碼,而最終的可執行文件沒有盡可能優化,因為編譯器無法執行跨源文件的更多優化。設備鏈接時間優化通過將優化推遲到鏈接步驟來彌補這一差距。

在設備 LTO 模式下,我們為每個翻譯單元存儲代碼的高級中間形式,然后在鏈接時合并所有這些中間形式以創建所有設備代碼的高級表示。這使鏈接器能夠執行高級優化,例如跨文件邊界內聯,這不僅消除了調用約定的開銷,還進一步支持對內聯代碼塊本身進行其他優化。鏈接器還可以利用已完成的偏移量。例如,共享內存分配是最終確定的,并且數據偏移量僅在鏈路時間已知,因此設備鏈路時間優化現在可以使諸如設備代碼的恒定傳播或折疊之類的低級優化成為可能。即使函數沒有內聯,鏈接器仍然可以看到調用的兩面,以優化調用約定。因此,可以通過設備鏈路時間優化來提高為單獨編譯的程序生成的代碼的質量,并且其性能與以整個程序模式編譯的程序一樣。

為了了解單獨編譯的局限性以及設備 LTO 可能帶來的性能提升,讓我們看一個 MonteCarlo 基準測試中的示例

I 在下面的示例代碼中, MC_Location:: get_domain 不是在另一個文件中定義的標準編譯模式中內聯的,而是
使用 CUDA 11 . 2 中的設備鏈路優化內聯

 __device__ void MCT_Reflect_Particle(MonteCarlo *monteCarlo,
 MC_Particle &particle){

 MC_Location location = particle.Get_Location();
 const MC_Domain &domain = location.get_domain(monteCarlo);
 ...
 ...
 /* uses domain */
 }

函數 get \ u domain 是另一個類的一部分,因此在另一個文件中定義它是有意義的。但是在單獨的編譯模式下,編譯器在調用 get \ u domain ()時將不知道它做什么,甚至不知道它存在于何處,因此編譯器無法內聯該函數,必須隨參數一起發出調用并返回處理,同時也節省空間的事情,如回郵地址后,呼吁。這又使得它無法潛在地優化使用域值的后續語句。在設備 LTO 模式下, get \ u domain ()可以完全內聯,編譯器可以執行更多優化,從而消除調用約定的代碼,并啟用基于域值的優化。

簡而言之,設備 LTO 將所有性能優化都引入到單獨的編譯模式中,而以前只有在整個程序編譯模式中才可用。

使用設備 LTO

要使用設備 LTO ,請將選項 -dlto 添加到編譯和鏈接命令中,如下所示。從這兩個步驟中跳過 -dlto 選項會影響結果。

使用-dlto選項編譯 CUDA 源文件:

nvcc -dc -dlto *.cu

使用-dlto選項鏈接 CUDA 對象文件:

 nvcc -dlto *.o

在編譯時使用 -dlto 選項指示編譯器將正在編譯的設備代碼的高級中間表示( NVVM-IR )存儲到 fatbinary 中。在鏈接時使用 -dlto 選項將指示鏈接器從所有鏈接對象檢索 NVVM IR ,并將它們合并到一個 IR 中并執行優化在生成的 IR 上生成代碼。設備 LTO 與任何支持的 SM 架構目標一起工作。

對現有庫使用設備 LTO

設備 LTO 只有在編譯和鏈接步驟都使用 -dlto 時才能生效。如果 -dlto 在編譯時使用,而不是在鏈接時使用,則在鏈接時每個對象都被單獨編譯到 SASS ,然后作為正常鏈接,沒有任何優化機會。如果 -dlto 在鏈接時使用,而不是在編譯時使用,然后鏈接器找不到要執行 LTO 的中間表示,并跳過直接鏈接對象的優化步驟。

如果包含設備代碼的所有對象都是用 -dlto 構建的,那么 Device LTO 工作得最好。但是,即使只有一些對象使用 -dlto ,它仍然可以使用,如圖 2 所示。

圖 2 :使用非 LTO 庫進行單獨編譯和設備鏈接時間優化。

在這種情況下,在鏈接時,使用 -dlto 構建的對象鏈接在一起形成一個可重定位對象,然后與其他非 LTO 對象鏈接。這不會提供最佳性能,但仍然可以通過在 LTO 對象內進行優化來提高性能。此功能允許使用 -dlto ,即使外部庫不是用 -dlto 構建的;這只是意味著庫代碼不能從設備 LTO 中獲益。

每體系結構的細粒度設備鏈路優化支持

全局 -dlto 選項適用于編譯單個目標體系結構。

使用 -gencode 為多個體系結構編譯時,請確切指定要存儲到 fat 二進制文件中的中間產物。例如,要在可執行文件中存儲 Volta SASS 和 Ampere PTX ,您當前可以使用以下選項進行編譯:

nvcc -gencode arch=compute_70,code=sm_70
 -gencode arch=compute_80,code=compute_80

使用一個新的代碼目標 lto_70 ,您可以獲得細粒度的控制,以指示哪個目標體系結構應該存儲 LTO 中介體,而不是 SASS 或 PTX 。例如,要存儲 Volta LTO 和 Ampere PTX ,可以使用以下代碼示例進行編譯:

nvcc -gencode arch=compute_70,code=lto_70
 -gencode arch=compute_80,code=compute_80

績效結果

設備 LTO 會對性能產生什么樣的影響?

gpu 對內存流量和寄存器壓力非常敏感。因此,設備優化通常比相應的主機優化影響更大。正如預期的那樣,我們觀察到許多應用受益于設備 LTO 。通常,通過設備 LTO 的加速比取決于 CUDA 應用特性。

圖 3 和圖 4 顯示了一個內部基準應用程序和另一個實際應用程序的運行時性能和構建時間的比較圖,這兩個應用程序都采用三種編譯模式:

  • 全程序編譯
  • 不帶設備 LTO 的單獨編譯
  • 使用設備 LTO 模式單獨編譯

我們測試的客戶應用程序有一個占運行時 80% 以上的主計算內核,它調用了分布在不同翻譯單元或源文件中的數百個獨立設備函數。函數的手動內聯是有效的,但如果您希望使用單獨的編譯來維護傳統的開發工作流和庫邊界,則會很麻煩。在這些情況下,使用設備 LTO 來實現潛在的性能優勢而不需要額外的開發工作是非常有吸引力的。

圖 3 :設備鏈接時間優化的性能加速比優于單獨編譯模式,在某些情況下與整個程序編譯模式相當(越高越好)

如圖 3 所示,帶有設備 LTO 的基準測試和客戶應用程序的運行時性能接近于整個程序編譯模式,克服了單獨編譯模式帶來的限制。請記住,性能的提高在很大程度上取決于應用程序本身的構建方式。正如我們所觀察到的,在某些情況下,收益微乎其微。使用另一個 CUDA 應用程序套件,設備 LTO 的運行時性能平均提高了 25% 左右。

在這篇文章的后面,我們將介紹更多關于設備 LTO 不是特別有用的場景。

除了 GPU 性能之外,設備 LTO 還有另一個方面,那就是構建時間。使用設備 LTO 的總構建時間在很大程度上取決于應用程序大小和其他系統因素。在圖 4 中,內部基準構建時間的相對差異與前面三種不同編譯模式的客戶應用程序進行了比較。內部基準由大約 12000 行代碼組成,而客戶應用程序有上萬行代碼。


有些情況下,由于編譯和優化這些程序所需的過程較少,因此整個程序模式的編譯速度可能更快。此外,在全程序模式下,較小的程序有時可能編譯得更快,因為它有較少的編譯命令,因此對宿主編譯器的調用也較少。但是在全程序模式下的大型程序會帶來更高的優化成本和內存使用。在這種情況下,使用單獨的編譯模式進行編譯會更快。對于圖 4 中的內部基準可以觀察到這一點,其中整個程序模式的編譯時間快了 17% ,而對于客戶應用程序,整個程序模式的編譯速度慢了 25% 。

有限的優化范圍和較小的翻譯單元使單獨編譯模式下的編譯速度更快。當增量更改被隔離到幾個源文件時,單獨的編譯模式還減少了總體的增量構建時間。當啟用設備鏈接時間優化時,編譯器優化階段將被取消,從而顯著減少編譯時間,從而進一步加快單獨編譯模式的編譯速度。但是,同時,由于設備代碼優化階段推遲到鏈接器,并且由于鏈接器可以在單獨編譯模式下執行更多優化,因此單獨編譯的程序的鏈接時間可能隨著設備鏈接時間優化而更高。在圖 4 中,我們可以觀察到設備 LTO 構建時間與基準相比只慢了 7% ,但是與客戶應用程序相比,構建時間慢了近 50% 。

圖 4 :構建時間加速可以變化(越高越好)。

在 11 . 2 中,我們還引入了新的 nvcc -threads 選項,它在針對多個體系結構時支持并行編譯。這有助于減少構建時間。一般來說,這些編譯模式的總(編譯和鏈接)構建時間可能會因一組不同的因素而有所不同。盡管如此,由于使用設備 LTO 可以顯著縮短編譯時間,我們希望啟用設備鏈接時間優化的單獨編譯模式的總體構建在大多數典型場景中應該是可比的。

設備 LTO 的限制

設備 LTO 在跨文件對象內聯設備功能時特別強大。但是,在某些應用程序中,設備代碼可能都駐留在源文件中,在這種情況下,設備 LTO 沒有太大的區別。

來自函數指針的間接調用(如回調)不會從 LTO 中獲得太多好處,因為這些間接調用不能內聯。

請注意,設備 LTO 執行激進的代碼優化,因此它與使用 -G NVCC 命令行選項來啟用設備代碼的符號調試支持不兼容。

對于 CUDA 11 . 2 ,設備 LTO 只能脫機編譯。設備 LTO 中間窗體尚不支持 JIT LTO 。

-maxrregcount-use_fast_math 這樣的文件作用域命令與設備 LTO 不兼容,因為 LTO 優化跨越了文件邊界。如果所有的文件都是用相同的選項編譯的,那么一切都很好,但是如果它們不同,那么設備 LTO 會在鏈接時抱怨。通過在鏈接時指定 -maxrregcount-use_fast_math ,可以覆蓋設備 LTO 的這些編譯屬性,然后該值將用于所有 LTO 對象。

盡管使用設備 LTO 將編譯時優化所花的大部分時間轉移到了鏈接時,但總體構建時間通常在 LTO 構建和非 LTO 構建之間是相當的,因為編譯時間顯著縮短。但是,它增加了鏈接時所需的內存量。我們認為,設備 LTO 的好處應該抵消最常見情況下的限制。

試用設備 LTO

如果您希望在不影響性能或設備源代碼模塊化的情況下,以單獨的編譯模式構建 GPU 加速的應用程序,那么設備 LTO 就適合您了!

使用以單獨編譯模式編譯的設備 LTO 程序可以利用跨文件邊界的代碼優化的性能優勢,從而有助于縮小相對于整個程序編譯模式的性能差距。

為了評估和利用設備 LTO 對 CUDA 應用程序的好處, 立即下載 CUDA 11 . 2 工具包 并進行試用。另外,請告訴我們您的想法。我們一直在尋找改進 CUDA 應用程序開發和運行時性能調優體驗的方法。

關于作者

Mike Murphy 是 NVIDIA 的高級編譯工程師。

Arthy Sundaram 是 CUDA 平臺的技術產品經理。她擁有哥倫比亞大學計算機科學碩士學位。她感興趣的領域是操作系統、編譯器和計算機體系結構。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    5274

    瀏覽量

    105945
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4922

    瀏覽量

    130821
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    鴻蒙5開發寶藏案例分享---應用性能優化指南

    鴻蒙性能優化實戰指南:讓你的應用飛起來 ? 大家好!今天咱們聊聊鴻蒙(HarmonyOS)應用性能優化的實戰技巧。結合官方文檔和最佳實踐,我整理了8大核心
    發表于 06-12 17:17

    借助NVIDIA技術加速半導體芯片制造

    NVIDIA Blackwell GPU、NVIDIA Grace CPU、高速 NVIDIA NVLink 網絡架構和交換機,以及諸如 NVIDI
    的頭像 發表于 05-27 13:59 ?310次閱讀

    解決應用性能問題的策略

    性能調優貫穿于鴻蒙應用開發的整個生命周期中,開發前有性能最佳指南等賦能套件讓你快速上手學習,開發過程中有性能工具開發套件覆蓋應用開發各階段,應用開發完成上架后有專業的性能測試工具檢查測
    的頭像 發表于 04-24 11:42 ?205次閱讀
    解決<b class='flag-5'>應用性能</b>問題的策略

    使用NVIDIA CUDA-X庫加速科學和工程發展

    NVIDIA GTC 全球 AI 大會上宣布,開發者現在可以通過 CUDA-X 與新一代超級芯片架構的協同,實現 CPU 和 GPU 資源間深度自動化整合與調度,相較于傳統加速計算架構,該技術可使計算工程工具運行速度提升至原來的
    的頭像 發表于 03-25 15:11 ?604次閱讀

    借助NVIDIA GPU提升魯班系統CAE軟件計算效率

    本案例中魯班系統高性能 CAE 軟件利用 NVIDIA性能 GPU,實現復雜產品的快速仿真,加速產品開發和設計迭代,縮短開發周期,提升產
    的頭像 發表于 12-27 16:24 ?609次閱讀

    解鎖NVIDIA TensorRT-LLM的卓越性能

    Batching、Paged KV Caching、量化技術 (FP8、INT4 AWQ、INT8 SmoothQuant 等) 以及更多功能,確保您的 NVIDIA GPU 能發揮出卓越的推理性能。
    的頭像 發表于 12-17 17:47 ?766次閱讀

    《CST Studio Suite 2024 GPU加速計算指南》

    監控/利用率、選擇可用GPU卡子集等內容。 6. 故障排除:針對NVIDIA驅動安裝、多GPU設置、GPU模式、硬件識別、
    發表于 12-16 14:25

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構分析」閱讀體驗】--了解算力芯片GPU

    從而充分利用 GPU的強大計算能力。在CUDA編程模型中,GPU的計算資源被組織為線期線程塊和線程網格3級。線程是基本的執行單元,線程塊是包含多個線程的組,線程網格包含多個線程塊的組。
    發表于 11-03 12:55

    使用Arthas火焰圖工具的Java應用性能分析和優化經驗

    分享作者在使用Arthas火焰圖工具進行Java應用性能分析和優化的經驗。
    的頭像 發表于 10-28 09:27 ?1136次閱讀
    使用Arthas火焰圖工具的Java<b class='flag-5'>應用性能</b>分析和<b class='flag-5'>優化</b>經驗

    AMD與NVIDIA GPU優缺點

    在圖形處理單元(GPU)市場,AMD和NVIDIA是兩大主要的競爭者,它們各自推出的產品在性能、功耗、價格等方面都有著不同的特點和優勢。 一、性能
    的頭像 發表于 10-27 11:15 ?2227次閱讀

    有沒有大佬知道NI vision 有沒有辦法通過gpucuda來加速圖像處理

    有沒有大佬知道NI vision 有沒有辦法通過gpucuda來加速圖像處理
    發表于 10-20 09:14

    TI TDA2x SoC上基于GPU的環視優化

    電子發燒友網站提供《TI TDA2x SoC上基于GPU的環視優化.pdf》資料免費下載
    發表于 10-10 09:14 ?0次下載
    TI TDA<b class='flag-5'>2</b>x SoC上基于<b class='flag-5'>GPU</b>的環視<b class='flag-5'>優化</b>

    IB Verbs和NVIDIA DOCA GPUNetIO性能測試

    NVIDIA DOCA GPUNetIO 是 NVIDIA DOCA SDK 中的一個庫,專門為實時在線 GPU 數據包處理而設計。它結合了 GPUDirect RDMA 和 GPUDirect
    的頭像 發表于 08-23 17:03 ?1224次閱讀
    IB Verbs和<b class='flag-5'>NVIDIA</b> DOCA GPUNetIO<b class='flag-5'>性能</b>測試

    打破英偉達CUDA壁壘?AMD顯卡現在也能無縫適配CUDA

    、英特爾等廠商雖然在努力追趕,但目前還未能看到有威脅英偉達地位的可能。 ? 最近一家英國公司Spectral Compute推出了一款方案,可以為AMD的GPU原生編譯CUDA源代碼,目前正在RNDA2、RDNA3上進行規模測試
    的頭像 發表于 07-19 00:16 ?5811次閱讀

    英國公司實現英偉達CUDA軟件在AMD GPU上的無縫運行

    7月18日最新資訊,英國創新科技企業Spectral Compute震撼發布了其革命性GPGPU編程工具包——“SCALE”,該工具包實現了英偉達CUDA軟件在AMD GPU上的無縫遷移與運行,標志著在GPU計算領域,
    的頭像 發表于 07-18 14:40 ?997次閱讀
    主站蜘蛛池模板: 一本到卡二卡三卡福利 | 种子天堂bt磁力在线资源 | 四虎国产精品免费久久影院 | 无遮挡很爽很污很黄在线网站 | 天天插天天干天天射 | 国产yw855.c免费观看网站 | 日一区二区三区 | 久久精品国产精品亚洲婷婷 | 婷婷涩五月 | 国产片一级特黄aa的大片 | 在线色av | 四虎在线观看免费视频 | 黄免费视频 | 55夜色66夜色国产精品站 | bt天堂资源种子在线8 | 好大好硬好深好爽想要免费视频 | 末发育女一区二区三区 | 爱射综合 | 俺来也婷婷 | 狠狠狠色丁香婷婷综合激情 | 亚洲一区二区电影 | 四虎永久在线观看免费网站网址 | 欧美日韩无 | 亚洲一区二区三区高清视频 | 特黄一级视频 | 狠狠干天天射 | 精品午夜久久福利大片免费 | 色秀视频免费高清网站 | 中国同志chinese小彬tv | 国产婷婷色一区二区三区深爱网 | 美国一级毛片不卡无毒 | 午夜一级毛片不卡 | 四虎四虎 | 狠狠色噜噜狠狠狠狠米奇7777 | 一区在线播放 | 欧美精品一区二区三区视频 | 国产亚洲欧美成人久久片 | 天天射天天射天天射 | 天天操天天碰 | 亚洲国产午夜看片 | 3p性小说|