Обновить

Оптимизируем код решения СЛАУ методом Гаусса под процессор Эльбрус‑8СВ

Уровень сложностиСредний
Время на прочтение34 мин
Охват и читатели11K
Всего голосов 21: ↑20 и ↓1+21
Комментарии16

Комментарии 16

А использование std::from_chars при чтении и std::span для срезов массива как-то меняет ситуацию?

Да, меняют, но относительно именно неоптимизированного cin. Причем std::from_chars заметно раз так в 10, но по‑прежнему медленнее в 3–6 раз, чем оптимизация в статье. А std::span практически без изменений.

Спан просто обертка над указателем и размером, магии там нет. Фром_чарс быстрее сина, но кастомный парсер с буфером все равно порвет любую стд либу на молотилках

За span спрашиваю именно потому что это обёртка над указателем с размером - компилятору при помощи таких нехитрых структур проще делать оптимизации для циклов, да и для людей они более человекочитаемые просто потому что прячутся за одной переменной, а не двумя. Да и с подсрезами работать проще.

Это прямое следствие того, что последние 40 лет для персональных компьютеров (25 лет для серверов) архитектура x86 (включая x86-64) является доминирующей, и все приложения, библиотеки и алгоритмы создаются с фокусом на x86, делая весь окружающий нас IT-мир x86-центричным.

Моё мнение, что вы смягчили углы. Во-первых, x86 вообще не центрична (с учётом ARM и кучи других систем УПРОЩЕННЫХ команд). Во-вторых, вместо того, чтобы признать VLIW провальной, мы плачем, колемся, но продолжаем кушать кактус.

К примеру, почему-то переход на ARM с x86 оказался много проще, чем 40 лет хождений по пустыне VLIW.

За статью, кончено же плюс.

Конечно, смягчил, я же популяризацией занимаюсь 😉

Но если смотреть в разрезе ПК + серверы, то, по-моему, x86 (x86-64) имеет полное доминирование. В последние годы только Apple разбавляет статистику своей изолированной от всех экосистемой с десктопами, и то на общем фоне x86 и его легаси это пока капля в море. А мир мобильников за Arm, с этим никто не спорит, и мир там свой и приложения.

Мне в целом не принципиально, VLIW это или другая архитектура, главное, что своя.

В первой десятке текущего списка Top 500 четыре системы на ARM (включая топовую). В облаке Amazon неплохо живут его ARM-based процессоры. Так что доминирование x86 на серверном рынке несколько преувеличено.

Верно, но это ведь вы про суперкомпьютеры, а не про массовый рынок серверов?

Ну, а Amazon, как говорится, хозяин барин. Хочет, может и ставит свои процессоры на Arm, но, по-моему, тоже на общем фоне это капля в море.

Облако Amazon - капля в море? Вроде как процентов 30 от рынка (и Гравитоны в нём дают примерно половину вычислительной мощности).

Да, вы правы. Перепроверил: казалось, что меньше было. Сейчас где-то в районе 15–20% от всех проданных коммерческих серверов, с преобладанием в сегменте облачных провайдеров (гиперскейлеров) до 50%.

Но я так понял, что это последние пять лет такой рост пошёл, а до этого x86 мертвой хваткой держал?

Да, относительно недавнее явление. Но если посмотреть на другую сторону - доминирующей долю x86 серверов можно назвать только где то с 2010го, в нулевые был переходный процесс c вытеснением зоопарка RISC машинок.

вместо того, чтобы признать VLIW провальной

Держите таблеточку от того, что у Маслова было на лопате.

ARM и кучи других систем УПРОЩЕННЫХ команд

Конкретно эта "упрощённость" начала попахивать "отрицательной упрощённостью" ещё где-то в районе thumb; а куча каких "других систем" может претендовать на центричность в умах разработчиков окружающего нас кода с самыми разнообразными приставками, не поделитесь мнением?

переход на ARM с x86

Какой?

40 лет хождений по пустыне VLIW

Каких?

// отправлено с моего "Эльбрус-16С"

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

Всё же замечу, что это как раз не хардкор ради хардкора (т.е. без реальной необходимости), а обязательные оптимизации, чтобы ПО (новое или портируемое) использовало всю производительность процессоров архитектуры Эльбрус или хотя бы её большую часть.

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

инетересно было бы и тут увидеть такую табличку

На мой взгляд, начинать "оптимизировать" следовало вот отсюда:

// Чтение матрицы A размера N×N
    std::vector<double> A(n*n);
    for (int y = 0; y < n; y++)
        for (int x = 0; x < n; x++)
            std::cin >> A[y*n+x];

Все остальное переписывание на си-подобный код бессмысленно, либо надо было все на си и писать тогда.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации