C# 加速3X3或26X26内核

C# 加速3X3或26X26内核,c#,performance,convolution,C#,Performance,Convolution,有人对如何在C#中加速3X3或26X26内核有什么建议吗 我相信一定有更好的方法来实现这一点,而不是通过循环数组中的每个元素并调用Laplacian3D() Parallel.For(0,field3D.XDimensions,paraOpts,i=> { 对于(int j=0;j

有人对如何在C#中加速3X3或26X26内核有什么建议吗

我相信一定有更好的方法来实现这一点,而不是通过循环数组中的每个元素并调用
Laplacian3D()

Parallel.For(0,field3D.XDimensions,paraOpts,i=>
{
对于(int j=0;j

有人有什么好的建议吗?

取决于
NextField
Laplacian3
正在做什么,你可以利用。Theodor的想法听起来不错,但你也可能对一些GPU加速感兴趣。看看。@TheodorZoulias Laplacian正在我自己的向量类的一个26X26邻域上执行一个并行平均值过滤器。下一个字段只存储一个自定义类。那么,您所引用的Vector类应该是非常受性能驱动的吗?我注意到它是一个不可变的类型。我知道名称空间existed@VictorOrtuondo谢谢你的链接!而且它看起来非常可靠,您以前使用过吗?通常使用SIMD时,在一个内核中运行计算的性能比在4个内核中并行运行相同计算的性能要好一些。SIMD意味着在多个数据中执行单个指令,因此并行性发生在单个内核中。计算速度非常快,您可能会发现自己受到其他因素的限制,如RAM的带宽。在我的电脑中,只有当我取消选中“首选32位”编译选项时,该属性才变为真。
Parallel.For(0, field3D.XDimensions, paraOpts, i =>
{
    for (int j = 0; j < field3D.YDimensions; j++)
    {
        for (int k = 0; k < field3D.ZDimensions; k++)
        {
            field3D.NextField[i, j, k].FitnessVector = (1 - decayT) * Laplacian3D(i, j,k, field3D);
         }
     }
});