Re[29]: .Net на эльбрусах
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.09.22 11:40
Оценка:
Здравствуйте, vdimas, Вы писали:

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

Ну, ок. Смотрим, что у авторов:
for(i = 0; i < N; i++)
  for(j = 0; j < N; j++)
    for(k = 0; k < N; k++)
      C[i*N+j] += A[i*N+k] * B[k*N+j];

Порядок обхода — ровно тот же, что и у вас, с точностью до имён переменных. Где тут "У авторов схема kij, которая, увы, является наихудшей."???

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

Зря боитесь. Вот, к примеру, декабрь 2020: https://www.sciencedirect.com/science/article/pii/S2090447920300058
Если вам трудно читать текст, можете промотать сразу в конец — там графически сравнивается производительность предлагаемого кода по умножению матриц с MKL.
Заодно, кстати, интересно сравнить поведение кода, собранного лучшим в мире MSVC, с кодом, собранным ICC.

V>Потому что хватает ссылок, где наивный код сравнивается с EML.

V>Я просмотрел пару таких ссылок, везде ускорение примерно в 10 раз (плюс-минус проценты), позволил себе сделать соотв. прикидки от обсуждаемых цифр.
Было бы ещё лучше, если бы вы привели хотя бы одну из просмотренных ссылок.

V>Или в зависимости от опции компилятора для целевой архитетуры.

Опций компилятора недостаточно.
V>В общем, зря тут упираешься.
Просто практика ваши слова не подтверждает. Вы же сами привели ссылку на статью, где в дополнение к опциям приходится руками развёртывать цикл в нужный размер, подбирая магические чиселки.
Я бы понял, если бы gcc (или какой-нибудь mcstcc) сам разворачивал циклы нужным образом при указании ему версии целевой архитектуры.
Увы, нет — только магия, только шаманство. "Не переставляйте эти инструкции местами, иначе результат может оказаться неоптимальным".

V>Пока что мало чего произошло, оно только-только начинает происходить (заметные подвижки начались с 5-го и 6-го дотнета ) и это очень надолго.

Смотря с чем сравнивать. Заметные подвижки начались уже очень давно. Напомню, что первый подход к SIMD произошёл ажно 8 лет назад: https://devblogs.microsoft.com/dotnet/the-jit-finally-proposed-jit-and-simd-are-getting-married/

V>Тебе сразу говорилось, что до твоей пенсии ты своё светлое будущее не застанешь.

Странно. До пенсии ещё далеко, а то, о чём мы говорили — вот оно.

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

V>Уже более 30-ти лет примерно с теми же результатами.
Надо полагать, это оттого, что одними бета-редукциями код не спасёшь. В итоге, за последние три версии в дотнете всё улучшилось сильнее, чем для чистого ФП за 30 лет.

V>Помнишь проект Avalon и фантазии, что всё GUI в будущих Windows будет managed?

Да там много было фантазий. В том числе и про объектно-ориентированную ФС с элементами реляционки.
Я не помню точно, что я думал по поводу GUI в будущих Windows, потому что десктопных приложений я не писал примерно года с 2003го.

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

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

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

Да, я за всю жизнь раза три заходил в форум .Net GUI. Наверное, вы там вели какие-то войны.
Мне и тогда это было неинтересно, и сейчас не стало.
V>И в этом месте дотнет сильно проседает из-за дороговизны вызова нейтивных ф-ий.
Стоимости вызова нейтивных функций мы уже обсуждали.

V>Как они выкрутились в WPF — со стороны C# идёт сериализация команд в некий байт-буфер, отправка сериализованных команд в специальный поток, обслуживаемый нейтивной библиотекой.

V>В этом потоке нейтивный код десериализует команды, пакеты вида { код_операции, операнды... } и по таблице кодов команд вызывает соотв. методы-адаптеры, которые, в свою очередь, вызывают ф-ии низлежащего GUI с поданными в сообщении аргументами.
Прикольно. А я думал, что там сразу поток команд идёт в драйвер, а не в нативную библиотеку, которая вызывает низлежащий GUI, который уже потом опускается в драйвер.

V>Плюс задержки с сериализацией и передачей сцены нейтивной либе.

Странно.

V>Как эти ограничения переплюнуть точному GC — лично я ума не приложу.

Увы, я крайне далёк от визуальщины, так что ничего хорошего я вам не подскажу. Но в целом, очевидно, нужно смотреть на то, что ест аппаратура — как там устроен конвеер современной видеокарты — и стараться готовить максимально крупные блоки для отдачи в неё. Потому что собственно манипуляции байтиками в менеджед ничуть не хуже, чем в нативе. Сложности начинаются только в момент интеропа, и то, основные из них связаны с референс-типами.
А просто уложить байты в буфер, а потом сделать один раз вызов с маршалингом запиненного указателя — тьфу, семечки.

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

Этот подход хорошо работает для тех случаев, когда собственно код обработки "ячейки" фиксирован — как в BLAS.
Тогда можно выставить наружу крупноблочный API типа "сделай мне A * B T".
А вот для задач типа наложения фильтров, где параметром вызова является ядро, скомпилировать нативный код заранее не выйдет.

V>Так вот, подводя жирную черту под всеми этими фапаниями на несостоявшийся Avalon когда-то:

Лучше подведём её над этими фантазиями. Какое значение имеет проект Авалон в контексте .Net на эльбрусах?

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

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

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

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

V>А потом эту секту грубо разогнали нафик и подтянули простых работяг, не замутнённых никакими предрассудками.

"Разогнали", ха-ха. Мне прямо даже интересно, кто эти простые работяги, которым не давали коммитить, и кого именно разогнали.
V>Почитывал периодически блог руководителя дотнетного направления (уже забыл как его), был рад, что его турнули.
Ха-ха.
V>Например, такого пошиба типчик не выжил бы в тех условиях, в которых работаю я, он довольно быстро зарекомендовал себя как болтун низкой полезности и почти нулевого выхлопа.
V>Боже, его эксперименты с кодом были до того идиотскими в своей наивности, что я порой был в шоке, как он вообще на эту должность попал и почему так долго продержался.
Вот эти — как раз характерный пример рассуждений, за которые вас многие считают токсичным мудаком.

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

V>Э, нет, я одно время (пару лет назад) наблюдал весьма плотно, поплотнее, чем за дотнетом.
V>(у нас есть версия продукта и для Джавы)
Вы, возможно, путаете выражение "пилить JVM" с "пилить для JVM". Те, о ком я говорю, это не те ребята, что "мы тут пишем приложение для Java — как нам оптимизировать нагрузку на GC?", а те, которые "нам что-то не нравится JVM, щас мы её форкнем и подпилим JIT".

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

Скорее всего, всё упирается в отсутствие единого столбового направления.
То есть "любопытство со стороны" применяется к альтернативным версиям JVM, вместо контрибуций в общую ветку.

V>Про Перл тоже так думали, бо вменяемых альтернатив не было полтора десятилетия.

Это где это перлу не было альтернатив? Что-то не верю я в существование каких-то феерически больших кодовых баз на перле.
V>Но чуть заматерел Питон, потом выстрелил сразу же мощно JS-node — и досвидан.
Как интересно. Что же это за ниша, в которой живут сразу и Питон и Node?

V>Ввели же генерики в Джаве, подсуетились... ))

Это не генерики, а слабое подобие левой руки. В этом смысле я с вами согласен — темпы развития Java как платформы разочаровывают.
Ну, приняты определённые решения. Спасибо, что хоть лямбды с недогенериками прикрутили. Value-типы уже несколько лет как в виде прототипа доступны

V>Конкурент номер один дотнету — Джава.

Ну, во-первых, JVM на Эльбрус вроде всё же спортировали.
V>Судьба дотнета во многом будет зависеть от судьбы Джавы и наоборот.
Для начала они должны хоть как-то начать работать на эльбрусе. Потом уже можно что-то говорить о судьбе.

V>Изначально программисты MS, у которых почему-то стоит C/C++ в профиле.

V>Т.е. подкинули в проект портирования дотнета на линуха плюсовиков, по понятной причине.
V>И вот тут всё заверте...
Интересная гипотеза.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.