Информация об изменениях

Сообщение Re[28]: .Net на эльбрусах от 07.09.2022 18:40

Изменено 07.09.2022 18:55 vdimas

Re[28]: .Net на эльбрусах
Здравствуйте, Sinclair, Вы писали:

S>Что сдерживает вас от написания трёх строчек кода?


Публикуемый своей рукой код желательно сначала проверить лично.

Чтобы не запутаться, где какая переменная итерируется, берём матрицы разных размерностей (L, M и N как в вики):

Пусть даны две прямоугольные матрицы A и B размерности l х m и m х n соответственно.
Тогда матрица C размерностью l x n, в которой:

называется их произведением.


В переменных i, j, k это будет:


unsafe {
    const int L = 2, M = 3, N = 4;

    var a = stackalloc float[L * M] {
        1,  2,  3,
        4,  5,  6
    };

    var b = stackalloc float[M * N] {
        1,  2,  3,  4,
        5,  6,  7,  8,
        9, 10, 11, 12
    };

    var c = stackalloc float[L * N];

    for(var k = 0; k < L; k++)
        for(var j = 0; j < N; j++)
            for (var i = 0; i < M; i++)
                c[k * N + j] += a[k * M + i] * b[i * N + j];

    for(var i = 0; i < L; i++) {
        if(i != 0)
            Console.WriteLine();

        for(var j = 0; j < N; j++) {
            if(j != 0)
                Console.Write(", ");

            Console.Write(c[i * N + j]);
        }
    }

    Console.WriteLine();
}



V>>Да без проблем — допили тот код до работы с произвольными размерами матриц и замерь.

V>>Дай бог получить результаты как у интеловской либы, а замеров по ней в сети хватает.
S>Интеловская либа, судя по найденным мной статьям — ещё не предел.

Боюсь, для того самого общего случая, т.е. стандарта BLAS — предел.


V>>А как они могут гоняться совместно? ))

S>Ну, вас же не смутила ссылка, где совместно гоняется EML и наивный код на Интеле.

Потому что хватает ссылок, где наивный код сравнивается с EML.
Я просмотрел пару таких ссылок, везде ускорение примерно в 10 раз (плюс-минус проценты), позволил себе сделать соотв. прикидки от обсуждаемых цифр.


S>При этом, когда я пишу интринсики, они компилируются ровно в нужные мне векторные команды. А не случайно параллелятся компилятором в зависимости от фазы луны.


Или в зависимости от опции компилятора для целевой архитетуры.
В общем, зря тут упираешься.


V>>Это тебе нет, хотя конкретно тебе говорили, как оно будет, и оно так и было.

V>>Зато ты фантазировал безудержно, помнится.
V>>(не только ты, но ты громче всех)
S>И в итоге оказалось, что всё произошло так, как я говорил, хоть и не сразу

Пока что мало чего произошло, оно только-только начинает происходить (заметные подвижки начались с 5-го и 6-го дотнета ) и это очень надолго.
Тебе сразу говорилось, что до твоей пенсии ты своё светлое будущее не застанешь.

Я приводил в пример чистые ФП-языки, которые дают намного больше простора для бета-редукций, но за ~15 лет активных телодвижения результаты были слишком скромные на середину нулевых.
Уже более 30-ти лет примерно с теми же результатами.

А жить надо было как-то здесь и сейчас, и ближайшие лет 10 (твои прогнозы) каким-то образом тоже.
Вот почему я считал ошибкой ту стратегию, что MS примерно на 8-10 лет натурально забило на нейтив.

Помнишь проект Avalon и фантазии, что всё GUI в будущих Windows будет managed?
В итоге в 8-х виндах они докрутили С++ компилятор до возможности оперировать расширенной метаинформацией (банально атрибутами и некоторыми типами, которые компилятор "знает в лицо") — и ву а ля, менее чем за год разработали подсистему GUI UWP, которую Avalon с нужной эффективностью так и не породил за ~6 лет.

А которые C# UWP-приложения — там лишь тонкая обёртка над нейтивной подсистемой, и оно пашет в разы шустрее, чем WPF, да еще в памяти чуть ли не на порядок меньше мусора.
Боюсь, что по этому вопросу "наша" точка зрения победила даже не до твоей пенсии, а до конца твоей жизни.

И что меня раздражало в оппонентах (не только в тебе) — я подробно разбирал низкоуровневую механику WPF и объяснял почему так — загвоздка в вызове пайплайна подсистемы GUI, в необходимости осуществлять тысячи вызовов низлежащего рендерера (а для последних версий DirectX вызовов еще больше, хотя сами вызовы легковесней).
И в этом месте дотнет сильно проседает из-за дороговизны вызова нейтивных ф-ий.

Как они выкрутились в WPF — со стороны C# идёт сериализация команд в некий байт-буфер, отправка сериализованных команд в специальный поток, обслуживаемый нейтивной библиотекой.
В этом потоке нейтивный код десериализует команды, пакеты вида { код_операции, операнды... } и по таблице кодов команд вызывает соотв. методы-адаптеры, которые, в свою очередь, вызывают ф-ии низлежащего GUI с поданными в сообщении аргументами.

И так вышло, что обход графа со стороны C# с сериализацией, что динамический расчёт лейаута, что применение стилей — всё на стороне C# почему-то тормозит и жрёт ресурсы.
Плюс задержки с сериализацией и передачей сцены нейтивной либе.

Как эти ограничения переплюнуть точному GC — лично я ума не приложу.
Плюс соображения интероперабельности с другими языками/технологиями — они все умеют взаимодействовать с нейтивом тем или иным образом изкаробки, бо все поверх нейтива пашут.
Но как взаимодействовать с АПИ дотнета — вопрос вопросов.

Поэтому, совершенно согласен с тем, что на сторону C# надо отдавать только биндинги к св-вам и событиям GUI-компонент и не более того.
И точно так же для любых других "высокоуровневых" технологий.

Здесь подход мало чем отличается от биндинга Питоновских либ к нейтивным BLAS-либам.

Так вот, подводя жирную черту под всеми этими фапаниями на несостоявшийся Avalon когда-то:
— технологии навроде дотнета/джавы важны и нужны, хотя бы по той причине, что работают лучше скриптовых языков/сред, являясь порой более удобными/легкими в разработке;
— но такие технологии не должны были претендовать на исключительное своё положение, тем более в первые же годы своей жизни;
— архитектура компонент и низлежащие принципы работы WPF заведомо антиинженерные, такие решения могли быть приняты только через ангажированность/болтологию/веру в близкое светлое мега-будущее.

Я много и глубого исследовал Рефлектором дотнет когда-то, сейчас регулярно пасусь на гитхабе проекта, да и вообще не представляю себе работу без решарпера, который сам подгружает дебаг-информацию и дизассемблирует сборки.

Почти всегда мне понятны мотивы принятых тех или иных решений (хотя местами улыбали явно индусские мотивы, но это обычно был не самый критичный код).
Однако, рассматривая внутренности WPF я только за голову хватался...
Собсно, будучи сам поначалу интузиастом дотнета в этом месте я сильно к дотнету охладел. ))

Ну и, люди, навроде тебя (Влад, AVK и прочие) своими речами наглядно мне продемонстрировали, как и почему подобные грубейшие архитектурные ошибки проползают в ведущие технологии. А технология WPF на момент разработки пророчилась в кач-ве ведущей для GUI.

Всё вместе это болото, токсичность, невозможность поступления свежего воздуха, как грится, невозможность даже просто предметно дискутировать.
Секта.

И вот так оно в кач-ве секты с 98-го (год начала разработки) до 2017-го (т.е. почти 20 лет) и просуществовало.
А потом эту секту грубо разогнали нафик и подтянули простых работяг, не замутнённых никакими предрассудками.
Почитывал периодически блог руководителя дотнетного направления (уже забыл как его), был рад, что его турнули.
Он писал всё правильно, но всё не о том...
Какой-то разрыв первого рода м/у пониманием требований разработчиков разных складов и подходов к задачам, ограничений современных архитектур и возможностей своей команды.
Маниловщина в чистом виде...

Например, такого пошиба типчик не выжил бы в тех условиях, в которых работаю я, он довольно быстро зарекомендовал себя как болтун низкой полезности и почти нулевого выхлопа.
Боже, его эксперименты с кодом были до того идиотскими в своей наивности, что я порой был в шоке, как он вообще на эту должность попал и почему так долго продержался.

Даже если сам чел был не идиот, но взятый им тон был для идиотов.
А значит, вольно или невольно таковым было позиционирование результатов работы его команды.

Было всё это видно еще тогда? — конечно было.
Периодически об этом говорилось, вы в привычной манере язвительно (т.е. контрпродуктивно) огрызались.
Со стороны — секта, ноль практичности, игнор насущных требований разрабов.


V>>Джава давно повернулась лицом к опенсорсу, но огромного кол-ва ревьюверов джава-машинки я не наблюдаю.

S>А я — наблюдаю. Просто вы не вращаетесь в тех кругах, где принято пилить JVM.

Э, нет, я одно время (пару лет назад) наблюдал весьма плотно, поплотнее, чем за дотнетом.
(у нас есть версия продукта и для Джавы)

В экосистеме Джавы в разработке высокоуровневого энтерпрайз г-на народу пасётся прилично и ротация имеется, но на низком уровне одни и те же лица чуть ли не десятилетиями, любопытство со стороны минимальное.
Это приплызд.

В дотнете постоянно сыплют предложениями случайные люди и поток этот неиссякаем.
(сам репортил как ошибки, так и предлагал исправления/улучшения)


V>>Если джава не повторит за дотнетом поворачивание лицом к таким людям — постепенно уйдёт примерно туда же, куда ушел популярный когда-то Perl.

S>Увы, не уйдёт. Но это оффтоп к данной дискуссии.

Про Перл тоже так думали, бо вменяемых альтернатив не было полтора десятилетия.
Но чуть заматерел Питон, потом выстрелил сразу же мощно JS-node — и досвидан.

Я не утверждаю асболютно, я говорю "если".
Ввели же генерики в Джаве, подсуетились... ))

И почему оффтоп в теме ".Net на Эльбрусах"?
Конкурент номер один дотнету — Джава.
Судьба дотнета во многом будет зависеть от судьбы Джавы и наоборот.


V>>Сначала стали контрибутить нейтивные фишки, и только затем подтянулась широкая общественность.

V>>Т.е. между тем, как открыли в опенсорс и тем, как подтянулось приличное кол-во людей, прошло прилично времени.
S>Хм. А кто контрибутил нейтивные фишки?

Изначально программисты MS, у которых почему-то стоит C/C++ в профиле.
Т.е. подкинули в проект портирования дотнета на линуха плюсовиков, по понятной причине.
И вот тут всё заверте...
Re[28]: .Net на эльбрусах
Здравствуйте, Sinclair, Вы писали:

S>Что сдерживает вас от написания трёх строчек кода?


Публикуемый своей рукой код желательно сначала проверить лично.

Чтобы не запутаться, где какая переменная итерируется, берём матрицы разных размерностей (L, M и N как в вики):

Пусть даны две прямоугольные матрицы A и B размерности l х m и m х n соответственно.
Тогда матрица C размерностью l x n, в которой:

называется их произведением.


В переменных i, j, k это будет:


unsafe {
    const int L = 2, M = 3, N = 4;

    var a = stackalloc float[L * M] {
        1,  2,  3,
        4,  5,  6
    };

    var b = stackalloc float[M * N] {
        1,  2,  3,  4,
        5,  6,  7,  8,
        9, 10, 11, 12
    };

    var c = stackalloc float[L * N];

    for(var k = 0; k < L; k++)
        for(var j = 0; j < N; j++)
            for (var i = 0; i < M; i++)
                c[k * N + j] += a[k * M + i] * b[i * N + j];

    for(var i = 0; i < L; i++) {
        if(i != 0)
            Console.WriteLine();

        for(var j = 0; j < N; j++) {
            if(j != 0)
                Console.Write(", ");

            Console.Write(c[i * N + j]);
        }
    }

    Console.WriteLine();
}



V>>Да без проблем — допили тот код до работы с произвольными размерами матриц и замерь.

V>>Дай бог получить результаты как у интеловской либы, а замеров по ней в сети хватает.
S>Интеловская либа, судя по найденным мной статьям — ещё не предел.

Боюсь, для того самого общего случая, т.е. стандарта BLAS — предел.


V>>А как они могут гоняться совместно? ))

S>Ну, вас же не смутила ссылка, где совместно гоняется EML и наивный код на Интеле.

Потому что хватает ссылок, где наивный код сравнивается с EML.
Я просмотрел пару таких ссылок, везде ускорение примерно в 10 раз (плюс-минус проценты), позволил себе сделать соотв. прикидки от обсуждаемых цифр.


S>При этом, когда я пишу интринсики, они компилируются ровно в нужные мне векторные команды. А не случайно параллелятся компилятором в зависимости от фазы луны.


Или в зависимости от опции компилятора для целевой архитетуры.
В общем, зря тут упираешься.


V>>Это тебе нет, хотя конкретно тебе говорили, как оно будет, и оно так и было.

V>>Зато ты фантазировал безудержно, помнится.
V>>(не только ты, но ты громче всех)
S>И в итоге оказалось, что всё произошло так, как я говорил, хоть и не сразу

Пока что мало чего произошло, оно только-только начинает происходить (заметные подвижки начались с 5-го и 6-го дотнета ) и это очень надолго.
Тебе сразу говорилось, что до твоей пенсии ты своё светлое будущее не застанешь.

Я приводил в пример чистые ФП-языки, которые дают намного больше простора для бета-редукций, но за ~15 лет активных телодвижения результаты были слишком скромные на середину нулевых.
Уже более 30-ти лет примерно с теми же результатами.

А жить надо было как-то здесь и сейчас, и ближайшие лет 10 (твои прогнозы) каким-то образом тоже.
Вот почему я считал ошибкой ту стратегию, что MS примерно на 8-10 лет натурально забило на нейтив.

Помнишь проект Avalon и фантазии, что всё GUI в будущих Windows будет managed?
В итоге в 8-х виндах они докрутили С++ компилятор до возможности оперировать расширенной метаинформацией (банально атрибутами и некоторыми типами, которые компилятор "знает в лицо") — и ву а ля, менее чем за год разработали подсистему GUI UWP, которую Avalon с нужной эффективностью так и не породил за ~6 лет.

А которые C# UWP-приложения — там лишь тонкая обёртка над нейтивной подсистемой, и оно пашет в разы шустрее, чем WPF, да еще в памяти чуть ли не на порядок меньше мусора.
Боюсь, что по этому вопросу "наша" точка зрения победила даже не до твоей пенсии, а до конца твоей жизни.

И что меня раздражало в оппонентах (не только в тебе) — я подробно разбирал низкоуровневую механику WPF и объяснял почему так — загвоздка в вызове пайплайна подсистемы GUI, в необходимости осуществлять тысячи вызовов низлежащего рендерера (а для последних версий DirectX вызовов еще больше, хотя сами вызовы легковесней).
И в этом месте дотнет сильно проседает из-за дороговизны вызова нейтивных ф-ий.

Как они выкрутились в WPF — со стороны C# идёт сериализация команд в некий байт-буфер, отправка сериализованных команд в специальный поток, обслуживаемый нейтивной библиотекой.
В этом потоке нейтивный код десериализует команды, пакеты вида { код_операции, операнды... } и по таблице кодов команд вызывает соотв. методы-адаптеры, которые, в свою очередь, вызывают ф-ии низлежащего GUI с поданными в сообщении аргументами.

И так вышло, что обход графа со стороны C# с сериализацией, что динамический расчёт лейаута, что применение стилей — всё на стороне C# почему-то тормозит и жрёт ресурсы.
Плюс задержки с сериализацией и передачей сцены нейтивной либе.

Как эти ограничения переплюнуть точному GC — лично я ума не приложу.
Плюс соображения интероперабельности с другими языками/технологиями — они все умеют взаимодействовать с нейтивом тем или иным образом изкаробки, бо все поверх нейтива пашут.
Но как взаимодействовать с АПИ дотнета — вопрос вопросов.

Поэтому, совершенно согласен с тем, что на сторону C# надо отдавать только биндинги к св-вам и событиям GUI-компонент и не более того.
И точно так же для любых других "высокоуровневых" технологий.

Здесь подход мало чем отличается от биндинга Питоновских либ к нейтивным BLAS-либам.

Так вот, подводя жирную черту под всеми этими фапаниями на несостоявшийся Avalon когда-то:
— технологии навроде дотнета/джавы важны и нужны, хотя бы по той причине, что работают лучше скриптовых языков/сред в их нишах, являясь зачастую более удобными/легкими в разработке;
— но такие технологии не должны были претендовать на исключительное своё положение, тем более в первые же годы своей жизни;
— архитектура компонент и низлежащие принципы работы WPF заведомо антиинженерные, такие решения могли быть приняты только через ангажированность/болтологию/веру в близкое светлое мега-будущее.

Я много и глубого исследовал Рефлектором дотнет когда-то, сейчас регулярно пасусь на гитхабе проекта, да и вообще не представляю себе работу без решарпера, который сам подгружает дебаг-информацию и дизассемблирует сборки.

Почти всегда мне понятны мотивы принятых тех или иных решений (хотя местами улыбали явно индусские мотивы, но это обычно был не самый критичный код).
Однако, рассматривая внутренности WPF я только за голову хватался...
Собсно, будучи сам поначалу интузиастом дотнета в этом месте я сильно к дотнету охладел. ))

Ну и, люди, навроде тебя (Влад, AVK и прочие) своими речами наглядно мне продемонстрировали, как и почему подобные грубейшие архитектурные ошибки проползают в ведущие технологии. А технология WPF на момент разработки пророчилась в кач-ве ведущей для GUI.

Всё вместе это болото, токсичность, невозможность поступления свежего воздуха, как грится, невозможность даже просто предметно дискутировать.
Секта.

И вот так оно в кач-ве секты с 98-го (год начала разработки) до 2017-го (т.е. почти 20 лет) и просуществовало.
А потом эту секту грубо разогнали нафик и подтянули простых работяг, не замутнённых никакими предрассудками.
Почитывал периодически блог руководителя дотнетного направления (уже забыл как его), был рад, что его турнули.
Он писал всё правильно, но всё не о том...
Какой-то разрыв первого рода м/у пониманием требований разработчиков разных складов и подходов к задачам, ограничений современных архитектур и возможностей своей команды.
Маниловщина в чистом виде...

Например, такого пошиба типчик не выжил бы в тех условиях, в которых работаю я, он довольно быстро зарекомендовал себя как болтун низкой полезности и почти нулевого выхлопа.
Боже, его эксперименты с кодом были до того идиотскими в своей наивности, что я порой был в шоке, как он вообще на эту должность попал и почему так долго продержался.

Даже если сам чел был не идиот, но взятый им тон был для идиотов.
А значит, вольно или невольно таковым было позиционирование результатов работы его команды.

Было всё это видно еще тогда? — конечно было.
Периодически об этом говорилось, вы в привычной манере язвительно (т.е. контрпродуктивно) огрызались.
Со стороны — секта, ноль практичности, игнор насущных требований разрабов.


V>>Джава давно повернулась лицом к опенсорсу, но огромного кол-ва ревьюверов джава-машинки я не наблюдаю.

S>А я — наблюдаю. Просто вы не вращаетесь в тех кругах, где принято пилить JVM.

Э, нет, я одно время (пару лет назад) наблюдал весьма плотно, поплотнее, чем за дотнетом.
(у нас есть версия продукта и для Джавы)

В экосистеме Джавы в разработке высокоуровневого энтерпрайз г-на народу пасётся прилично и ротация имеется, но на низком уровне одни и те же лица чуть ли не десятилетиями, любопытство со стороны минимальное.
Это приплызд.

В дотнете постоянно сыплют предложениями случайные люди и поток этот неиссякаем.
(сам репортил как ошибки, так и предлагал исправления/улучшения)


V>>Если джава не повторит за дотнетом поворачивание лицом к таким людям — постепенно уйдёт примерно туда же, куда ушел популярный когда-то Perl.

S>Увы, не уйдёт. Но это оффтоп к данной дискуссии.

Про Перл тоже так думали, бо вменяемых альтернатив не было полтора десятилетия.
Но чуть заматерел Питон, потом выстрелил сразу же мощно JS-node — и досвидан.

Я не утверждаю асболютно, я говорю "если".
Ввели же генерики в Джаве, подсуетились... ))

И почему оффтоп в теме ".Net на Эльбрусах"?
Конкурент номер один дотнету — Джава.
Судьба дотнета во многом будет зависеть от судьбы Джавы и наоборот.


V>>Сначала стали контрибутить нейтивные фишки, и только затем подтянулась широкая общественность.

V>>Т.е. между тем, как открыли в опенсорс и тем, как подтянулось приличное кол-во людей, прошло прилично времени.
S>Хм. А кто контрибутил нейтивные фишки?

Изначально программисты MS, у которых почему-то стоит C/C++ в профиле.
Т.е. подкинули в проект портирования дотнета на линуха плюсовиков, по понятной причине.
И вот тут всё заверте...