簡體   English   中英

VS107 中 OpenMP C++ 代碼的性能和分析

[英]Performance and profiling of OpenMP C++ code in VS107

我在 Visual Studio 2017 中運行了一段對性能至關重要的 C++ 代碼,我一直在對其進行分析以尋找潛在的瓶頸。 概要分析器顯示,在我執行此代碼的八個內核中,大約 80% 的 CPU 使用率。 加載了所有內核符號后,分析器顯示最繁忙的函數是 NTYieldExecution,使用率為 52%。 NTYieldExecution 我的猜測是這 52% 是不正確的,可能是一個線程的 52%,但即便如此,我還是很想知道幕后發生了什么。 我也有自己的線程池代碼,這導致其他代碼的 CPU 使用率為 100%,所以我想知道是否將此代碼移動到替代多線程模型。 OpenMP 很方便,但是在 Visual Studio 2017 中效率低下嗎? 更重要的是,是否有可能隔離和消除任何此類低效率?

事實證明,問題是在這種情況下,多線程代碼的一部分無意中寫入了 OpenMP 部分范圍之外的變量,這反過來導致自動插入鎖,如 PartialBarrierN 所示: :堵塞。 我通過將其更改為更局部的變量來解決此問題,這導致顯着的加速和 100% 的 CPU 使用率。

暫無
暫無

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

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