HLFX.Ru Forum Страницы (3): [1] 2 3 »
Показать все 44 сообщений этой темы на одной странице

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.

__________________

xaerox on Vivino


Отправлено Дядя Миша 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:

Цитата:
Дядя Миша писал:
В третьих, что это за идиотская операция такая - сложение матриц?
Может быть имелась в виду конкатенция?

Стандартная операция покомпонентного сложения матриц.

__________________

xaerox on Vivino


Отправлено Дядя Миша 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.

__________________

xaerox on Vivino


Отправлено 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 очень показательна разница даже среди специализированных библиотек

А где данные для "безо всяких библиотек, сам только что написал на си"?

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 20:00. Страницы (3): [1] 2 3 »
Показать все 44 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024