Содержание

4.2. Рендеринг сцен в Blender.

С Blender есть некая накладочка: он работает весьма нестабильно на Эльбрусе. Выдаёт ошибки и периодически падает. Возможно, поэтому его убрали из Эльбрус ОС 7.1, хотя ещё в Эльбрус ОС 7.0 rc3 он был доступен в репозитории. Т.е. в наиболее свежей версии Эльбрус ОС он в принципе не присутствует. Но нас же интересует не то, стабильно ли он пашет, а то, что там с производительностью. А это мы примерно сможем оценить и так.

На Альт Линукс 10 используется Blender версии 2.93.4, а в Эльбрус ОС 7.0 rc3 – Blender 2.80. Я просто скопировал установочный .deb пакет Blender 2.80 из Эльбрус ОС 7.0 rc3 в Эльбрус ОС 7.1, и решил, что лучше протестирую так. Вопрос в том, как мы его будем тестировать. Классического Blender Benchmark под E2K ведь нету. И как быть? Что, вручную прогонять бенчмарк для всех сцен? А где хоть взять то эти сцены?

Я нашёл старую запись в блоге Blender, где для теста его движка CYCLES прикладывали архив с 6 разными сценами: BMW27, Classroom, Fishy Cat, Koro, Pavillon Barcelona и Victor. Это те же 6 сцен, что используются в Blender Benchmark, который мы обычно использовали для теста компьютеров и ноутбуков в Windows. Этот же бенчмарк, к слову, есть и для Linux, но под E2K он недоступен.

Что я решил в итоге? Просто загрузил эти сцены, выкачал старую версию Blender под x86 (2.80 брал для сравнения с OSL и 2.93.4 для сравнения с Альт), и написал небольшой набор команд, который будет проводить тест с этими сценами в консоли.

Зачем тестировать скриптом через консоль? Так мы проведём тест поочерёдно с несколькими сценами и получим все результаты в одном маленьком окошке. Почти как в Blender Benchmark, только мы воспользуемся консолью, а не приложением с графическим интерфейсом.

И тут есть несколько нюансов.

Минимальная версия Blender в Blender Benchmark

Скриншот 76. Минимальная версия Blender в Blender Benchmark.

Во-первых, если вы захотите воспользоваться Blender Benchmark для проведения теста у себя, минимальная доступная там версия будет – Blender 2.81. Тут никакой проблемы нет, т.к. Blender версии 2.81 имеет минимальные отличия в сравнении с Blender версии 2.80. По части производительности там точно никаких различий нет, уже проверял у себя на ноутбуке.

Во-вторых, мы не можем сравнивать результаты с Blender Benchmark напрямую с теми, которые получаем при тестировании в консоли. Я в консоли тестирую с одними параметрами, а как этот тест проводит Blender Benchmark, честно говоря, я в душе не чаю. И у меня получается расхождение в результатах при тестировании Blender Benchmark с его каким-то методом теста и при тестировании обычного Blender через консоль.

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

Просто загрузите себе нужные версии Blender, распакуйте их, и в корне директории с папками Blender распакуйте также сцены для теста (я их просто вытащил из папки benchmark и оставил рядом с самой программой Blender).

Для теста на Linux с x86 подойдёт эта команда:

                            arch; postargs="--engine CYCLES --render-frame 1 -o /dev/null"; declare -a blenderversions=("./blender-2.80-linux-glibc217-x86_64/blender" "./blender-2.93.4-linux-x64/blender"); for blender in "${blenderversions[@]}"; do echo ""; $blender --version | egrep "Blender.*" ; for demosample in "bmw27/bmw27_cpu.blend" "classroom/classroom_cpu.blend" "fishy_cat/fishy_cat_cpu.blend" "koro/koro_cpu.blend" "pabellon_barcelona/pavillon_barcelone_cpu.blend" "victor/victor_cpu.blend"; do /usr/bin/time -f "Execution time: %E (%e seconds). $($blender --version | grep Blender). Scene: $(basename $demosample .blend)" bash -c "$blender --background $demosample $postargs &>/dev/null"; done; done;
                        

На Windows с x86 воспользуйтесь этой командой (замените значения в blenderversions на те версии blender, что вы собрались тестировать):

$blenderversions="2.80-windows32","2.80-windows64","2.93.4-windows-x64"; $demosamples="bmw27\bmw27_cpu.blend","classroom\classroom_cpu.blend","fishy_cat\fishy_cat_cpu.blend","koro\koro_cpu.blend","pabellon_barcelona\pavillon_barcelone_cpu.blend","victor\victor_cpu.blend"; ForEach ($blenderversion in $blenderversions) { Write-Output ''; $blender="blender-$blenderversion\blender"; Invoke-Expression "& $blender --version" | select -first 1; ForEach ($demosample in $demosamples) { $ElapsedTime=(Measure-Command -Expression { Invoke-Expression "& $blender --background $demosample --engine CYCLES --render-frame 1 -o $null 2>&1 | Out-Null" } ); Write-Output "Elapsed: $($ElapsedTime.Hours):$($ElapsedTime.Minutes):$($ElapsedTime.Seconds).$($ElapsedTime.MilliSeconds) ($($ElapsedTime.TotalSeconds ) seconds). Scene: $($(Get-Item $demosample).Basename) " } };

На Linux с ARM для теста с транслятором ExaGear и без него используйте этот набор команд (здесь замените /usr/bin/blender на другую директорию, если у вас версия Blender для ARM устанавливается из репозитория в иную директорию):

                            blender --version | grep Blender; postargs="--engine CYCLES --render-frame 1 -o /dev/null"; if [[ ! $(arch) =~ ([xi]3?86.*|amd.*) ]]; then declare -a blenderversions=("/usr/bin/blender" "./blender-2.82-linux64/blender"); else declare -a blenderversions=("/usr/bin/blender"); fi; for blender in "${blenderversions[@]}"; do if [[ $blender == ${blenderversions[1]} ]]; then echo ""; /opt/exagear/bin/ubt_x64a64_al -v; echo ""; exagear -- $blender --version | grep Blender; fi; for demosample in "bmw27/bmw27_cpu.blend" "classroom/classroom_cpu.blend" "fishy_cat/fishy_cat_cpu.blend" "koro/koro_cpu.blend" "pabellon_barcelona/pavillon_barcelone_cpu.blend" "victor/victor_cpu.blend"; do if [[ $blender == "/usr/bin/blender" ]]; then mode="Native"; exagear=""; exagearargs=""; else mode="ExaGear"; exagear="/usr/bin/exagear"; exagearargs=" -- "; fi; /usr/bin/time -f "Execution time: %E (%e seconds). Mode: $mode. Scene: $(basename $demosample .blend)" bash -c "$exagear $exagearargs $blender --background $demosample $postargs &>/dev/null"; done; done;
                        

Для Mac я написал маленький набор команд, который сперва загрузит вам Blender версий 2.93.4 как для x86, так и для ARM, если у вас Mac на Apple Silicon (если x86 Mac на Intel, у вас загрузится только x86 версия):

                            mkdir blender; cd blender; demosdownload="https://download.blender.org/demo/test/cycles_benchmark_20160228.zip"; wget $demosdownload; unzip -q $(basename $demosdownload); mkdir x86; if [[ $(arch) =~ ^(arm|aarch64) ]]; then mkdir arm; declare -a blenderdownloads=("https://download.blender.org/release/Blender2.93/blender-2.93.4-macos-arm64.dmg" "https://download.blender.org/release/Blender2.93/blender-2.93.4-macos-x64.dmg"); elif [[ $(arch) =~ ^((x|i[[:digit:]])86|^amd64|^x64) ]]; then declare -a blenderdownloads=(""https://download.blender.org/release/Blender2.93/blender-2.93.4-macos-x64.dmg""); fi; for blenderdownload in "${blenderdownloads[@]}"; do wget -q $blenderdownload; hdiutil attach -quiet $(basename $blenderdownload); if [[ $blenderdownload =~ ((x|i[[:digit:]])86.dmg$|x64.dmg$|amd64.dmg$) ]]; then cp -a /Volumes/Blender/blender.app x86/ ; elif [[ $blenderdownload =~ (arm(64)?.dmg$|aarch64.dmg$) ]]; then cp -a /Volumes/Blender/blender.app arm/ ; fi; hdiutil detach -quiet /Volumes/Blender; done;
                        

Для запуска самого теста на Mac вам понадобится этот набор команд:

                            postargs="--engine CYCLES --render-frame 1 -o /dev/null"; if [[ $(arch) =~ ^(arm|aarch64) ]]; then declare -a folders=("x86" "arm"); elif [[ $(arch) =~ ^((x|i[[:digit:]])86|^amd64|^x64) ]]; then declare -a folders=("x86"); fi; for folder in "${folders[@]}"; do blender="$folder/blender.app/Contents/MacOS/Blender"; file $blender; if [[ $(arch) =~ ^(arm|aarch64) && folder == "x86" ]]; then translator="arch -x86_64 "; else translator=""; fi; $translator$blender --version | head -n 1; for demosample in "bmw27/bmw27_cpu.blend" "classroom/classroom_cpu.blend" "fishy_cat/fishy_cat_cpu.blend" "koro/koro_cpu.blend" "pabellon_barcelona/pavillon_barcelone_cpu.blend" "victor/victor_cpu.blend"; do /usr/bin/time bash -c "$translator$blender --background benchmark/$demosample $postargs &>/dev/null"; done; done
                        

Ну и команда для теста Blender на Эльбрусе на Эльбрусе с транслятором RTC и без него (без RTC тестировал версию из репозитория):

                            blender --version | grep Blender; postargs="--engine CYCLES --render-frame 1 -o /dev/null"; if [[ ! $(arch) =~ ([xi]3?86.*|amd.*) ]]; then declare -a blenderversions=("/usr/bin/blender" "./blender-2.80-linux-glibc217-x86_64/blender"); else declare -a blenderversions=("/usr/bin/blender"); fi; for blender in "${blenderversions[@]}"; do if [[ $blender == "/mnt/shared/blender-benchmark/blender-2.80-linux-glibc217-x86_64/blender" ]]; then echo ""; /opt/mcst/rtc/bin/rtc_opt_rel_p1_x64_ob --version; echo ""; fi; for demosample in "bmw27/bmw27_cpu.blend" "classroom/classroom_cpu.blend" "fishy_cat/fishy_cat_cpu.blend" "koro/koro_cpu.blend" "pabellon_barcelona/pavillon_barcelone_cpu.blend" "victor/victor_cpu.blend"; do if [[ $blender == "/usr/bin/blender" ]]; then mode="Native"; rtc=""; rtcargs=""; else mode="RTC"; rtc="/opt/mcst/rtc/bin/rtc_opt_rel_p1_x64_ob"; rtcargs="--path_prefix /mnt/shared/rtc/ubuntu20.04/ -b $HOME -b /etc/passwd -b /etc/group -b /etc/resolv.conf -b /mnt/shared -- "; fi; /usr/bin/time -f "Execution time: %E (%e seconds). Mode: $mode. Scene: $(basename $demosample .blend)" bash -c "$rtc $rtcargs $blender --background $demosample $postargs &>/dev/null"; done; done
                        
Тест Blender 2.80 в OSL 7.1 (пакет Blender из OSL 7.0rc3) на Эльбрус 8С

Скриншот 77. Тест Blender 2.80 в OSL 7.1 (пакет Blender из OSL 7.0rc3) на Эльбрус 8С.

Тест Blender 2.93.4 в Альт Линукс 10 на Эльбрус 8С

Скриншот 78. Тест Blender 2.93.4 в Альт Линукс 10 на Эльбрус 8С.

Тестировал я здесь сразу и в трансляции с RTC, и без. И это интересный момент, т.к. в случае с Blender наиболее стабильная работа обеспечивается именно вариантом, работающим в RTC. Сами смотрите: в трансляции все бенчмарки успешно проходят, тогда как в нативном варианте программа может вылетать на некоторых сценах.

Взглянем на сцену Fishy Cat, которая у меня успешно рендерилась и на OSL 7.1 с Blender 2.80 из OSL 7.0cr3, и на Альте 10 с Blender 2.93.4.

Результаты в сцене Fishy Cat при рендеринге в Blender.

Гистограмма 17. Результаты в сцене Fishy Cat при рендеринге в Blender.

И вот что занимательно в этой сцене: быстрее всего её отрендерил Эльбрус с Blender 2.80 в Эльбрус ОС 7.1, а в Альт Линуксе с версией 2.93.4 результат в трансляции и без неё отличается менее чем на 1 минуту. Ну и разница в трансляции между версиями 2.80 и 2.93.4 также минимальна.

О чём это говорит? В Альт Линуксе нативный Blender имеет меньшие оптимизации и по производительности он сопоставим с таковым в трансляции, а вот в OSL, хоть он и работает с ошибками (как и в Альт), но выжимает больше производительности. Вариант из Альт Линукс рендерил сцену на 19% дольше, и это существенная разница.

Если вам нужен Blender, в целом на Эльбрусе им можно пользоваться, но для стабильной работы лучше предпочесть трансляцию (x86) через RTC.

Результаты в сцене Fishy Cat при рендеринге в Blender. Результат в % производительности.

Гистограмма 18. Результаты в сцене Fishy Cat при рендеринге в Blender. Результат в % производительности.

Для простоты восприятия я сгенерировал такую же гистограмму, только с процентами. В ней за 100% взял результат Blender 2.93.4 на Alt Linux в трансляции (RTC 4.1, Ubuntu 20.04.3). Поделил его результаты в секундах на результаты остальных, и так получил, кто быстрее. Ну и выходит, что на 22% быстрее нативный Blender 2.80 в сравнении с транслированным.

Дальше я результаты с Альта брать не стал, т.к. они в целом мало отличаются от таковых в трансляции (разница менее 3%).

Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Гистограмма 19. Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Со сценой BMW27 всё обстоит +- также.

Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Гистограмма 20. Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

И в сцене BMW27 разница натива с трансляцией также составила около 20%. Тут заметна разница в 6% между 2.80 и 2.93.4 в трансляции. Это уже не списать на погрешность. Но в остальных сценах всё +- одно и то же.

Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Гистограмма 21. Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Victor – это самая тяжёлая сцена из тех, что мы тестируем. При рендеринге этой сцены у меня на ноутбуке возникала ошибка с версией 2.80, а вот на Эльбрусе, напротив, и в трансляции, и в нативе эта сцена отрендерилась успешно. Нюанс возник только на сборке под Альт Линукс.

Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Гистограмма 22. Сравнение Blender 2.80 в нативе и трансляции, и 2.93.4 в трансляции на 8С.

Со сценой victor нативная версию Blender 2.80 справилась на 27% быстрее, чем x86 версия в трансляции (или последняя рендерила на 21% дольше, смотря что брать за 100%). В трансляции же более свежая версия, 2.93.4, заметно (+- 10%) быстрее старой, 2.80, но ещё не уровень натива.

Занимательно, но в случае со всеми сценами, что Blender версии 2.80 отрендерил успешно в нативе, разница выходит около 20-25% с трансляцией той же версии. Я думаю, что можно выжать ещё больше производительности, но Blender на Эльбрусе, как я понимаю, не в приоритете, т.к. другие, не менее важные, задачи по разработке и оптимизации, и все они требуют внимания.

Тест Blender 2.80 и 2.93.4 на Xiaomi Mi Notebook Pro GTX.

Скриншот 79. Тест Blender 2.80 и 2.93.4 на Xiaomi Mi Notebook Pro GTX.

У меня на моём ноутбуке Xiaomi, как я уже упоминал выше, не все сцены успешно отрендерились в Blender 2.80. На сцене victor у меня Blender вылетел спустя 1.5 минуты. Впрочем, с версией 2.93.4 уже всё хорошо было.

Результат Raspberry Pi 4 (1.8 ГГц) при рендеринге в Blender 2.82.

Скриншот 80. Результат Raspberry Pi 4 (1.8 ГГц) при рендеринге в Blender 2.82.

Я также прогнал этот тест на Raspberry Pi 4 с Blender версии 2.82 (там такая версия в репозитории Ubuntu).

Результат Raspberry Pi 4 (1.8 ГГц) при рендеринге в Blender 2.82.

Скриншот 81. Результат Raspberry Pi 4 (1.8 ГГц) при рендеринге в Blender 2.82.

Тест я проводил и с Raspberry Pi OS с версией Blender 2.83.5, и там результаты как-то сильно не отличились от 2.82 в Ubuntu. Разница есть, но она в целом она около 5%, которые обусловлены отсутствием графического интерфейса на Ubuntu у меня (и его присутствием на RPI OS). Но, что имеет значение, в Ubuntu мы можем провести тест и с трансляцией через ExaGear.

На Эльбрусе я прогнал этот тест ещё на винде.

Результат Эльбрус 8С при рендеринге в Blender 2.80 (x32), 2.80 (x64) и 2.93.4 (x64).

Скриншот 82. Результат Эльбрус 8С при рендеринге в Blender 2.80 (x32), 2.80 (x64) и 2.93.4 (x64).

Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Эльбрус 8С с Windows 10 (21H2).

Гистограмма 23. Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Эльбрус 8С с Windows 10 (21H2).

Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Эльбрус 8С с Windows 10 (21H2).

Гистограмма 24. Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Эльбрус 8С с Windows 10 (21H2).

На винде я тестировал Blender 2.80 как с x32 версией, так и с x64, чтобы понять, есть ли разница между выполнением x32 и x64 кодов в Lintel. И, по большому то счёту, разница не значительна. Да, средняя разница по всем сценам примерно 3% в пользу x32 версии, конкретно в сцене koro разница составила 16% в пользу x32 версии, но, в общем и целом, разница не велика. Только с x32 версией сцена victor не рендерится, а с x64 проблем нет.

Результат Xiaomi Mi Notebook Pro GTX при рендеринге в Blender 2.80 (x32), 2.80 (x64) и 2.93.4 (x64).

Скриншот 83. Результат Xiaomi Mi Notebook Pro GTX при рендеринге в Blender 2.80 (x32), 2.80 (x64) и 2.93.4 (x64).

Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Xiaomi Pro GTX с Windows 10 (1909).

Гистограмма 25. Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Xiaomi Pro GTX с Windows 10 (1909).

Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Xiaomi Pro GTX с Windows 10 (1909).

Гистограмма 26. Сравнение Blender 2.80 (x32 и x64) и Blender 2.93.4 (x64) на Xiaomi Pro GTX с Windows 10 (1909).

Я проверил на своём ноутбуке Xiaomi, и у меня вышло совсем иначе: во всех сценах (кроме koro в версии 2.93.4) с x64 версией у меня рендеринг проходил на 20-44% быстрее. В среднем разница по скорости между 2.80 x32 и 2.80 x64 у меня вышла в 32% в пользу как-раз x64 версии. С более свежей версией, с 2.93.4, которая поставляется только в x64 варианте, средняя разница по всем сценам вышла примерно такой же: 26% в пользу x64 версии.

О чём это говорит? Если x64 код на обычных x86 машинах переваривается процессором быстрее, то на Эльбрусе уже не всё так однозначно и в целом x32 код и x64 код перевариваются им со схожей эффективностью. Если глобальной разницы на Эльбрусе я не увидел между тестами x32 и x64 версий программ, то на настоящей x86 машине эта самая разница есть и она довольно значительна. Такое вот занимательное наблюдение.

Результат Эльбрус 16С при рендеринге в Blender 2.93.4 с трансляцией в RTC и без неё.

Скриншот 84. Результат Эльбрус 16С при рендеринге в Blender 2.93.4 с трансляцией в RTC и без неё.

Сравнение Blender 2.93.4 в нативе и в трансляции (RTC 4.1) на Эльбрус 16С.

Гистограмма 27. Сравнение Blender 2.93.4 в нативе и в трансляции (RTC 4.1) на Эльбрус 16С.

Сравнение Blender 2.93.4 в нативе и в трансляции (RTC 4.1) на Эльбрус 16С.

Гистограмма 28. Сравнение Blender 2.93.4 в нативе и в трансляции (RTC 4.1) на Эльбрус 16С.

На Эльбрусе 16С, как и на 8С, я прогнал тест как в нативе, так и в трансляции при помощи RTC (образ Ubuntu 20.04.3). И картина у него вышла совсем не такая, как на 8С. На 16С вариант в трансляции быстрее аж на 39% в среднем: 60% по сцене fishy_cat и 17% разница по сцене pavillon_barcelona. Сравниваю лишь эти сцены, т.к. другие в нативе у меня не отрендерились.

Почему так? Полагаю, что причина в том, что нативный Blender под 16С недостаточно оптимизирован, а вот в трансляции Blender, скорее всего, обрабатывались инструкции под 128-бит регистры и преимущества E2Kv6.

Для сравнения эффективности трансляции в тесте Blender нам нужны ещё данные от Macbook Pro с Apple M1. Год назад, когда я его тестировал, ещё не вышла нативная стабильная версия под Mac с чипом M1. Но чуть позже её, всё же, релизнули. Вот только в Blender Benchmark нет ARM версии под M1. Так что здесь мы также задействуем мой набор команд.

Время, затраченное на рендеринг сцен в Blender 2.93.4 на Macbook Pro с Apple M1 (с трансляцией и без).

Скриншот 85. Время, затраченное на рендеринг сцен в Blender 2.93.4 на Macbook Pro с Apple M1 (с трансляцией и без).

Большое спасибо Рифату Фазлутдинову, подписчику моего Telegram-канала, за то, что откликнулся на мой клич и помог мне, проведя этот тест (и тот, что увидите в следующей подглаве) на своём Macbook Pro с Apple M1.

Так мы смогли собрать все данные, какие надо.

Поскольку на Эльбрусе 8С и 16С нет стабильного Blender, я буду для сравнения использовать результаты x86 версии Blender в трансляции. Учитывая то, что на Эльбрус ОС с версии 6.0 по 7.0rc3 нативный Blender, хоть и в нестабильном виде, позволял достичь прироста производительности в 20-25%, и понятно, что это далеко не предел и можно ещё больше производительности выжать, оптимизировав его, прикидывайте, что в случае релиза нативной стабильной версии на Эльбрус, получится достичь прироста по производительности ещё раза в 1.5 или больше.

Результаты для сравнения с другими аппаратиами я возьму из версии Blender 2.93.4 на Эльбрусе в трансляции. Т.е. за 100% мы будем считать результат Blender 2.93.4, работающий через RTC 4.1 на Альт 10. Я не буду учитывать время рендеринга сцены victor в общей сумме, т.к. с версиями 2.82 и 2.83.5 на ней были проблемы у того же Raspberry Pi 4.

Время, затраченное на тесты в Blender (без учёта victor) у всех аппаратов.

Гистограмма 29. Время, затраченное на тесты в Blender (без учёта victor) у всех аппаратов.

Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

Гистограмма 30. Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

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

Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

Гистограмма 31. Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

2 гистограммы выше не особо отличаются между собой. Да, небольшая разница в % скорости есть в зависимости от метода подсчёта, но какой-то принципиальной разницы не вижу. Гистограммы вышли большими, поэтому рассмотрю далее всё по частям. Пока же можете в целом взглянуть и оценить расклад. Быстрее всех тут Macbook Pro с чипом Apple M1. Он и в трансляции в 5 раз быстрее, чем компьютер с процессором Эльбрус 8С. Но в нативе MacBook не особо вырвался. Ну да ладно, рассмотрим всё в деталях далее.

Время, затраченное на рендеринг в Blender на Эльбрус 8С с RTC 4.1 и с Lintel 4.1 (Windows 10 21H2).

Гистограмма 32. Время, затраченное на рендеринг в Blender на Эльбрус 8С с RTC 4.1 и с Lintel 4.1 (Windows 10 21H2).

Скорость рендеринга в Blender на Эльбрус 8С с RTC 4.1 и с Lintel 4.1 (Windows 10 21H2).

Гистограмма 33. Скорость рендеринга в Blender на Эльбрус 8С с RTC 4.1 и с Lintel 4.1 (Windows 10 21H2).

Я уже говорил, что считаю винду на Эльбрусе отдельным сортом извращения. Покупать защищённый процессор, чтобы ставить на него винду, которая все ваши данные сливает Microsoft, да ещё и с которой компьютер нещадно тормозит, это, конечно, полнейший бред. Так и в тесте на рендеринг в Blender: производительность падает более чем в 2 раза при использовании винды. В общем, Lintel – это решение на самый крайний случай.

Время, затраченное на рендеринг в Blender на Raspberry Pi 4 с ExaGear и без.

Гистограмма 34. Время, затраченное на рендеринг в Blender на Raspberry Pi 4 с ExaGear и без.

Скорость рендеринга в Blender на Raspberry Pi 4 с ExaGear и без (относительно Ubuntu в нативе).

Гистограмма 35. Скорость рендеринга в Blender на Raspberry Pi 4 с ExaGear и без (относительно Ubuntu в нативе).

На Raspberry Pi 4 нас интересует эффективность Huawei ExaGear в этой задаче. Как видпте, c ExaGear получается чуть более чем в 1.5 раза медленнее, чем в нативе. И тут вопрос: это Blender так хорошо оптимизирован под ARM, или бинарный транслятор не может выжать более эффективный код. Возможно, для эффективной работы бинарного транслятора нужно более, чем 4 ядра, или более, чем 4 ГБ оперативной памяти. Но факт в том, что в любом случае оно работает, и на Linux с ARM одноплатниками вы с относительно высокой эффективностью (вовсе не как с каким-нибудь эмулятором) можете запускать x86 код.

Но вообще результаты при трансляции Blender на малине выходят примерно такими же, как и у Эльбруса с Lintel в Windows. Опыт не лучший.

Я не вижу смысла далее сравнить с Эльбрусом результат малины в трансляции, так что в Blender далее я буду учитывать только натив у малины.

Время, затраченное на рендеринг в Blender на Macbook Pro (M1) с Rosetta 2 и без.

Гистограмма 36. Время, затраченное на рендеринг в Blender на Macbook Pro (M1) с Rosetta 2 и без.

Скорость рендеринга в Blender на Macbook Pro (M1) с Rosetta 2 и без.

Гистограмма 37. Скорость рендеринга в Blender на Macbook Pro (M1) с Rosetta 2 и без.

И тут опять вопрос: это разработчики Rosetta 2 в Apple такие красавчики, что эффективность Rosetta 2 в тесте Blender составила 89%, или же это разработчики Blender просто не оптимизировали ещё свой инструмент под Mac с Apple M1? Я бы скорее ставил на слабую оптимизацию под ARM, т.к. иначе бы отрыв от Эльбрус 8С с RTC был бы сильно больше, чем в 5 раз.

В любом случае, результаты потрясающие.

Теперь попробуем сравнить результаты всех аппаратов с таковыми у 8С и 16С в трансляции. Почему так? На данный момент на Эльбрусе Blender ещё не стабилен, ряд сцен с ним не удаётся отрендерить, поэтому у Эльбруса мы берём в учёт результаты с трансляцией, а у остальных – в нативе.

Время, затраченное на тесты в Blender (без учёта victor) у всех аппаратов.

Гистограмма 38. Время, затраченное на тесты в Blender (без учёта victor) у всех аппаратов.

Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

Гистограмма 39. Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

Гистограмма 40. Скорость рендеринга всех сцен в Blender (без учёта victor) относительно Эльбрус 8С с RTC 4.1.

Здесь я также привёл вам 2 гистограммы с разницей в %. Картина в целом +- одна и та же в обеих гистограммах, разница не шибко велика.

Если сравнивать с Эльбрусом 8С, который рендерит сцены в трансляции через RTC, малина медленнее в 1.5 раза (при том, что она в нативе), Эльбрус-16С быстрее почти в 3 раза (+192%), мой Xiaomi быстрее почти в 4 раза, а Macbook Pro с чипом Apple M1 – чуть более чем в 5.5 раз.

Ну, во-первых, в макбуке стоит просто монстр, а не процессор. Он построен по техпроцессу 5 нм (не 16 нм как у 16С и не 28нм как у 8С). Apple M1 навёл знатного шороха в 2020-м году, и до сих пор этот процессор просто великолепен. Во-вторых, оптимизацией Blender под E2K, уверен, можно выжать ещё раза в 1.5, а то и в 2, больше производительности. Во всяком случае, на 16С так точно, ведь он в трансляции на 40% быстрее натива.

Сейчас мы тест вели на 8С и 16С в трансляции, поэтому результаты такие.

Blender - попытка установить видеокарту (OpenCL) для рендеринга с движком Cycles.

Скриншот 86. Blender - попытка установить видеокарту (OpenCL) для рендеринга с движком Cycles.

С Blender есть ещё одна неприятная особенность: он в нативе не работает с видеокартой. И не только в нативе, но и с RTC, и с Lintel в Ubuntu. На StackExachange я вычитал, что Blender на Linux не работает с открытой реализацией драйвера AMDGPU, и для его работы нужен проприетарный драйвер для видеокарты от AMD. Что ж, я поставил этот драйвер, использовав следующую команду для установки:

                            sudo amdgpu-install --usecase=workstation,graphics,opencl --opencl=rocr,legacy --vulkan=amdvlk,pro -y
                        
Доступные устройства для использования с Blender Benchmark 2.04 в Ubuntu 2.04.3 через Lintel 4.1.

Скриншот 87. Доступные устройства для использования с Blender Benchmark 2.04 в Ubuntu 2.04.3 через Lintel 4.1.

После установки драйвера у меня появилась опция OpenCL в Blender Benchmark, однако сам тест у меня виснет после попытки его запустить. Т.е. это касается не только обычного Blender, но и инструмента для бенчмарка, Blender Benchmark. Короче говоря, у меня проблемы возникли с Blender даже с проприетарными драйверами для GPU от AMD в Linux.

Доступные устройства OpenCL для использования с Blender в Windows.

Скриншот 88. Доступные устройства OpenCL для использования с Blender в Windows.

А вот в Windows всё заработало с пол пинка. Установил драйвер с сайта AMD, загрузил Blender версии 2.93.4, запустил и выбрал видеокарту для работы с движком Cycles. Вообще ни чуточки не паришься, никаких сложностей ни с чем нету. Просто установил драйверы и всё пашет.

В общем-то, это одна из причин, по которой я не особо люблю Linux: с ним постоянно какая-то дичь. Это касается не только Эльбруса, нет, ни в коем случае, он то здесь не при чём. С Linux разного рода геморрой и при работе на x86 машинах. Вечно каких-то драйверов не хватает или они не допилены толком, или тот или иной софт требует именно определённые драйверы и никакие другие (скажем, Davinci Resolve не работает с nauveau, открытыми драйверами GPU NVidia, и требует для работы именно проприетарные драйверы), вечно какой-то софт не работает с тем или иным дисплейным менеджером (да тот же Davinci Resolve не работает с Wayland и требует X.Org), и т.д. И разные возможности тебе доступны только с разным набором предустановленного ПО. Скажем, автоматические переключение видеокарт с интегрированной на дискретную в ноутбуке, не работает с проприетарными драйверами NVidia. А вот без них ряд софтин не пашет...

Я не хочу ничего вменить здесь МЦСТ. Они-то свою работу делают замечательно. Дело в Linux, но альтернатив нет. Microsoft не станет выпускать Windows под Эльбрусы, равно как и Apple под Эльбрус не выкатит macOS. Из распространённых ОС остаются только FreeBDS и Linux. В таких условиях выбор очевиден: Linux. На нём больше прикладного ПО.

Результат бенчмарка Radeon RX580 в Windows 10 21H2 с Lintel 4.1 на Эльбрус 8С.

Скриншот 89. Результат бенчмарка Radeon RX580 в Windows 10 21H2 с Lintel 4.1 на Эльбрус 8С.

Ладно, что там по результатам? У меня ошибку выдавало на сценах koro и victor, но в целом я даже смог прогнать тест в Blender Benchmark при помощи видеокарты Radeon RX580 в компьютере с Эльбрус 8С.

Короче, у Blender есть явные проблемы с работой на Linux, поэтому возможны ситуации, когда ради того же софта, что доступен и на Linux, вам придётся воспользоваться Windows.

Да, без винды пожить не получится людям, которые работают с графикой. Но не лучше ли для таких случаев иметь «про запас» компьютер, под который Windows создавался? Зачем на Эльбрусе в трансляции гонять винду, когда есть настоящие x86 процессоры, с которыми винда нормально работает? Я, всё ещё, не понимаю, зачем кому-то ставить винду на Эльбрус.