.Net Core предотвращает выделение памяти во время оператора + = - PullRequest
1 голос
/ 26 сентября 2019

Я немного поработал в 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...