2016-08-03 96 views
1

我已經測試一些GPU計算樣本cudafyCudafy線程已退出,代碼爲259

我有代碼的數據,其計算/克里特保藏中心,每個環路我想要做的每一個對象在收集一些GPU操作 CODE:

public override void CountData(List<IData<int>> datas) 
{ 
     for (int i = 0; i < datas.Count; i++) 
     { 
      Execute(datas[i]); 
     }   
} 
public static void Execute(IData<int> data) 
{ 
     CudafyModule km = CudafyTranslator.Cudafy(); 

     GPGPU gpu = CudafyHost.GetDevice(CudafyModes.Target, CudafyModes.DeviceId); 
     gpu.LoadModule(km); 

     int c; 
     int[] dev_c = gpu.Allocate<int>(); // cudaMalloc one Int32 
     gpu.Launch().add(data.IntData[0], data.IntData[1], dev_c); // or gpu.Launch(1, 1, "add", 2, 7, dev_c); 
     gpu.CopyFromDevice(dev_c, out c); 


     Console.WriteLine(c + ";"); 

     gpu.Free(dev_c); 
     chromozome.Result= c; 

} 
[Cudafy] 
public static void add(int a, int b, int[] c) 
{ 
     c[0] = a + b; 
} 

此代碼爲CountData的第一個電話,但計數數據循環結束程序後,將卡和控制檯輸出說

線程0xf50已與代碼259(0x103)退出。 線程0x10c已退出,代碼爲259(0x103)。 線程0xc30已退出,代碼爲259(0x103)。 線程0xcc0已退出,代碼爲0(0x0)。 線程0x548已退出,代碼爲0(0x0)。

有enybody線索哪裏可能是問題?我嘗試gpu.Synchronize,CudafyHost.ClearDevices(),但它總是在這個錯誤結束 感謝您的幫助

編輯:一些測試後,我發現,

gpu.Launch().add(5, 3, dev_c); 

的作品,但:

gpu.Launch().add(data.IntData[0], data.IntData[1], dev_c); 

不是

+1

這是VS2013附帶的調試器中的一個錯誤。當你看到259時,你可以安全地假定線程正常結束,退出代碼爲0.通過從Debug> Windows> Threads窗口開始調試死鎖,以確保你正在尋找正確的線程。確保您啓用了非託管調試。 「調用堆棧」窗口內容至關重要,必須在問題中發佈才能獲得幫助。 –

+0

啊,好吧,我擔心別處有問題。當我發現這不是我主要的問題,我成功地在代碼的另一部分發現問題。 – kronas

回答

0

這個問題根本就沒有問題,而且這個gpu卡應該可以解決問題。我在代碼的其他部分發現錯誤。所以上面的代碼工作正常。

相關問題