Это вот для этой хрени и есть тензорные ядра GPU?
Suslik
> то я это считаю проблемой кода, а не компилятора.
даже если 3 из 4 компилятора генерят нормальный код, и только один не может?
Suslik
Почитай про internal DSL. Когда поверх синтаксиса создаешь выражения. Ты пытаешся совместить стейт машину и высокоуровневые мат выражения. Ессно это возможно до какого то уровня абстракций. Поэтому нужно создать язык для тензор выражений, потом написать сами выражения. Потом дописать миникомпилятор этих выражений.. тут масса вариаций и конечно середину трудно выбрать чтобы не свалиться в область компилятор строения
Как пример - Linq выражения в сишарпе. Когда вызовы select().where() еще не запускают вычисления а только создают выражение результата. Мне кажется в твоем случае чтото такое надо мутить
slepov
ты говоришь о ленивых вычислениях. я уже писал такую либу для матриц: https://gamedev.ru/code/forum/?id=230909
основной идеей моей реализации было полное разделение объектов, хранящих данные матрицы, и проксей, которые определяют операции с этими данными в компайлтайме.
итоговый результат вполне себе даже работает, но каждый раз, когда что-то где-то не компилируется, приходится проскролливать тонны сообщений о компайлтайм-ошибках, которые далеко не слишком информативны.
тензорные вычисления в этом смысле проще, потому что все операции — уже поэлементные, их не надо отложенно разворачивать. но вся хитрость в том, как сделать type safety для индексов.
Какая есть хорошая вводная книга или лекция про тензоры? Можно и на английском.
ardru
вот этого хватит, чтобы начать пользоваться: https://en.wikipedia.org/wiki/Einstein_notation
а пользоваться этим вполне можно, не особо вдаваясь в теоретические подробности и тонкости.
Suslik
> ты говоришь о ленивых вычислениях
свойство ленивости вытекает само собой. Но это больше чем ленивость. Выражение несет инфу предметной области, и это выражение можно упрощать, делать кодогенерацию, причем не в кампайл тайм а в рантайм.
slepov
> свойство ленивости вытекает само собой. Но это больше чем ленивость. Выражение
> несет инфу предметной области, и это выражение можно упрощать, делать
> кодогенерацию, причем не в кампайл тайм а в рантайм.
доо, отослать запрос по вебсокету на сервер, чтобы тот провёл синтаксический анализ выражения, построил для него решающее дерево, оптимизировал, вернул результат. я решаю не абстрактную задачу в вакууме, а с совершенно конкретными требованиями, как то: нулевой оверхед вычислений в рантайме, нулевой расход дополнительной памяти, оптимизируемость стандартными компиляторами, предсказуемость. рантайм-кодогенератор фейлит по всем пунктами.
Suslik
>доо, отослать запрос по вебсокету
отсылай, если есть куда.
> рантайм-кодогенератор фейлит по всем пунктами.
ошибаешсья. И в рантайме есть стадия подготовки ресурсов где можно чтото предсказать и предгенерить. Никто не заставляет полноценные компиляторы писать. Ясен пень что истина где то посередине.
Ты выбрал извращения с шаблонами с++, это метод, да. Но не стоит забывать и о других методах. В .net уже никаво не удивить что SQL генерится на лету на клиенте. Можно и код генерить,
И подобные извращения делают, и делать их хорошо например на Хаскель. Ни шаблоном единым кодогенерация живет.
Suslik
> рантайм-кодогенератор фейлит по всем пунктами.
Ты неправ. Велик шанс, что JIT сгенерирует гораздо более быстрый и производительный код, за счет того, что у него информация о конкретных данных и он может оптимизировать получившийся код динамически.
Suslik
> нулевой оверхед вычислений в рантайме, нулевой расход дополнительной памяти,
> оптимизируемость стандартными компиляторами,
Это не конкретные задачи. Конкретные задачи - это функциональные требования, то что ты сейчас говоришь,это какие-то технические исскуственные ограничения. Что значит нулевой оверхед? По сравнению с чем?
Оптимизируемость туда же. Тебе важна скорость работы или оптимизируемость?
>предсказуемость.
А это похоже на вполне нормальное требование. Хотя неплохо бы его формализовать, что ты под этим понимаешь.
А у меня есть jit-bind, это как обычный bind, но код оптимизируется как если бы рантаймовые параметры были константами.
9К720
> Конкретные задачи - это функциональные требования
ну тогда так: хочу, чтобы этот код приносил мне кучу денег и женщин. лол, как хочу требования, так и ставлю, не надо мне объяснять, что я должен хотеть.
9К720
> Что значит нулевой оверхед? По сравнению с чем?
> Оптимизируемость туда же. Тебе важна скорость работы или оптимизируемость?
если мы обсуждаем шаблономагию про отложенные вычисления с матрицами, то там требовалось, чтобы был нулевой оверхед относительно кода с поэлементным вычислением результирующей матрицы, то есть чтобы был оптимальный паттерн доступа к элементам результирующей матрицы в смысле cache locality. под "оптимизируемостью" тут понимается просто векторизация кода компилятором — ничего умнее этого человечество ещё не придумало. есть совершенно конкретный набор инструкций, который мне требуется получить от моего компилятора, задача стоит в том, чтобы получить этот набор инструкций из легко читаемого кода. каким бы умным ни был JIT компилятор, ничего умнее этого сгенерить просто нельзя.
slepov
> Ты выбрал извращения с шаблонами с++, это метод, да.
если честно, единственный плюс того извращения с шаблонами — это гипотетическая возможность хранения матриц как-то хитрее, чем просто массивом. например, при перемножении больших матриц, их можно хранить блочно. или теоретически можно более эффективно делать операции над большими sparse матрицами. на практике у меня матрицы хранились линейно, поэтому подход из поста 12 генерит идентичный код(результат в явном виде считается поэлементно) и предоставляет гибкость работы с тензорами в общем виде, а не только с матрицами. почему я опять загоняю себя в ситуацию, будто я кому-то что-то пытаюсь продать?
>хранения матриц как-то хитрее, чем просто массивом
Шаблоны тут вообще причем? Ты и на голом Си мог любые структуры писать. Я подозревал что ты шаблоны заюзал чтобы устроить на них вычисления в компайл тайм период, аля Александреску, если ни так - сори, значит я ни в тему.
> почему я опять загоняю себя в ситуацию, будто я кому-то что-то пытаюсь продать?
Форум как бы, никто ничто не должен, все сами.
Тема в архиве.