HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- BLAS (базовые подпрограммы линейной алгебры) (https://hlfx.ru/forum/showthread.php?threadid=3469)
Отправлено underworlddemon 10-06-2012 в 12:59:
BLAS (базовые подпрограммы линейной алгебры)
У меня тут назрел вопрос о использовании оптимизаций в движках, а конкретно оптимизации математики (учитывая как много происходит расчётов матриц, векторов и т.п.).
Вопрос об использовании библиотек Eigen, ACML, MKL и т.п.
Какая ситуация в использовании таких оптимизаций в движках местного разлива ?
А в коммерческих ?
Отправлено XaeroX 10-06-2012 в 13:27:
Я работал слушал лекции про CUBLAS, так вот там память маллокается в вызове каждой функции.
Это, может быть, и оправдано при решении СЛАУ офигенного размера, но в движках таких расчётов обычно нет. Максимум матрицы 3х3 да 4х4.
__________________
Отправлено Дядя Миша 10-06-2012 в 13:49:
Самая главная апчхимизхация математических рассчётов - это кеширование результатов, там где это по смыслу даст прирост.
Либо как lord Havok сидеть и считать операции в каждой мат.функции, пытаясь её апчхимизировать. Правда от евонных апчхимизаций оно глючить начинает в некоторых случаях.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено underworlddemon 10-06-2012 в 14:31:
поначитался умных мыслей:
Цитата:
Любимое упражнение в учебниках по С++ – это создание класса, инкапсулирующего векторы и матрицы. Таких классов созданы сотни, но все они имеют крайне низкую производительность и никогда не используются для серьезных задач. Компилятор С++, в отличие от Fortran, даже не подозревает, что векторы и матрицы надо обрабатывать поэлементно.
В результате, в сумме матриц:
mat1 = mat2 + mat3
сначала будет вычислена правая часть и присвоена временному объекту. Затем временный объект будет скопирован в mat1 и разрушен. Ясно, что вызов конструктора и деструктора временного объекта и копирование данных совершенно излишни.
Цитата:
Любой мало-мальски сложный вычислительный алгоритм включает в себя действия с векторами и матрицами. По большому счету, почти все вычислительное программирование держится на операциях над одно- или двумерными массивами. Массивы С++ для таких операций приспособлены плохо.
Каждый массив – это всего лишь указатель, по которому приходится вручную выделять и освобождать память. Для матриц это приходится делать для каждой строки, что является сомнительным удовольствием. Массивы не знают своего размера, так что приходится использовать с каждым из них отдельную переменную с числом элементов. Любые действия
с массивами как с целым приходиться расписывать поэлементно в виде циклов. Если используются только векторы (что бывает редко), то некоторую помощь дает класс std::valarray из STL. Если же нужно работать с матрицами, то волей-неволей приходится использовать сторонние библиотеки.
и это не считая векторизации (про неё 2 страницы текста)
тут вопрос именно в скорости выполнения кода (разнице оптимизированного под вычисления и написанного в надежде на магию компилятора)
Отправлено Дядя Миша 10-06-2012 в 14:46:
это, я извиняюсь, бред понаписан.
во первых почему это обязательно в виде циклов?
во вторых, кто мешает заставляет динамически выделять память под матричные операции?
В третьих, что это за идиотская операция такая - сложение матриц?
Может быть имелась в виду конкатенция?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено underworlddemon 10-06-2012 в 15:05:
написал именно чтобы разобраться (сам нуб нубом, потому и собираю умные мысли)
чаще всего в том тексте были отсылке к коду генерируемому компилятором
т.е. если дать на откуп компилятору, то выйдет мягко говоря не самый быстрый код
p.s. яндекс на фразу "сумма матриц" выдаёт даже специальный инструмент по вычислениям матриц =)
Отправлено Дядя Миша 10-06-2012 в 15:10:
да ково. Я вон в ксаш-моде кэширование вертексов замутил. Еле-еле 5 фпс выиграл на карте freeman.bsp из моего знаменитого бенчмарка.
Шо вы там надеетесь апчхимизировать?
И эта. Ачхимизированная матчлиба зачастую брешет. И брешет достаточно сильно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено underworlddemon 10-06-2012 в 15:18:
Цитата:
Дядя Миша писал:
И эта. Ачхимизированная матчлиба зачастую брешет. И брешет достаточно сильно.
чем она может брешить ?
эти библиотеки разрабатываю для удобства вычисления (синтаксис ближе к математическому) и повышению скорости проектов с сильным использованием математики.
неужели ты думаешь, что разработчики идиоты и пишут то, что будет мешать их вычислениям ?
другое дело непривычный синтаксис и написание могут натолкнуть на ошибки логики программы, которые по первости не сразу заметишь
Отправлено CrazyRussian 10-06-2012 в 15:26:
Цитата:
underworlddemon писал:
чем она может брешить ?
тем что используются приближенные методы вычислении чего либо, что уменьшает точность и повышает скорость.__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Отправлено XaeroX 10-06-2012 в 15:27:
Цитата:
Дядя Миша писал:
В третьих, что это за идиотская операция такая - сложение матриц?
Может быть имелась в виду конкатенция?
Стандартная операция покомпонентного сложения матриц.__________________
Отправлено Дядя Миша 10-06-2012 в 15:30:
Цитата:
underworlddemon писал:
неужели ты думаешь, что разработчики идиоты и пишут то, что будет мешать их вычислениям ?
разработчики этих библиотек крайне далеки от разработки, собственно игр. Я на собственном опыте убедился, что самое надежное - это использовать стандартный матчлиб из WInAPI.
Цитата:
XaeroX писал:
Стандартная операция покомпонентного сложения матриц.
а__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено underworlddemon 10-06-2012 в 15:34:
Цитата:
CrazyRussian писал:
тем что используются приближенные методы вычислении чего либо, что уменьшает точность и повышает скорость.
гммм... найди мне хоть 1 такую операцию в Eigen (в ней проще всего ибо чисто h-едерная и исходники открыты)
Отправлено XaeroX 10-06-2012 в 15:38:
underworlddemon
Да хотя бы использование float вместо double.
Или GPGPU вычисления без ECC.
__________________
Отправлено underworlddemon 10-06-2012 в 16:11:
Цитата:
XaeroX писал:
Да хотя бы использование float вместо double.
Или GPGPU вычисления без ECC.
бегло просматривая не заметил подобного
только свёртка-развёртка кода так, чтобы компилятору было удобнее генерировать наибыстрейшие последовательности
хотя я нуб
p.s. что-то вы зациклились на непогрешимости компилятора
вы считаете автоматика может предусмотреть все варианты и выбрать наилучший, что верите так религиозно в это ?
Добавлено 10-06-2012 в 19:53:
http://eigen.tuxfamily.org/dox/Topi...genExample.html
Добавлено 10-06-2012 в 20:11:
http://wiki.linuxformat.ru/index.ph...%B1%D1%80%D1%8B
старая статья... но в матрицах 3x3 очень показательна разница даже среди специализированных библиотек
Отправлено XaeroX 10-06-2012 в 16:17:
Цитата:
underworlddemon писал:
бегло просматривая не заметил подобного
Так там double или float?
Цитата:
underworlddemon писал:
что-то вы зациклились на непогрешимости компилятора
Скажем так, в 2012 году я больше доверяю компилятору, чем среднестатистическому программисту
А вот лет 15 назад ситуация была иной.
Добавлено 10-06-2012 в 23:17:
Цитата:
underworlddemon писал:
но в матрицах 3x3 очень показательна разница даже среди специализированных библиотек
А где данные для "безо всяких библиотек, сам только что написал на си"?__________________
Отправлено Дядя Миша 10-06-2012 в 16:32:
Ох ёлки... Ну предположим, используя эту библиотеку можно выиграть пару фпс в пределах погрешности. Оно того стоит?
Самые тяжелвые вычисления ложаться либо на симулятор физики, который обычно является черным ящиком с собственной матчлибой, либо на видимокарту. В том же OpenGL, заранее нельзя предугадать что будет посчитано на проце, а что отдано видеокарте. Т.е. аппаратное отсутствие какой либо фичи никак не афишируется. Просто начинает работать медленнее, поскольку выполняется софтварная эмуляция.
Да чего за примером далеко ходить, вон тов.Noob замутил тут партиклы на GL_POINTS. На десктопе прирост фпс в десятки раз, а на ноуте - падение почти в три раза. А вы тут за матчлибы переживаете.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-06-2012 в 16:39:
Цитата:
Дядя Миша писал:
Т.е. аппаратное отсутствие какой либо фичи никак не афишируется. Просто начинает работать медленнее, поскольку выполняется софтварная эмуляция.
Оно афишируется в документации)
Цитата:
Дядя Миша писал:
На десктопе прирост фпс в десятки раз, а на ноуте - падение почти в три раза
Точки вроде уже давно депрекейтед, вместо них рекомендуется рисовать маленькие квады. Которые тоже депрекейтед, вместо них рекомендуется рисовать два триангла
Вот вам и оптимизация.__________________
Отправлено underworlddemon 10-06-2012 в 17:00:
т.е. резюмируя вышесказанное:
1) не используется
2) не внушает доверия
и что самое главное:
3) не проверяли
???
Отправлено XaeroX 10-06-2012 в 17:06:
underworlddemon
1) незачем
2) надо тратить время на чтение документации (ты видел названия функций BLAS?)
3) не проверяли, да.
Вот взял бы и проверил, а потом нам рассказал. 
__________________
Отправлено underworlddemon 10-06-2012 в 17:12:
1) религиозное убеждение, учитывая что не проверяли ?
2) ну у Eigen функции очень просто называются (очень близко к математическому названию)
хотя почитать придётся
3) -
нуб я, чтобы мутить действительно показательные примеры 
Отправлено XaeroX 10-06-2012 в 17:27:
1) Я вроде объяснил, что для матрицы 3х3 все эти функции, заточенные под NxN (где N могут быть очень большими), могут быть малоэффективны. Ты показал сравнительную таблицу - а я попросил показать сравнение с обычным самодельным, оптимизированным под 3х3, кодом. Его там нет. Угадай, почему.
2) Странно, обычно разработчики BLAS стараются следовать концепции наименования, заложенной в бородатых 80-х (или когда там первый BLAS написали).
__________________
Отправлено underworlddemon 10-06-2012 в 17:37:
1) тут нема http://eigen.tuxfamily.org/index.php?title=Benchmark
а сам это я сделать не смогу - тебе проще, как спецу в этом вопросе 
2) ну библиотек не 1 и не 2
некоторые наследуют черты BLAS или LAPACK
некоторые специализированны под определённые задачи
некоторые более синтаксически простые
и т.п.
Отправлено Дядя Миша 10-06-2012 в 17:50:
Цитата:
underworlddemon писал:
т.е. резюмируя вышесказанное:
1) не используется
2) не внушает доверия
и что самое главное:
3) не проверяли
в самом начале постройки ксаша я безумно увлекался кастомными апчхимизированными матчлибами (см. сорцы), и постоянно прикручивал туда всякое. То быстрые синусы-косинусы, то понимаешь кавадратные корни на SSE. Так вот ни одна, ни одна из этих апчхимизаций не дала такого прироста, который бы бы визуально заметен даже на тесте timerefresh, не говоря уже о реальных игровых ситуациях. Зато проблем с ними было выше крыше. Помните у арбалета стрелы криво летали?
Это вот как раз последствия апчхимизированного матчлиба.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-06-2012 в 17:58:
Цитата:
Дядя Миша писал:
Это вот как раз последствия апчхимизированного матчлиба.
О, а что в волатиле было из-за оптимизированных синусов-косинусов... Лучше не вспоминать.
Смысл в том, что эти оптимизированные функции можно юзать не везде, а только в строго отведённых для этого местах. Которых, как это часто бывает, процентов пять от общего числа синусов и косинусов.__________________
Отправлено underworlddemon 10-06-2012 в 18:25:
кстати вопрос от тормоза:
xash на С или на С++ ?
Отправлено XaeroX 10-06-2012 в 18:41:
underworlddemon
На С.
__________________
Отправлено Дядя Миша 10-06-2012 в 18:45:
Цитата:
XaeroX писал:
Оно афишируется в документации)
Гдеб почитать что GL_POINTS конкретно на этой модели мобильного чипа видокарты эмулируется программными средствами? Полагаю с ходу такую информацию найти будет непросто. И уж конечно в инструкции к ноутбуку об этом не будет ни слова.
Цитата:
underworlddemon писал:
xash на С или на С++ ?
Ну, к слову сказать излишнего копирования матриц на чистом Си как раз таки и нету. Поскольку все операции с ними оформлены в виде обычных функций. ЧСХ - ровным счётом ничего не мешает сделать тоже самое на С++. Но так работать не слишком удобно 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-06-2012 в 18:48:
Цитата:
Дядя Миша писал:
Гдеб почитать что GL_POINTS конкретно на этой модели мобильного чипа видокарты эмулируется программными средствами?
Обычно к каждой новой модели видимокарты (вернее, семейства) прилагается Programming & Optimization Guide. Надо на официальном сайте NVIDIA (или AMD) смотреть.__________________
Отправлено underworlddemon 10-06-2012 в 18:51:
Цитата:
Дядя Миша писал:
Ну, к слову сказать излишнего копирования матриц на чистом Си как раз таки и нету.
но думаю про векторизацию и ассемблерные вставки ты не заморачивался
з.ы. тогда я вообще замутить сравнение не смогу...
ибо Eigen (про что подробно читал) для C++
для С++ оно больше надо 
но вопрос как бы сравнить остаётся открытым
Отправлено XaeroX 10-06-2012 в 18:55:
Цитата:
underworlddemon писал:
но думаю про векторизацию и ассемблерные вставки ты не заморачивался
Я заморачивался с векторизацией (SSE) и асм вставками. Надо профилировать каждый кусок, потому что где-то она даёт прирост, а где-то наоборот оказывается медленнее. Общих рецептов нет.__________________
Отправлено underworlddemon 10-06-2012 в 19:00:
именно с векторизацией ? т.е. 4 float за 1 команду высчитывать ?
или просто команда на принудительное использование sse ?
Цитата:
XaeroX писал:
Надо профилировать каждый кусок, потому что где-то она даёт прирост, а где-то наоборот оказывается медленнее. Общих рецептов нет.
ну учитывая, какой разброс дают матбиблиотеки - предположу, что там не 1 подход и сильная зависимость какой подход в данный момент лучше
Отправлено XaeroX 10-06-2012 в 19:08:
Цитата:
underworlddemon писал:
именно с векторизацией ? т.е. 4 float за 1 команду высчитывать ?
Да, именно векторизация, ассемблер.
Пробовал и интринсики, но они гораздо менее эффективны оказываются, т.к. не всегда получается реюзать регистры.
Команда (ты про gcc -msse?) вроде просто включает поддержку интринсиков.__________________
Отправлено underworlddemon 10-06-2012 в 19:19:
Цитата:
underworlddemon писал:
или просто команда на принудительное использование sse ?
Цитата:
XaeroX писал:
Команда (ты про gcc -msse?) вроде просто включает поддержку интринсиков.
точно включает, но вроде ещё и пытается векторизовать (но тут как компилятору покажется правильнее в конкретном случае)
принудительно, да ещё и выровнено - это уже не так просто, чтобы компилятор сам смог
Отправлено XaeroX 10-06-2012 в 19:30:
Цитата:
underworlddemon писал:
принудительно, да ещё и выровнено - это уже не так просто, чтобы компилятор сам смог
Об этом и речь.
Такие вещи, как оптимизация боттлнеков, лучше компилятору не доверять. Это одна из тех немногих вещей в современном программировании, где реально нужен человеческий мозг.__________________
Отправлено underworlddemon 10-06-2012 в 19:36:
Цитата:
XaeroX писал:
Это одна из тех немногих вещей в современном программировании, где реально нужен человеческий мозг.
ну матлибы как раз и позволяют упростить некоторым образом работу ибо берут это на себя и минимизируют ошибки\опечатки (за счёт минимизации кода)
ведь о многих низкоуровневых вещах позаботились на уровне самой библиотеке и думать о них уже не надо (ну только проверить правильность
)
обновляем библиотеку = обновляем оптимизации под железо
т.е. не надо вручную переписывать, достаточно скомпилировать с новым флагом
я не прав ?
Отправлено XaeroX 10-06-2012 в 19:39:
underworlddemon
Авторы библиотек - тоже люди, и они не безгрешны.
А наказывать шеф будет тебя, а не автора библиотеки. Так что выбор твой, конечно. 
__________________
Отправлено Дядя Миша 10-06-2012 в 19:41:
Цитата:
underworlddemon писал:
но думаю про векторизацию и ассемблерные вставки ты не заморачивался
так я же говорю - узкое место, оно не там.
вы все прекрасно знаете, что ксаш бодрее халфы при прочих равных условиях. На самой обычной матлибе. Даже если прикрутить туда супер быструю матлибу, сам ксаш уже быстрее не станет, хоть убейся. Потому что боттлнек в использовании глбегин. А оптимизировать это место я не могу, поскольку начнутся проблемы со всякими хлфхами-параноями, вернее всего. Точнее так: тупая замена глбегин на арреи вполне возможна, но прироста от такого подхода не будет. Там придется капитально перепахать рендерер. Ну и как следствие - похерить всю совместимость. Поэтому я подобные фокусы практикую исключительно в ксаш-модах, благо архитектура движка позволяет.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-06-2012 в 19:51:
Цитата:
Дядя Миша писал:
поскольку начнутся проблемы со всякими хлфхами-параноями, вернее всего
Ну разве что ты будешь перестраивать буферы каждый кадр - тогда проблем не будет. Но это может оказаться даже медленнее глбегина.__________________
Отправлено underworlddemon 10-06-2012 в 19:56:
кстати... мастера... вы программы для тестов от производителей железа используете ?
например Intel GPA ?
http://software.intel.com/ru-ru/blo...2_Intel_GPA.pdf
или аналогичные от АМД или нВидии ?
Отправлено Дядя Миша 10-06-2012 в 19:59:
Цитата:
XaeroX писал:
Но это может оказаться даже медленнее глбегина.
я тут кстати подумал. Теоретически можно отрисовку мира сделать на glDrawElements. Но студиомодельки серавно боттлнеком останутся.Цитата:
underworlddemon писал:
вы программы для тестов от производителей железа используете ?
программы для тестов чего извините? Я движок предпочитаю обкатывать в реальных ситуациях, а не в синтетических тестах.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено underworlddemon 10-06-2012 в 20:01:
Цитата:
Дядя Миша писал:
программы для тестов чего извините? Я движок предпочитаю обкатывать в реальных ситуациях, а не в синтетических тестах.
инструменты для отслеживания узких мест в нагрузке на графику и\или проц
т.е. расширенные мониторинги производительности программ
Отправлено XaeroX 10-06-2012 в 20:13:
Цитата:
underworlddemon писал:
инструменты для отслеживания узких мест в нагрузке на графику и\или проц
т.е. расширенные мониторинги производительности программ
Я использую gDEBugger.__________________
Отправлено Дядя Миша 10-06-2012 в 20:14:
Цитата:
underworlddemon писал:
инструменты для отслеживания узких мест в нагрузке на графику и\или проц
т.е. расширенные мониторинги производительности программ
*чешет репу*
да я и так все узкие места знаю. Мониторинг хорош, когда объем кода настолько велик, что не охватывается одним человеком, и с какого-то момента команда перестаёт понимать, что там собственно вообще происходит.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено underworlddemon 10-06-2012 в 20:20:
переспрошу по другому:
специализированные инструменты для выявление узких мест в программе (начиная от нагрузки на железо до конкретных функций вызывающих узкие места) используете ?
Intel® Graphics Performance Analyzers
http://software.intel.com/ru-ru/blo...2_Intel_GPA.pdf
AMD Graphics Developer Performance Tools
http://developer.amd.com/assets/Zar...e_Tools_web.pdf
NVIDIA PerfKit
http://developer.nvidia.com/nvidia-perfkit
Добавлено 11-06-2012 в 00:20:
уже ответили =)
проверить не хочется ?