您可以偵錯在圖形處理單元 (GPU) 上執行的 C++ 程式碼。 Visual Studio 中的 GPU 偵錯支援包括競爭偵測、啟動進程並附加至它們,以及整合到偵錯視窗中。
支援的平台
Windows 7、Windows 8、Windows 10、Windows 11、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2016 支援偵錯。 若要在軟體模擬器上偵錯,Windows 8、Windows 10、Windows 11 或 Windows Server 2012,需要 Windows Server 2016。 若要在硬體上進行偵錯,您必須安裝顯示卡的驅動程式。 並非所有硬體廠商都會實作所有偵錯工具功能。 如需限制,請參閱廠商文件。
備註
想要在 Visual Studio 中支援 GPU 偵錯的獨立硬體廠商必須建立 DLL,以實作 VSD3DDebug 介面,並以自己的驅動程式為目標。
設定 GPU 除錯
偵錯工具無法在相同的應用程式執行中同時中斷 CPU 程式碼和 GPU 程式碼。 根據預設,偵錯工具會在 CPU 程式碼上中斷。 若要偵錯 GPU 程式碼,請使用下列兩個步驟之一:
在 [標準] 工具列的 [偵錯類型] 清單中,選擇 [僅限 GPU]。
在 [方案總管] 中,在專案的捷徑功能表上,選擇 [屬性]。 在 [屬性頁面] 對話方塊中,選取 [偵錯],然後在 [偵錯工具類型] 清單中選取 [僅限 GPU]。
啟動並附加至應用程式
您可以使用 Visual Studio 偵錯命令來啟動和停止 GPU 偵錯。 如需詳細資訊,請參閱 使用偵錯工具瀏覽程式碼。 您也可以將 GPU 偵錯工具附加至執行中的進程,但前提是該進程執行 GPU 程式碼。 如需詳細資訊,請參閱 附加至執行中的進程。
將目前的區塊運行至游標,然後運行到游標
當您在 GPU 上進行程式偵錯時,有兩個選項可以執行至游標位置。 這兩個選項的命令都可以在程式碼編輯器的捷徑功能表上使用。
[執行至游標] 命令會執行您的應用程式,直到它到達游標位置,然後中斷。 這並不表示目前執行緒會執行至游標;相反,它表示到達游標點的第一個執行緒會觸發中斷。 請參閱使用 偵錯工具瀏覽程式碼
[將 目前磚執行至游標] 命令會執行您的應用程式,直到目前磚中的所有執行緒都到達游標,然後中斷為止。
偵錯視窗
藉由使用特定偵錯視窗,您可以檢查、標記及凍結 GPU 執行緒。 如需詳細資訊,請參閱:
資料同步處理例外狀況
偵錯工具可以在執行期間識別數個資料同步處理條件。 偵測到條件時,偵錯工具會進入中斷狀態。 您有兩個選擇——中斷 或 繼續。 藉由使用 [例外狀況] 對話方塊,您可以設定偵錯工具是否偵測到這些條件,以及它會中斷的條件。 如需詳細資訊,請參閱 使用偵錯工具管理例外狀況。 您也可以使用 [選項] 對話方塊來指定偵錯工具應該忽略例外狀況,如果寫入的資料不會變更資料的值。 如需詳細資訊,請參閱 [一般]、[偵錯]、[選項] 對話方塊。
故障排除
指定加速器
只有在程式碼執行於 accelerator::direct3d_ref (REF) 加速器上時,GPU 程式碼中的中斷點才會命中。 如果您未在程式碼中指定加速器,則會自動選取 REF 加速器作為專案屬性中的 偵錯加速器類型 。 如果您的程式碼明確選擇了一個加速器,則在偵錯期間不會使用 REF 加速器,除非您的 GPU 硬體具有偵錯支援,中斷點才會被觸發。 您可以撰寫程式碼來修正此問題,使其在偵錯期間使用 REF 加速器。 如需詳細資訊,請參閱專案屬性、使用加速器和accelerator_view物件以及C++ 偵錯設定的專案設定。
條件式中斷點
在 GPU 程式碼中支援條件式中斷點,但不是每個運算式都可以在裝置上進行評估。 當運算式無法在裝置上評估時,會在偵錯工具上評估。 偵錯工具的執行速度可能比裝置慢。
錯誤:選取的偵錯加速器類型存在設定問題。
當專案設定與您要偵錯之電腦的組態不一致時,就會發生此錯誤。 如需詳細資訊,請參閱 C++ 偵錯設定的專案設定。
錯誤:目標電腦上未安裝所選偵錯加速器類型的偵錯驅動程式。
如果您在遠端電腦上進行偵錯,就會發生此錯誤。 偵錯工具在執行階段之前無法判斷驅動程式是否安裝在遠端電腦上。 驅動程序可從顯卡製造商處獲得。
錯誤:必須在遠端網站停用逾時偵測和復原(TDR)。
C++ AMP 計算可能會超過 Windows 逾時偵測和復原程式 (TDR) 所設定的預設時間間隔。 發生這種情況時,計算會取消,資料也會遺失。 如需詳細資訊,請參閱 在 C++ AMP 中處理 TDR。