2013-02-10 230 views
0

我想知道是否有一種方法可以查看給定內核中的所有變量值,例如threadIdx.x = 1當前正在工作的數據以及該數據的值是什麼?如何在VS 2010中使用Nvidia NSight查看CUDA線程值?

所有工作正常,所以我的問題是怎麼看的變量,例如,你可以在正常VS做,使用「快速查看」或「添加表」,什麼是他們相當於NSight? 謝謝,現在一直在掙扎幾個小時。

我有CUDA信息窗口和CUDA經窗口僅顯示blockIdx,threadIDx通過NSight調試運行時的座標。

__global__ void addKernel(int *c, const int *a, const int *b) 
{ 
    int i = threadIdx.x; 

    if(i<N) 
     c[i]=a[i]*b[i]; 
    // DUmmy code 
    if(i<2) 
    int k=i; 
} 

我的內核被稱爲像這樣addKernel<<<1,N>>>(dev_c,dev_a,dev_b)和我#DEFINEñ10

我把裏面的斷點if和else。經線窗口中的輸出設置爲顯示:

*(a+i) *(b+i) *(c+i) i 

0   0  -1  0 
2   1  -1  1 
4   4  -1  2 
6   9  -1  3 
8   16  -1  4 

所以,我的c永遠不會成立。怎麼會這樣? 謝謝

附:當我看到我得到-1的問題時,那些會給我帶來負面影響的人會放棄嗎?再次感謝

+0

http://http.developer.nvidia.com/NsightVisualStudio/2.2/文檔/ UserGuide/HTML/Content/CUDA_Warp_Watch.htm – talonmies 2013-02-10 14:41:39

+0

是的,我知道CUDA Info和Warp窗口在哪裏,但是當我放置一個斷點時它不會如何變數。是你的代碼和輸出 – 2013-02-10 19:46:09

+0

你好,你現在可以看看,謝謝 – 2013-02-10 20:27:51

回答

1

在我的內核中添加了一些虛擬行後,我可以看到c列的值已更新。所以,這是解決方案。我知道這聽起來微不足道,但我有嘗試之前添加虛擬行,它不工作,除非額外的虛擬行是其他變量,而不是用於計算c的線程。因此,簡而言之,計算新線程(或者任何可以在內核中使用的新線程),並將這些額外的線添加到您希望在CUDA Warp窗口中看到的變量之後。

0

對555米GT相同的問題與計算能力2.1(C [1] = 0)。具有Compute Capability 3.0的GTX 660顯示正確的值,但有時c [i] = -1。

隨着「啞」行它工作得很好在任何情況下(斷點線C [1] = C [1])。

__global__ void addKernel(int *c, const int *a, const int *b) 
{ 
    int i = threadIdx.x; 
    c[i] = a[i] + b[i]; //if breakpoint will be here c[i] = -1 or 0 
    c[i] = c[i]; //breakpoint here guarantees c[i] is correct 
} 
1

的Nsight VSE CUDA調試器支持幾乎所有的Visual Studio調試工具窗口,包括變量視圖,觀察窗內存意見,調用堆棧視圖和斷點視圖。這些可以從Debug |打開Visual Studio中的Windows菜單。

爲了看看值特定線程,你將不得不設定定義爲感興趣的特定線程ID真的條件,一個條件斷點。

請參閱在Nsight VSE以下主題手冊

  1. Walkthrough: Debugging a CUDA Application
  2. Set GPU Breakpoint
  3. View Variables
相關問題