Я немного поработал в 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);
}
}
}