我已经完成了使用内部函数优化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);
}
}
}