let sumModule = (new DeviceSumModuleF32(GPUModuleTarget.Worker(worker))).Create(2e2 |> int)
let t = worker.Malloc([|1.0f;1.0f;1.0f;1.0f;|])
let q = sumModule.Reduce(t.Ptr,4)
毫无疑问,上述代码每次运行最后一行的概率约为 66%。我试过改变参数,但没有区别。我认为 DeviceSumModuleF32 可能坏了。
let sumModule = (new DeviceReduceModule<float32>(GPUModuleTarget.Worker(worker),<@ (+) @>)).Create(2e9 |> int)
let t = worker.Malloc([|1.0f;1.0f;1.0f;1.0f;|])
let q = sumModule.Reduce(t.Ptr,4)
上面的工作使用 DeviceReduceModule 非常好。
编辑:我应该写它不是崩溃,而是进入无限循环。对于那个很抱歉。