Cudafy 线程已退出,代码为 259
Cudafy The thread has exited with code 259
我已经用 cudafy 测试了一些 GPU 计算样本
我有 compute/creta 数据集合的代码,每个循环我想对集合中的每个对象执行一些 GPU 操作
代码:
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,但在 Count 数据循环结束后程序将卡住并且控制台输出显示
线程 0xf50 已退出,代码为 259 (0x103)。
线程 0x10c 已退出,代码为 259 (0x103)。
线程 0xc30 已退出,代码为 259 (0x103)。
线程 0xcc0 已退出,代码为 0 (0x0)。
线程 0x548 已退出,代码为 0 (0x0)。
有人知道问题出在哪里吗?我尝试 gpu.Synchronize, CudafyHost.ClearDevices() ,但它总是以这个错误结束
感谢帮助
编辑:经过一些测试我发现
gpu.Launch().add(5, 3, dev_c);
有效但是:
gpu.Launch().add(data.IntData[0], data.IntData[1], dev_c);
不是
感谢 Hans Passant,他指出这根本不是问题,GPU 卡应该可以正常工作。我在代码的其他部分发现了错误。所以上面的代码工作正常。
我已经用 cudafy 测试了一些 GPU 计算样本
我有 compute/creta 数据集合的代码,每个循环我想对集合中的每个对象执行一些 GPU 操作 代码:
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,但在 Count 数据循环结束后程序将卡住并且控制台输出显示
线程 0xf50 已退出,代码为 259 (0x103)。 线程 0x10c 已退出,代码为 259 (0x103)。 线程 0xc30 已退出,代码为 259 (0x103)。 线程 0xcc0 已退出,代码为 0 (0x0)。 线程 0x548 已退出,代码为 0 (0x0)。
有人知道问题出在哪里吗?我尝试 gpu.Synchronize, CudafyHost.ClearDevices() ,但它总是以这个错误结束 感谢帮助
编辑:经过一些测试我发现
gpu.Launch().add(5, 3, dev_c);
有效但是:
gpu.Launch().add(data.IntData[0], data.IntData[1], dev_c);
不是
感谢 Hans Passant,他指出这根本不是问题,GPU 卡应该可以正常工作。我在代码的其他部分发现了错误。所以上面的代码工作正常。