- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个相当复杂的内核。事实证明,我需要传递超过 16 个参数,显然 Alea GPU 有 16 个参数的限制。 ( http://quantalea.com/static/app/manual/reference/alea_cuda_il/alea-cuda-il-ilgpumodule.html )
我知道从 16 个参数开始听起来不是个好主意……还有哪些其他选择?在普通代码中,我当然会将这些东西包装到它自己的类中,但在 GPU 代码中我能做什么呢?
最佳答案
在这种情况下,您可以通过GPUModule.GPUEntities
检索一个未类型化的内核对象。属性,然后将这些参数放入 Object
的列表中输入,然后你就可以启动它了。
您还可以为此目的制作一些扩展方法并使它们类型安全,这是一个示例,为了简单起见我只使用了 3 个参数:
public static class GPUModuleExtensions
{
public static void MyGPULaunch<T1, T2, T3>(
this ILGPUModule module,
Action<T1, T2, T3> kernelD, LaunchParam lp,
T1 arg1, T2 arg2, T3 arg3)
{
// get the kernel object by method name
var kernel = module.GPUEntities.GetKernel(kernelD.Method.Name).Kernel;
// create parameter list (which is FSharpList)
var parameterArray = new object[] {arg1, arg2, arg3};
var parameterList = ListModule.OfArray(parameterArray);
// use untyped LaunchRaw to launch the kernel
kernel.LaunchRaw(lp, parameterList);
}
}
public class GPUModule : ILGPUModule
{
public GPUModule() : base(GPUModuleTarget.DefaultWorker)
{
}
[Kernel]
public void Kernel(deviceptr<int> outputs, int arg1, int arg2)
{
var tid = threadIdx.x;
outputs[tid] = arg1 + arg2;
}
[Test]
public void Test()
{
const int n = 32;
var lp = new LaunchParam(1, n);
using (var outputs = GPUWorker.Malloc<int>(n))
{
this.MyGPULaunch(Kernel, lp, outputs.Ptr, 1, 3);
Console.WriteLine("{0}", (outputs.Gather())[4]);
}
}
}
请注意,在此示例中,我使用 Action<T1,T2,T3>
,但是 Action
type 最多有 16 种类型,因此您可能需要定义自己的委托(delegate)来传递超过 16 种参数类型。
关于c# - 在 Alea.GPU 中传递超过 16 个内核参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165759/
我正在踏上激动人心的 GPU 编程之路,如果我要进行一些重量级的数字运算,我想使用现有的最佳库。我特别想在 F# 环境中使用 cuBLAS。 CUDAfy 提供了他们解决方案中的全套驱动程序,我也一直
我正在尝试使用 Alea 来加速我正在处理的程序,但我需要一些帮助。 我需要做的是对存储在两个数组中的值进行大量的位计数和按位运算。 对于第一个数组的每个元素,我必须对第二个数组的每个元素执行按位 &
我一直在尝试使用 Alea GPU 在 F# 中编写并行 Floyd-Warshall 算法,并以另一个用户在此处提供的 CUDA 代码为基础 The Floyd-Warshall algorithm
我正在尝试使用 ALEA 库将递归算法从 CPU 转换为 GPU。如果我构建代码,我会收到以下错误: “Fody/Alea.CUDA:AOTCompileServer 意外退出,退出代码为 -1073
我有一个关于 Alea Gpu 的运行时 问题,它找不到所有相关文件(我猜是 dll)。作为 .NET 的新手,当它不能开箱即用时,我很难找出正确的路径,所以如果有人可以根据我在下面给出的路径给我一些
我正在尝试编写一个相当复杂的内核。事实证明,我需要传递超过 16 个参数,显然 Alea GPU 有 16 个参数的限制。 ( http://quantalea.com/static/app/manu
我正在尝试访问 System.Collections.Generic.IList 的值在Alea.Gpu.Default.For 之外声明. [GpuManaged] private void Eva
我正在尝试使用 Alea GPU 库中的 Gpu.Default.For,但我一直收到异常: i32 is not a struct type error. 这个错误是什么意思,为什么我用这个简单的
我在编译 Alea GPU 教程时遇到错误:https://github.com/quantalea/AleaGPUTutorial在 .Net 4.5 运行时上使用 FSharp.Core 版本 4
我是一名优秀的程序员,十分优秀!