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 очень показательна разница даже среди специализированных библиотек
А где данные для "безо всяких библиотек, сам только что написал на си"?__________________