Render.ru

Blender 2.55 Beta (r32895) для Linux/GNU (64 bit)

hikkikamori

Знаток
Рейтинг
28
#1
Здравствуйте! На данный момент у меня стоит Debian Lenny 5.06 (64 bit). Собрал свежий Blender 2.55 сборки 32895 с исходников, для этого сначала создал в домашней директории каталог blender-build
# cd ~/
# mkdir blender-build
зашёл в неё
# cd blender-build
скачал последние исходники
https://svn.blender.org/svnroot/bf-blender/trunk/blender
В результате все исходники были в ~/blender-build/blender
Создал новый каталог cmake и зашёл в него
# mkdir cmake
# cd cmake
Удовлетворив некоторые зависимости с генерировал файл для управления сборкой Makefile
# cmake ../blender
Установив Python 3.1 и все пакеты необходимые для компиляции Блендера запустил непосредственно сам этот процесс (при этом указал, что нужно собирать для 2-ух ядер -j3)
# make -j3
В результате получил сам бинарный файл blender и всё необходимое для его запуска. Blender 2.55 Beta запускается, всё вроде бы сделал правильно, но меня волнует, что рендер идёт в такой сборке медленнее почти в 2 раза, чем в Blender 2.54 Beta взятого с blender.org. С чем это может быть связано?
 

logosman

Модератор форума
Команда форума
Рейтинг
316
#2
Обязательно нужно проверить ключи компилятора (GCC), убедиться в том, что в Release включен -O2 (или O3), желательно добавить -march=native. И обязательно включить поддержку OpenMP. Думаю это решит проблему.
 

hikkikamori

Знаток
Рейтинг
28
#3
Logosman, не могли бы вы немного подробнее написать как это сделать. Я немного погуглил, как я понимаю опция -march=native включает поддрежку автоопределения типа процессора под которой будет идти сборка. Я сделал ccmake ../blender, результат показан на картинках. Из первой картинки видно, что WITH_OPENMP = ON, из второй (advanced mode (Currently On)) :

....
CMAKE_CXX_FLAGS *
CMAKE_CXX_FLAGS_DEBUG *-g
CMAKE_CXX_FLAGS_MINSIZEREL *-Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE *-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO *-O2 -g
CMAKE_C_COMPILER */usr/bin/gcc
CMAKE_C_FLAGS *
CMAKE_C_FLAGS_DEBUG *-g
CMAKE_C_FLAGS_MINSIZEREL *-Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE *-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO *-O2 -g
....

вроде как поддержка -03 напротив RELEASE стоит. Что каксается -march=native, я должен прописать эту опицию в CMAKE_CXX_FLAGS_RELEASE и CMAKE_C_FLAGS_RELEASE, т.е. дописать " -O3 -DNDEBUG -march=native" ?
 

Вложения

logosman

Модератор форума
Команда форума
Рейтинг
316
#5
Всё верно, -march=native для автоматического определения настроек оптимизации компилятором, прописать лучше и в CMAKE_C_FLAGS_RELEASE, и в CMAKE_CXX_FLAGS_RELEASE. То что OpenMP включен это хорошо. Если проблема останется, то обращайтесь непосретственно на freenode к разработчикам. Возможно это временная проблема (в текущей ревизии). По поводу x64 ничего посоветовать не могу, сижу на Debian x32.
Если у Вас версия GCC < 4.5, то лучше использовать -O2 вместо -O3. Есть ещё масса вкусностей для оптимизации (http://gcc.gnu.org/onlinedocs/). Советую почитать про LTO.
http://www.google.ru/search?hl=ru&source=hp&biw=1280&bih=827&q=gcc+LTO&aq=f&aqi=g2&aql=&oq=&gs_rfai=
 

hikkikamori

Знаток
Рейтинг
28
#6
Попробовал поставить

CMAKE_CXX_FLAGS = " -O3 -march=native"
CMAKE_C_FLAGS=" -O3 -march=native"

Рендер пошёл намного быстрее, не хуже чем в 2.54 с blender.org. Как вы думаете, напротив CMAKE_C_FLAGS_RELEASE и CMAKE_CXX_FLAGS_RELEASE тоже надо выставить теперь march=native, и то что там DNDEBUG это нормально?
 

hikkikamori

Знаток
Рейтинг
28
#7
Ещё вопрос. Существуют два параметра -march=native и -mtune=native. Чем отличается первый от второго? Я в английском не очень силён, на сколько понял, что -march=native позволяет автоматически определять настройки при компиляции непосредственно для моего железа, второй - более общий, и используется с некоторыми ограничениями..

> Если у Вас версия GCC < 4.5, то лучше использовать -O2 вместо -O3. Есть ещё масса вкусностей для оптимизации

Значит предпочтительнее для меня заменить везде где стоит - 03 заменить на -02 ? (у меня наиболее новый пакет gcc 4.4 стоит)
 

Вложения

hikkikamori

Знаток
Рейтинг
28
#8
Сейчас попробовал проставить везде -02 -march=native
...
CMAKE_CXX_FLAGS * -02 -march=native
CMAKE_CXX_FLAGS_DEBUG * -g
CMAKE_CXX_FLAGS_MINSIZEREL* -Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE * -O2 -march=native -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO * -O2 -g
CMAKE_C_COMPILER * /usr/bin/gcc
CMAKE_C_FLAGS * -02 -march=native
CMAKE_C_FLAGS_DEBUG * -g
CMAKE_C_FLAGS_MINSIZEREL * -Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE * -O2 -march=native -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO * -O2 -g
....

Сейчас запустил пока # make -j3. Как с компилируется, попробую запустить render и отпишусь
 

hikkikamori

Знаток
Рейтинг
28
#9
С -02 -march=native после компиляции рендер опять пошёл в 2 раза медленнее. Когда поставил флаги -03 -march=native напротив CMAKE_CXX_FLAGS, CMAKE_CXX_FLAGS_RELEASE, CMAKE_C_FLAGS и CMAKE_C_FLAGS_RELEASE результат был лучше. Вот сравнительный тест для одной и той же сцены:

ОС: Debian Lenny 5.06 (64 bit):

Сама сцена: Ve: 1753533, Fa: 2417123, La: 3

вар1 (после компиляции Blender 2.55 beta с флагом -03 -march=native, с поддержкой 2-ух ядер (-j3)): Time: 5:15.09 (время рендера)

вар2 (Blender 2.54 с сайта blender.org): Time: 5:21.70 (время рендера)

Пожалуй остановлюсь на этом, буду проставлять при последующих компиляциях -03 -march=native. Спасибо Logosman, вы мне очень помогли :)
 

logosman

Модератор форума
Команда форума
Рейтинг
316
#10
Как вы думаете, напротив CMAKE_C_FLAGS_RELEASE и CMAKE_CXX_FLAGS_RELEASE тоже надо выставить теперь march=native, и то что там DNDEBUG это нормально?
CMAKE_C_FLAGS_RELEASE включает в себя CMAKE_C_FLAGS, также и на DEBUG версию, поэтому правильнее конечно указывать в CMAKE_C_FLAGS_RELEASE. Но т.к. Вы не являетесь разработчиком Blender, оно Вам будет без разницы.

По поводу O3 есть разные мнения, он лучше себя показывает на процессорах с большим кэшем.

Существуют два параметра -march=native и -mtune=native
-mtune - устаревший параметр, его вытесняет -march.

Спасибо Logosman, вы мне очень помогли :)
Всегда пожалуйста ;)
 

hikkikamori

Знаток
Рейтинг
28
#11
Хочу немного добавить. Вчера когда собирал новую сборку blender 2.55 beta , поставив флаги -03 -march=native, фокус уже почему-то не удался.. хотя работало же.. :/ У меня Athlon64 X2 Dual-Core 5000+, gcc (Debian 4.3.2-1.1) 4.3.2, немного погуглив, нашёл вот такой вот способ для моего типа процессора :

CMAKE_CXX_FLAGS -02 -march=athlon64 -pipe
CMAKE_C_FLAGS -02 -march=athlon64 -pipe

время рендера опять стало приличным, для выше указанной сцены: 5:13.22
 
Сверху