我正在尝试使用 Alea Gpu 在 Alea.LibParallel.KernelScan 库中提供的 AllInOne<> 函数。但是我一直遇到这个错误:
System.Exception:'共享数组的长度必须是内核编译时常量。
这是我用来调用函数的代码:
int[] scanInput = new int[100];
for(int i = 0; i <100; i++)
{
scanInput[i] = 100;
}
int[] scanOut = new int[100];
var scanInGPU = gpu.AllocateDevice(scanInput);
var scanOutGPU = gpu.AllocateDevice(scanOut);
var scanOutPtr = scanOutGPU.Ptr;
var scanInPtr = scanInGPU.Ptr;
Func<int, int, int> op = new Func<int, int, int>((a, b) => { return a + b; });
LaunchParam lp = new LaunchParam(griddim, blockdim);
sesh.Launch(KernelScan.AllInOne, lp, 2, 50, op, 0, scanOutPtr, scanInPtr, 0, 100);
有没有办法让这个函数工作,所以我可以从另一个运行在 GPU 上的内核中调用它?还是我必须编写自己的扫描内核?
我不能使用 GPUExtension.Scan() 函数,因为无法从已经运行的内核中调用它,但是使用此函数应该可以。