Осенью 2024 года я рассказывал всё, что нужно знать про обобщённую математику в C#
Запись доклада доступна в Шарпизме 👩💻
Она появилась в 7 дотнете, а в этом ноябре уже будет релиз 10 версии.
И с тех пор очевидный ответ на вопрос "зачем" проявляется отдельными частями только сейчас
Становится очевидно, что Microsoft готовят нечто похожее на платформу для создания экосистемы AI разработки
Например, в 9 .NET появился тип данных
Tensor<> для работы с тензорами и был расширен класс TensorPrimitives, содержащий (теперь обобщённые) операции над векторными типами данных в обёртке Span'овЧто интересно эти методы разработаны так, чтобы использовать SIMD ускорения CPU в зависимости от предоставляемых возможностей (AVX, SSE и так далее)
public class ManhattanDistance<T> : IDistanceCalculator<T>
where T : unmanaged, INumberBase<T>
{
public double ComputeDistance(T[] attributesOne, T[] attributesTwo)
{
Span<T> diff = stackalloc T[Math.Min(attributesOne.Length, attributesTwo.Length)];
TensorPrimitives.Subtract(attributesOne, attributesTwo, diff);
var l1Norm = TensorPrimitives.SumOfMagnitudes<T>(diff);
return double.CreateTruncating(l1Norm);
}
}
Получается некоторая долголетняя многоходовочка из Generic Math,
Span, stackalloc и много другого, которая убивает несколько зайцев сразу:- Адепты ООП получают новый мощный архитектурный инструмент, решающий проблемы костылей из синглотонов и жалких попыток симуляции ad-hoc полиморфизма
- Microsoft приближается ещё на один шаг к обретению конкурентоспособности на рынке ML разработки, добиваясь возможности разработки глубоких моделей, чтобы нейросети тренировали не на Python, а на C#
- Любителям Производительности закрывают вопрос ускорения вычислений на
Span, который не оптимизируется JIT'ом так, как массив или списокЧто дальше, Гейтс и Наделла?
Ставьте 🔥 и ❤️ на пост, чтобы я написал пост про Generic Math в действии