All streams
Search
Write a publication
Pull to refresh
4
0
Send message

Итак есть 2 утверждения:

1)  среднегеометрическая int+fp "микроархитектурная скорость" у Эльбрус-8СВ выше, чем Ampere Altra.

2) ваше утверждение: микроархитектурная скорость на Эльбрусе, рассчитанный по данным запусков на Spec CPU2017 в 3-4 раза уступает современным RISC/CISC процессорам.

И вывод из этих двух "верных" утверждений: Ampere Altra по этой "микроархитектурной скорости" тоже уступает современным процессорам в 3-4 раза. Получился абсурд. Зачем-то сделали процессоры на Neoverse N1, отстающие в 4 раза в пересчете на ядро. Причем ядер там тоже обычно не так много: 64 у Graviton2, как и у AMD Epyc. Тогда нафиг сдался этот Neoverse, проигрывающий в 4 раза. Надо тоже закопать, как и Эльбрус.

Когда вы выбрали EPYC 72F3 в качестве примера продемонстрировать "микроархитектурную скорость", вы заложили мину, которая сильно искажала все выводы. EPYC 72F3 - это гипертрофированный 8-ядерник, которой фактически содержит 8 мощных одноядерных процессоров-кристаллов в одном корпусе. И еще там есть второй поток на каждом ядре Epyc, которого нет на ARM и на Эльбрусе.

Поэтому для анализа производительности Эльбруса надо брать более близкие альтернативы на ARM: Kunpeng или Ampere Altra. Это вполне современные OoO процессоры. Но значимого преимущества по вашей "микроархитектурной скорости" int+fp на Spec CPU2017 над Эльбрусом у Kunpeng и Altra нет.

Вместо Эльбруса можно разработать свое RISC ядро. Но это потенциальное "свое" будущее RISC-ядро все равно проиграет ядру Neoverse-N1, которое на данный момент является некоторым эталоном высокого качества разработки. И такое качественное ядро Neoverse-N1 очень трудно превзойти самостоятельно. Например, даже большая Huawei не смогла выдать такую производительность в своих ядрах Kunpeng, как у Neoverse N1.

Так если ядро Эльбруса в среднем в Spec CPU2017 на уровне ядер Kunpeng/Nеoverse, то какова вероятность, что своя альтернативная разработка ядра будет выше этого уровня, а значит выше уровня Neoverse и Kunpeng?

При этом из предыдущих статей помним, что верхний предел микроархитектурной скорости на Эльбрусе, рассчитанный по данным запусков на Spec CPU2017, в 3-4 раза уступает современным RISC/CISC процессорам с ОоО исполнением.

Есть современный OoO процессор Ampere Altra. Для него есть результаты Spec CPU2017.

Сравниваем эту вашу "микроархитектурную скорость":

Ampere Altra: int: 1.20, fp: 0.875

Эльбрус-8СВ: int: 0.89, fp: 1.38

Так где тут 3-4 раза?

Для fp у эльбруса эта "микроархитектурная скорость" оказалась даже выше, чем у Altra Neoverse-N1. Или Neoverse-N1 - это тоже плохой представитель современного OoO процессора?

Маленькое замечание. Не хватает теста 403.gcc из SPEC CPU 2006.

Результаты ExaGear удивляют, что так прилично превзошли Rosetta. Но если эффективность ExaGear уже 90% на SPEC 2017 для M1, тогда существенного потенциала для дальнейшего роста эффективности там уже нет.

Удаляем внешний цикл, массив заполняем по возрастанию, в конце ставим один минимальный элемент (будем вставлять его на правильную позицию внутренним циклом while). Ставим количество элементов 200000000 (760 МБ) и запускаем. Отрабатывает за 0.214 с, то есть 1.284 такта на одну итерацию.

А эта потеря скорости происходит только после 16 MB из-за медленной памяти?

Получается примерно 4 ГБ/c на чтение и 4 ГБ/c на запись. Но в буферы подкачки нужно читать заранее, чтобы побороть большую латентность памяти, которая примерно 100 нс, а это примерно 120 слов (или 480 байт) в том коде.

Чтобы лучше проверить пиковую скорость буфера префетча у Эльбруса, можно заменить там 32-битные числа на 64-битные, чтобы память нагружалась в два раза быстрее. И проверить ту функцию для разных размеров массива: до 16 MB и после.

Фактически этот код измеряет скорость сдвига memmove() массива на 4 или 8 байт, но с дополнительной проверкой значений элементов массива, которая никогда не срабатывает. В случае реального массива проверка сработает тоже только через много итераций.

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

Хорошо бы проверить исполнение на реальном железе Эльбруса с разными размерами массива.

Ожидаю два потенциальных подвоха:

1) как работает подкачка за пределами границ кэша 64 KB, 512 KB, и 16 MB для Эльбрус-8C.

2) потенциальный конфликт между операциями чтения и записи. Они же читают и записывают одни и те же области (строки кэша) одновременно. A значит буферы подкачки, кэш L1 и кэш L2 должны работать синхронно, и разрешать все возможные конфликты. Хотя кэш L1 тут вообще не будет работать в этом варианте с одним тактом?

Если по результатам реального исполнения там действительно будет один такт на итерацию, тогда признаем полную победу Эльбруса.

Кстати внутри цикла есть одна лишняя операция записи, которую можно вынести за пределы цикла в исходном коде. Но она особо не мешает. Пусть будет.

Вот мы получили три разных реальных результата для одного и того же кода на Эльбрусе:

13 тактов для -O4

7 тактов для -O2

2 такта, если просто вынести главный цикл в отдельную функцию.

Такой же разброс возможен и на реальном коде, и на коде SPEC.

Но минимальный результат в 2 такта оказался в 1.5 раза лучше вашего x86, который ~3 такта. И этот результат на Эльбрусе можно получить. Хотя неизвестно, что там будет, когда закончится кэш. Без подкачки будет плохо.

Поэтому основные выводы в статье можно пересмотреть. Потенциал VLIW Эльбруса на таком коде достаточно хороший. Компилятор подкачал.

Не думаю, что они хорошо работают с кодом SPEC, если они прокололись даже на таком простом коде.

Делаем простой эксперимент. Выносим один главный внутренний цикл в отдельную функцию, и в итоге одна итерация там исполняется за 2 такта:

	while(p >= 0 && a[p] > t)
	{
		a[p + 1] = a[p];
		a[p] = t;
		p--;
	}
.L19:
        {
          loop_mode
          ldw,3,sm      %dr0, %db[3], %b[0]
          cmplesb,4,sm  %b[4], %r1, %pred0
          subd,5,sm     %db[3], 0x4, %db[1]
        }
        {
          loop_mode
          alc   alcf=1, alct=1
          abn   abnf=1, abnt=1
          abp   abpf=1, abpt=1
          ct    %ctpr1 ? ~%pred1 && %NOT_LOOP_END
          staaw,2       %b[6], %aad0[ %aasti1 + _f32s,_lts0 0x4 ] ? ~%pred1
          staaw,5       %r1, %aad0[ %aasti1 ] ? ~%pred1
          incr,5        %aaincr1
        }

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

В итоге можно получить ускорение в 6.5 раза от первоначального варианта: 13 тактов / 2 такта = 6.5.

А еще это доказывает, что все еще есть значительный потенциал улучшения производительности Эльбруса за счет компилятора.

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

/Выставил в качестве компилятора e2k lcc 1.26.04, опции оптимизации -O4.

Там лучше было выбрать не -O4, а обычный -O2. И количество тактов в цикле сокращается примерно в 2 раза.

Huawei закрыли доступ на новый техпроцесс, и поэтому никакого развития линейки Kunpeng больше нет.

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

Наиболее близкий аналог для Эльбруса - это Loongson. У них тоже своя архитектура и микроархитектура. И новый серверный процессор Loongson - это аналог Эльбрус-16С. У них по 16 ядер. У Loongson - 12 нм, Эльбрус - 16 нм. Производительность в среднем тоже схожая. При этом китайцы постоянно улучшали и развивали свои ядра Loongson уже 20 лет. И эти китайцы в итоге сейчас вышли на уровень Эльбруса. Они чуть сильнее в INT, но слабее в FP.

Есть высшая лига производителей, которая получает новые техпроцессы, новейшие ядра, и большие объемы производства. А есть вторая лига, которая получает старые техпроцессы и не самые оптимальные ядра. Байкалу из высшей лиги досталось хорошее ядро A75. Поэтому они сделают рывок в новом Байкал-S. Но остальные самостоятельные игроки второй лиги не имеют такого преимущества из-за хорошего ядра.

В рамках "второй лиги" будут и все разработки на RISC-V. Там же уже есть еще Sparc от МЦСТ. Но такие процессоры RISC-V и Sparc все равно будут уступать в несколько раз представителям "высшей лиги". А значит не смогут конкурировать на равных с лучшими процессорами.

А Эльбрус - это нестандартное решение на VLIW, что дает перекос в сторону более высокой производительности FP в ущерб производительности INT, что и отличает их от всех других представителей "второй лиги".

Вы хотя бы уточнили информацию и характеристики про главный процессор компании Huawei.

Процессор Kunpeng 920 - это 64 ядра, а не 128. И там три кристалла в каждом процессоре Kunpeng 920, как показали на cайте wikichip.

Так для Эльбруса на 7 нм тоже можно разработать аналогичные два кристалла по 32 ядра. Это вопрос финансирования разработки. И даже можно вписать все это в нужное потребление.

Да, у Эльбрусов есть потолок по производительности, но этот потолок выше нынешних неамериканских альтернативщиков по FP, хотя и ниже по INT. И этот микроархитектурный уровень Эльбруса те "альтернативщики" превзошли только сейчас, а микроархитектура Эльбрус существует 15 лет, почти не меняясь.

Если кому-то здесь нужен относительно высокий уровень производительности FP без использования американских процессоров, то ставка на Эльбрусы была вполне оправдана какое-то время.

Для Байкал-S воспользовались топовыми мировыми наработками ядер ARM Cortex, и поэтому Байкал-S выиграет у нового Эльбрус-16С, который базируется на разработках и идеях 20-летней давности. Но те же китайцы пока не имеют таких совершенных ядер, как Cortex и Neoverse. И поэтому отставание от китайцев у Эльбруса не такое большое, как отставание от Intel, AMD и ARM.

На основе имеющихся результатов Spec CPU 2017 можно, кстати, достаточно хорошо оценить микроархитектурную скорость своременных RISC/CISC процессоров. Она колеблется в среднем в диапазоне 2-3 SpecRate на один гигагерц одного ядра, переваливая за 4 для SpecFP для топовых решений (как для приведенного выше решения на базе AMD EPYC 72F3). Для Эльбруса же эта микроархитектурная скорость равна 0.9 для SpecINT и 1.4 для SpecFP.

Посмотрел результаты Spec CPU 2017 китайского процессора Kunpeng 920.

Для Kunpeng 920 эта "микроархитектурная скорость" получается

0.96 для SpecINT

0.79 для SpecFP.

А значит Эльбрус выигрывает у Kunpeng по этой характеристике для SpecFP.

Про частоту. Kunpeng - 2.6 GHz на техпроцессе 7 нм, а Эльбрус - 2.0 GHz на 16 нм. А на одинаковых 7 нм у них было бы почти равенство по частоте.

Или для другого нового китайского процессора Loongson 3A5000 заявили про 80 в SPEC CPU2006 для всего процессора, что на уровне Эльбрус-8С.

Так все "неамериканские" альтернативные процессоры все еще сильно уступают процессорам AMD и Intel. Но среди этих "альтернативщиков" цифры производительности у Эльбруса не такие провальные. А для FP у Эльбруса вполне приличная производительность на ядро.

Information

Rating
Does not participate
Registered
Activity