2016-08-03 53 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卡应该可以解决问题。我在代码的其他部分发现错误。所以上面的代码工作正常。

相关问题