Войти
ПрограммированиеФорумФизика

Программирование тензорной математики (2 стр)

Страницы: 1 2
#15
7:27, 24 июля 2018

Это вот для этой хрени и есть тензорные ядра GPU?

#16
9:25, 24 июля 2018

Suslik
> то я это считаю проблемой кода, а не компилятора.
даже если 3 из 4 компилятора генерят нормальный код, и только один не может?

#17
23:30, 30 июля 2018

Suslik
Почитай про internal DSL. Когда поверх синтаксиса создаешь выражения. Ты пытаешся совместить стейт машину и высокоуровневые мат выражения. Ессно это возможно до какого то уровня абстракций. Поэтому нужно создать язык для тензор выражений, потом написать сами выражения. Потом дописать миникомпилятор этих выражений.. тут масса вариаций и конечно середину трудно выбрать чтобы не свалиться в область компилятор строения

#18
23:36, 30 июля 2018

Как пример - Linq выражения в сишарпе. Когда вызовы select().where() еще не запускают вычисления а только создают выражение результата. Мне кажется в твоем случае чтото такое надо мутить

#19
5:16, 31 июля 2018

slepov
ты говоришь о ленивых вычислениях. я уже писал такую либу для матриц: https://gamedev.ru/code/forum/?id=230909
основной идеей моей реализации было полное разделение объектов, хранящих данные матрицы, и проксей, которые определяют операции с этими данными в компайлтайме.
итоговый результат вполне себе даже работает, но каждый раз, когда что-то где-то не компилируется, приходится проскролливать тонны сообщений о компайлтайм-ошибках, которые далеко не слишком информативны.

тензорные вычисления в этом смысле проще, потому что все операции — уже поэлементные, их не надо отложенно разворачивать. но вся хитрость в том, как сделать type safety для индексов.

#20
12:02, 31 июля 2018

Какая есть хорошая вводная книга или лекция про тензоры? Можно и на английском.

#21
14:15, 31 июля 2018

ardru
вот этого хватит, чтобы начать пользоваться: https://en.wikipedia.org/wiki/Einstein_notation

а пользоваться этим вполне можно, не особо вдаваясь в теоретические подробности и тонкости.

#22
14:22, 31 июля 2018

Suslik
> ты говоришь о ленивых вычислениях

свойство ленивости вытекает само собой. Но это больше чем ленивость. Выражение несет инфу предметной области, и это выражение можно упрощать, делать кодогенерацию, причем не в кампайл тайм а в рантайм.

#23
14:49, 31 июля 2018

slepov
> свойство ленивости вытекает само собой. Но это больше чем ленивость. Выражение
> несет инфу предметной области, и это выражение можно упрощать, делать
> кодогенерацию, причем не в кампайл тайм а в рантайм.
доо, отослать запрос по вебсокету на сервер, чтобы тот провёл синтаксический анализ выражения, построил для него решающее дерево, оптимизировал, вернул результат. я решаю не абстрактную задачу в вакууме, а с совершенно конкретными требованиями, как то: нулевой оверхед вычислений в рантайме, нулевой расход дополнительной памяти, оптимизируемость стандартными компиляторами, предсказуемость. рантайм-кодогенератор фейлит по всем пунктами.

#24
14:57, 31 июля 2018

Suslik

>доо, отослать запрос по вебсокету

отсылай, если есть куда.

> рантайм-кодогенератор фейлит по всем пунктами.

ошибаешсья. И в рантайме есть стадия подготовки ресурсов где можно чтото предсказать и предгенерить. Никто не заставляет полноценные компиляторы писать. Ясен пень что истина где то посередине.
Ты выбрал извращения с шаблонами с++, это метод, да. Но не стоит забывать и о других методах. В .net уже никаво не удивить что SQL генерится на лету на клиенте. Можно и код генерить,

И подобные извращения делают, и делать их хорошо например на Хаскель. Ни шаблоном единым кодогенерация живет.

#25
15:47, 31 июля 2018

Suslik
> рантайм-кодогенератор фейлит по всем пунктами.
Ты неправ. Велик шанс, что JIT сгенерирует гораздо более быстрый и производительный код, за счет того, что у него информация о конкретных данных и он может оптимизировать получившийся код динамически.

#26
15:57, 31 июля 2018

Suslik
> нулевой оверхед вычислений в рантайме, нулевой расход дополнительной памяти,
> оптимизируемость стандартными компиляторами,
Это не конкретные задачи. Конкретные задачи - это функциональные требования, то что ты сейчас говоришь,это какие-то технические исскуственные ограничения. Что значит нулевой оверхед? По сравнению с чем?
Оптимизируемость туда же. Тебе важна скорость работы или оптимизируемость?

>предсказуемость.
А это похоже на вполне нормальное требование. Хотя неплохо бы его формализовать, что ты под этим понимаешь.

#27
16:53, 31 июля 2018

А у меня есть jit-bind, это как обычный bind, но код оптимизируется как если бы рантаймовые параметры были константами.

#28
18:17, 31 июля 2018

9К720
> Конкретные задачи - это функциональные требования
ну тогда так: хочу, чтобы этот код приносил мне кучу денег и женщин. лол, как хочу требования, так и ставлю, не надо мне объяснять, что я должен хотеть.

9К720
> Что значит нулевой оверхед? По сравнению с чем?
> Оптимизируемость туда же. Тебе важна скорость работы или оптимизируемость?
если мы обсуждаем шаблономагию про отложенные вычисления с матрицами, то там требовалось, чтобы был нулевой оверхед относительно кода с поэлементным вычислением результирующей матрицы, то есть чтобы был оптимальный паттерн доступа к элементам результирующей матрицы в смысле cache locality. под "оптимизируемостью" тут понимается просто векторизация кода компилятором — ничего умнее этого человечество ещё не придумало. есть совершенно конкретный набор инструкций, который мне требуется получить от моего компилятора, задача стоит в том, чтобы получить этот набор инструкций из легко читаемого кода. каким бы умным ни был JIT компилятор, ничего умнее этого сгенерить просто нельзя.

slepov
> Ты выбрал извращения с шаблонами с++, это метод, да.
если честно, единственный плюс того извращения с шаблонами — это гипотетическая возможность хранения матриц как-то хитрее, чем просто массивом. например, при перемножении больших матриц, их можно хранить блочно. или теоретически можно более эффективно делать операции над большими sparse матрицами. на практике у меня матрицы хранились линейно, поэтому подход из поста 12 генерит идентичный код(результат в явном виде считается поэлементно) и предоставляет гибкость работы с тензорами в общем виде, а не только с матрицами. почему я опять загоняю себя в ситуацию, будто я кому-то что-то пытаюсь продать?

#29
19:42, 31 июля 2018

>хранения матриц как-то хитрее, чем просто массивом

Шаблоны тут вообще причем? Ты и на голом Си мог любые структуры писать. Я подозревал что ты шаблоны заюзал чтобы устроить на них вычисления в компайл тайм период, аля Александреску, если ни так - сори, значит я ни в тему.

> почему я опять загоняю себя в ситуацию, будто я кому-то что-то пытаюсь продать?

Форум как бы, никто ничто не должен, все сами.

Страницы: 1 2
ПрограммированиеФорумФизика

Тема в архиве.