Cudafy线程已退出,代码为259

本文关键字:代码 退出 线程 Cudafy | 更新日期: 2023-09-27 18:00:09

我已经用cudafy 测试了一些GPU计算样本

我有计算数据集合的代码,我想对集合中的每个对象执行的每个循环都有一些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)。

enybody知道哪里可能有问题吗?我尝试gpu。同步,CudafyHost。ClearDevices(),但它总是以此错误结束感谢的帮助

编辑:经过一些测试,我发现

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

有效,但:

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

不是

Cudafy线程已退出,代码为259

Tahnks对Hans Passant说,这根本不是问题,gpu卡应该能解决这个问题。我发现代码的其他部分有错误。所以上面的代码运行良好。