簡體   English   中英

如何解釋NVIDIA Visual Profiler分析/建議?

[英]How to interpret NVIDIA Visual Profiler analysis/recommendations?

我是CUDA的新手,目前正在研究一個項目,該項目旨在加速具有gpu附件(NVIDIA TX1)的嵌入式系統中的計算機視覺應用程序。 我想做的是在兩個庫之間進行選擇:OpenCV和VisionWorks(包括OpenVX)。

目前,我已經編寫了運行Canny Edge Detection算法的測試代碼,並且這兩個庫顯示出不同的執行時間(VisionWorks實施節省了大約30%至40%的時間)。

因此,我想知道原因可能是什么,因此剖析了耗時最多的內核:來自OpenCV4Tegra的'canny :: edgesHysteresisLocalKernel',它占據了整個應用程序的37.2%(來自OpenCV實現和VisionWorks實現),並且VisionWorks的“ edgesHysteresisLocal”。

我遵循了“指導性分析”,分析器建議應用程序都受延遲限制,以下是VisionWorks的“ edgesHysteresisLocal”和OpenCV4Tegra的“ canny :: edgesHysteresisLocalKernel”的捕獲。

OpenCV4Tegra-canny :: edgesHysteresisLocalKernel

VisionWorks-edgeHysteresisLocal

所以,我的問題是

  • 從分析中,我能告訴我不同​​表現的原因嗎?

  • 此外,在一般情況下對CUDA應用程序進行性能分析時,從哪里開始是一個好點? 我的意思是,有很多指標,很難說出要看的內容。

  • 一般而言,是否有一些有關分析CUDA應用程序的教育材料? (我看了許多來自NVIDIA的幻燈片,我認為它們只是在說明指標的定義,而不是一般的起點。)

-順便說一下,據我所知,NVIDIA不提供VisionWorks和OpenCV4Tegra的源代碼。 如果我錯了糾正我。

預先感謝您的回答。

1/2個庫之間的shared_memory用法不同,這可能是導致性能差異的原因。


2 /通常使用三個指標來了解我的算法是否針對CUDA設備進行了正確編碼:

  • 內核的內存使用情況(帶寬)
  • 使用的寄存器數量:是否有寄存器溢出?
  • 共享內存庫沖突量

3 /我認為互聯網上有很多東西。


另一件事 :

如果您只是想比較一個庫與另一個庫的使用情況以選擇最佳庫,那么為什么需要了解每個實現(這很有趣,但不是先決條件)?

為什么不根據指標(假陽性,已知結果集的平均誤差,...)用周期時間和產生的結果的質量來衡量算法性能?

暫無
暫無

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

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