.Net Core阻止+ =运算符期间的内存分配

时间:2019-09-26 18:18:13

标签: c# operator-overloading

我已经完成了使用内部函数优化C ++库的工作。由于.Net核心现在至少支持使用不安全操作的内部函数,因此我将了解为.net核心编写基本的数学/张量库。我正在编写基准测试。我现在专注于将一些基本操作集成到Tensor对象中。通常,处理临时工将是难题的重要组成部分。我知道在C ++中,一些中间对象有一些技巧,可以防止某些重新分配。好奇是否有一种方法可以诱骗C#在出现+ =时阻止分配。否则,我将只包含SelfAdd方法并继续。

using VM.Math;
using System;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

namespace VM.Math;
{
    public class Tensor
    {
        private AlignedFloatArray data;
        public Shape Shape { get; private set; }

        Tensor SelfAdd(float x)
        {
            VM.Add(data,x,data);
            return this;
        }

        public static Tensor operator+(Tensor a, float b)
        {
            Tensor result = new Tensor(a.Shape);
            VM.Add(a.data,b,result.data);
            return result;
        }

        public static Tensor operator+(float a,Tensor b)
        {
            Tensor result = new Tensor(b.Shape);
            VM.Add(b.data,a,result.data);
            return result;           
        }

        public Tensor(Shape shape)
        {
            Shape = new Shape(shape);
            data = new AlignedFloatArray(Shape.Elements);
        }

        public Tensor(params int[] shape)
        {
            Shape = new Shape(shape);
            data = new AlignedFloatArray(Shape.Elements);
        }
    }
}

0 个答案:

没有答案