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 を使用して完全に機能します。
編集:クラッシュする代わりに、無限ループに入ると書くべきでした。申し訳ありません。