LINUX.ORG.RU

Метапрограммирование - проблемы и пути их решения.

 , ,


12

6

Пичал я тут на днях токенайзел для C++-кода, но всё это меня добило я решил поделится.

Проблема - мне надо было вычислять сложные значения для таблицы в компилтайме, да можно на сишке сделать через жопу(енумы) и макросы, но мне стало лень. Да можно сгинерить, но мне тоже лень.

Шблонную магию плюсов я не люблю, ибо она ущербна чуть более, чем полностью и тут я вспомнил, что оказывается в плюсах хотели ввести компилтайм функции, аля constexpr и подумалось мне - во, плюсы затащат и как всегда я в очередной раз убедился в ущербности плюсов и так и не понял логики тех, кто это запилил.

Чтобы не быть голословным пишем что-то типа

constexpr uint64_t f(uint64_t a, uint64_t b) {
  return a + b; 
}
Всё ок, но пишем что-то сложнее, аля:

uint64_t m[] = {0, 1, 2, 3, 4};
constexpr uint64_t f(uint64_t a, uint64_t b) {
  return m[a] + m[b]; 
}

Бида( или это моё неосиляторство плюсов?), дак зачем они запилили эту фичу, если она может лишь галимую примитивщину? Шаблоны ещё ущербней. В чем приемущество? Зачем?

А теперь у меня вопрос к вам, уважаемы батьки и отцы - что мне делать? Я хочу запонять массивы написав генератор, причем и в компилтайме тоже. Я хочу юзать libc, я хочу всё, а у меня нет ничего, почему?

Т.е. я не хочу каких-то макропроцессоров и скриптовых языков - я хочу, чтобы, если я написал constexpr - оно должно до последнего пытаться собрать то, что я написал и уже только тогда, когда оно реально это не сможет - отвалиться.

У меня есть 3 пути: терпеть, пилить свой язык и конпелятор самому( что долго и нудно) и ваш совет.

Ответ на: комментарий от superhackkiller1997

Можно даже на сишечке или что там горячо любимо написать генератор, вывести полученные данные в хидер, и будет казаться, что meta.c и runtime.c — одного поля ягоды. И могут даже куски кода шарить из tools.c. Хотя мета отработает только при сборке. А соберется тем же самым Makefile'ом. Полный гомоморфизм или как его там.

anonymous
()

ТС, ты из разряда людей, получающих оргазм, наполняя массивы в compile time, да? Нахрен это надо тебе?

onanij
()
Ответ на: комментарий от onanij

Для токенайзела для C++-кода же. Тащемта вопрос достаточно ясен и адекватен, неопнятно чего ты об него так заводишься.

anonymous
()
Ответ на: комментарий от onanij

Я уже с месяц не логинился, и если хочешь какой-то преждевременный вывод сделать из этого, лучше не надо.

anonymous
()
Ответ на: комментарий от superhackkiller1997

Ну какбэ ты видел как написан гцц? Я изобью себе всё лицо фейспалами, пока досканально разберусь как он работает

Тогда читай clang, он прост и понятен

annulen ★★★★★
()
Ответ на: комментарий от superhackkiller1997

ты выдал портянку на 100строк для того, что в рантайме делается 3-мя

А ты чего ожидал? Любой С++-код, делающий что-то нетривиальное в компайл-тайм длиннее и сложнее для понимая, чем то же самое в рантайме.

annulen ★★★★★
()
Ответ на: комментарий от anonymous

Для токенайзела для C++-кода же

Ну-ну. Допустим. Also, cpp проблемы

onanij
()
Ответ на: комментарий от onanij

Допустить, что говорящая макака, которой ты являешься, понимает, о чём рассуждает, было бы безосновательно.

Мои тапки смеются, слив на дно.

Считать всё во время цомпеляния без веских оснований на то - это удел говна вроде тебя

А ну да, надо не считать - ок, я тебя послушаю.

Я возьму или язык с динамической типизацией, или с нормальным встроеным параметрическим полиморфизмом. Смотря, что надо.

И получишь 20% перфоманса Си, а хотя тчо тебе знать о перфомансе - я это понял с первых твоих строк.

Не знаю. Наверное, ты говнокодер. А чем тебя не устроит результат gcc?

Ты мне так и не ответил, почему код, который сгинерирует гцц будет медленней моего? Да, для тебя это сложно, но подумай и пойми почему любая универсальность противоречит перфомансу.

Даю тебе подсказку: Гцц гинерит код, аля type * p; ++(*p);

superhackkiller1997
() автор топика
Ответ на: комментарий от superhackkiller1997

Ах да, ещё одна проблема - твоя вялая расстановка скобок даёт портянке 30% её длинны - исправь это и напиши по человечески.

В голове у тебя проблема, если к стилю цепляешься.

Pavval ★★★★★
()
Ответ на: комментарий от superhackkiller1997

И получишь 20% перфоманса Си

Перфо́рманс[1] (англ. performance — исполнение, представление, выступление) — форма современного искусства, в
 которой произведение составляют действия художника или группы в определённом месте и в определённое время. К 
перформансу можно отнести любую ситуацию, включающую четыре базовых элемента: время, место, тело художника и отношение 
художника и зрителя. В этом заключается отличие перформанса от таких форм изобразительного искусства, как картина или 
скульптура, где произведение определяется выставленным объектом.

О_О... Вы таки профессиональный клоун? О чем вообще этот поток сознания?

AIv ★★★★★
()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от superhackkiller1997

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

Пока что я представляю, что Вы не умеете приводить хороших примров. Потому что как только на Ваш пример Вам приводят вменяемое решение, Вы тут же вижжите что совсем не то имели ввиду.

Я хочу ascii_to_type, где тип - это тип символа, допустим в контексте того же С++. Удиви.

ПолиморфизЪм? Ах да, жжется же компайл тайм... ТОгда поднимате структура данных с диска, если кодогенерация сторонними средствами противоречит религии.

Ага, очень, прям смеюсь от натуги.

Не надо так тужится, а то от натуги Ваши глазки вытекут на клаву и нам станет скушно.

А ну да, это те люди, которые пишут реактивный по меркам пхп код?

Не, это те люди которые пишут реактивные по меркам фортрана и асма числодробилки.

AIv ★★★★★
()
Ответ на: комментарий от tailgunner

Да я отдыхаю душой после написания 13 страничного эссе с формулами и графиками на тему «почему мозговыносящий алгоритм заказчика не будет работать и какая мозгодробильная модификация необходима чтобы он таки заработал». Никогда еще человечество не видело такого обилия многомерных интерполяций в одном отдельно взятом куске кода;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Пока что я представляю, что Вы не умеете приводить хороших примров. Потому что как только на Ваш пример Вам приводят вменяемое решение, Вы тут же вижжите что совсем не то имели ввиду.

Ну где твой решение?

ПолиморфизЪм? Ах да, жжется же компайл тайм... ТОгда поднимате структура данных с диска, если кодогенерация сторонними средствами противоречит религии.

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

Не, это те люди которые пишут реактивные по меркам фортрана и асма числодробилки.

В этом и проблема, твой числодробилка может быть и рективна по сравнению с такой какулей, как фортран, а про асм я просто не буду даже начинать, ибо это просто деление на 0.

А вот во всём том, что за пределами числодробилки твои рассуждения заходят не дальше стлмесива, если ты плюсовик или какой-то там питонятинки.

superhackkiller1997
() автор топика
Ответ на: комментарий от AIv

Вот, вот. Уровень реализации в ваших краях на дне, а что-то ты говоришь про «быстроту» лишь в сравнении с другими какахами, что примечательно.

Ну иди пиши, я верю в твой скилл рисования граффиков.

superhackkiller1997
() автор топика
Ответ на: комментарий от onanij

Чего пруф, ну давай, реализуй мне инкримент для 1к елементов( и для 1 и для 8-мибайтных).

Я напишу на сишке. даже просто на сишке, без всяких хитростей и сравним, а потом с хитростями запилим.

superhackkiller1997
() автор топика
Ответ на: комментарий от onanij

Твой уровень понимания темы просто поражает моё воображение, зачем ты лезишь? Чтобы спровоцировать меня?

superhackkiller1997
() автор топика
Ответ на: комментарий от superhackkiller1997

Я тебе открою страшную тайну, но из всех 100500 ЯП, которые я знаю

Пичал я тут на днях токенайзел

я решил поделится.

поделится

убедился в ущербности плюсов

Ты и в русском-то парсер погнул не сильно напрягаясь. Чего ты на днях делал? «Пичал» или «токенайзел»? Морфологически это... сюрприз-сюрприз! глаголы. Твоя реальность формируется твоим языком :) «Я тебе открою страшную тайну...» (с) Ущербность русского -> ущербность плюсов. Ну ты понел, да?

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Ну это клава проблемы - я давно не писал ничего.

Любимая отговорка тех, кто сам не осилил пунктуацию, а зато осилил спеллчекер, который мне надо бы поставить, но не особо меня это спасёт.

А ущербность моей моторики - это проблема того, что я мало печал в последнее время, сменил клаву и т.п. У меня тысячи недожимов с моей скоростью пичтанья я этого не замечаю, но как это соотносится с плюсами - расскажи. Плюс я когда читаю я не замечаю ошибок, описок и т.п. Даже если там 2-3буквы вместо 10 - я это прочитаю и мне пофиг - это второй мой фейл, но это тоже с плюсами не кореллирует.

Я могу излогать свои мысли - этого достаточно, а темболее я знаю понимание конпелятора - мне не нужно делать свою речь доступной 90%, которые вообще не понимают о чем речь, 5% тралей и т.п.

Твоя дедукция провалилась на ровном месте и не правильна по определению.

superhackkiller1997
() автор топика
Ответ на: комментарий от superhackkiller1997

Некоторые еще думают, что они как-то вот так отродясь думают быстрее других - оттого у них руки за мыслью не поспевают... То буквы перемешиваются, то шнурки развязываются... то в комнате не прибрано... то фатальные недостатки в плюсах - аж надо руками чего-то переписать. Твои мысли твои скакуны (пони на аватарке, разумеется, анрилейтед, хотя фрейдизм из песни не выкинешь) :)

«Я могу излогать свои мысли» - их любимая отмазка :) Важно не то, что ты можешь (могут все), а как ты это делаешь.

я знаю понимание конпелятора

«Кто на ком стоял, простите?» (с)

Ясное мышление и ясная речь, говорят, как-то связаны. А твои посты напоминают копипасту про «питузи @ зелибобы» - потому про «5% тралей» это ты в точку. Провалилась не моя дедукция - а твоя проективная рефлексия по поводу моей дедукции, по определению, которого ты не давал :) Пеши исчо, подписался на тред, ушел за попкорном :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Пеши исчо, подписался на тред, ушел за попкорном :)

Этот ТС - _такой_ дикий генератор лулзов, что я уже закупил три пака попкорна, колбаски да майонезика. Ржем всеми девятью офисами.

bk_ ★★
()
Ответ на: комментарий от superhackkiller1997

Ну где твой решение?

Насчет «степеней двойки» я уже привел.

Сторонние средства ущербны просто своим видом, начиная от синтаксиса заканчивая просто татальнейшей бесполезностью.

Тут парсер у меня окончательно сломался. О чем рыдания? Что С++ плох? Так возьмите другой инструмент, нет ничего универсально хорошего и плюсы тут не исключение. Но тут рыдания, что другие инструменты еще хуже? Е-мае, так бросайте это дело и идите уже картошку окучивать!

Вы забавное такое существо. Насчет быстроты числодробилок - есть понятие теоретической производительности, число тактов на шаг на ячейку, которое получается из анализа численной схемы и конкретного проца. Быстрее считать в принципе невозможно, ни на каком ЯП. Дальше, все сравнения ведутся не какими то «какахами» (что за копрфильские склонности у месье?) а с этой самой теоретической производительностью. Так что насчет числодробилок я б на Вашем месте молчал, Вы тут не просто клоуном а полностью упоротым школьником себя выставляете.

Насчет остального я не понял нихрена, ни про «стлмесиво» ни про инкременты. Хотите получить ответ - нормально формулируйте вопрос.

AIv ★★★★★
()
Ответ на: комментарий от slackwarrior

Ясное мышление и ясная речь, говорят, как-то связаны.

А еще хорошее образование подразумевает умение связно излагать свои мысли.;-)

По этому показателю ТС явно не закончил даже средней школы...

AIv ★★★★★
()
Ответ на: комментарий от AIv

Насчет «степеней двойки» я уже привел.

Решение реального примера из треда.

Тут парсер у меня окончательно сломался. О чем рыдания? Что С++ плох? Так возьмите другой инструмент, нет ничего универсально хорошего и плюсы тут не исключение. Но тут рыдания, что другие инструменты еще хуже? Е-мае, так бросайте это дело и идите уже картошку окучивать!

Какие инструменты, что ты несёшь. Твой дитские росказни о инструментах смешны и жалки. Ты тред ничитал и даже не пытался его понять.

Вы забавное такое существо. Насчет быстроты числодробилок - есть понятие теоретической производительности, число тактов на шаг на ячейку, которое получается из анализа численной схемы и конкретного проца. Быстрее считать в принципе невозможно, ни на каком ЯП. Дальше, все сравнения ведутся не какими то «какахами» (что за копрфильские склонности у месье?) а с этой самой теоретической производительностью. Так что насчет числодробилок я б на Вашем месте молчал, Вы тут не просто клоуном а полностью упоротым школьником себя выставляете.

Так, ну давай я ужажу тебе на тотальнейшей фейл в твоих рассуждениях: ты реализуешь на чём-то софтварно свою числодробилку быстрее, чем на асм? При этом это всё считаешься по сравнению с теор. максимум - ты не находишь сдесь деления на ноль?

Такого не может быть нуникак, кроме случая когда твой асм реализация какаха, но ты говоришь, что она не какаха, да как ещё может быть? Отрой мне сикрет.

Так что насчет числодробилок я б на Вашем месте молчал, Вы тут не просто клоуном а полностью упоротым школьником себя выставляете.

Ах ну да.

Насчет остального я не понял нихрена, ни про «стлмесиво» ни про инкременты. Хотите получить ответ - нормально формулируйте вопрос.

Ты сказал, что мой метод решения задачи плох. Компилтайм фуфло и полиморфизм труЪ. Твой метод - это парсер уровня шланга, а раз это для тебя правильный метод, то для тебя «месение стл"а», либо какая-нибудь питонятинка приемлема, что говорит о твоей узкой специализации и полным нулём в чем-то за ней.

superhackkiller1997
() автор топика
Ответ на: комментарий от superhackkiller1997

Решение реального примера из треда.

Вы для начала сформулируйте реальный пример связным русским языком, до сих пор этого в треде не было. Слабо?

Такого не может быть нуникак, кроме случая когда твой асм реализация какаха, но ты говоришь, что она не какаха, да как ещё может быть? Отрой мне сикрет.

Очередной слив защитан. Открываю «сикрет» - основные тормоза у большинства числодробилок (и не только числодробилок) в доступе к памяти. Типовая эффективность (по сравнению с теор.производительностью) проценты. Десятки процентов это очень хорошо. 50% можно рассматривать как мировой рекорд, особенно для задач не влезающих в память. И достигается это не асмом (нынешний гцц как правило оптимизирует код не хуже человека), а правильными алгоритмами (специфическим порядком обхода и хранения данных), причем эти алгоритмы на асме хрен реализуешь, даже на смеси плюсов и питона это пишется очень нетривиально (и внезапно там используется «метапрограммирование» и шаблоны).

Ты сказал, что мой метод решения задачи плох. Компилтайм фуфло и полиморфизм труЪ. Твой метод - это парсер уровня шланга, а раз это для тебя правильный метод, то для тебя «месение стл"а», либо какая-нибудь питонятинка приемлема, что говорит о твоей узкой специализации и полным нулём в чем-то за ней.

Такая мощная индукция + специфический стиль общения наводит меня на мысли о серьезной патологии в Вашей высшей нервной деятельности... но возможно виной Ваши 16ть лет?

AIv ★★★★★
()
Ответ на: комментарий от slackwarrior

Чего ты на днях делал? «Пичал» или «токенайзел»?

«Гинерацию» же. Подозреваю, это что-то из области гинекологии.

tailgunner ★★★★★
()

Бида( или это моё неосиляторство плюсов?), дак зачем они запилили эту фичу, если она может лишь галимую примитивщину? Шаблоны ещё ущербней. В чем приемущество? Зачем?

Выкинь плюсы фтопку. B языке D это всё есть.

anonymous
()
Ответ на: комментарий от AIv
Использование constexpr порождает очень жёсткие ограничения на действия функции:

   1. такая функция не может быть типа void;
   2. тело функции должно быть вида return выражение;
   3. выражение должно также быть константой, а также может вызывать только те функции, что также обозначены ключевым словом constexpr, или просто использовать обычные константы;
   4. функция, обозначенная constexpr, не может вызываться до того момента, пока она не определена в текущей единице компиляции.

жалкая подделка CTFE, функций времени компиляции

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

вот тут immutable означает, что хотим посчитать constexpr во время компиляции.

immutable rmatrix = gen_rotationmatrices!double();

anonymous
()

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

затем, что считается вся эта лабуда во время компиляции, а в сгенерированном коде остаётся просто посчитанная константа.

например, ту же таблицу с синусами, косинусами и матрицами поворота.

обычно нужно либо запилить программу, которая в рантайме сумеет сгенерировать исходник другой программы (первая программа — метапрограмма для второй, не важно на каком языке она написана). например, тупо написать на M4 с функциями + шаблон.

либо написать метапрограмму на метаязыке, который поймёт, что выражение в шаблоне вычисляется в константы, а само выражение будет написано на метаязыке (шаблоны в С++ и в D, CTFE функции в D, макросы в лиспах).

тут дело в том, что метаязык — может быть корявый в том смысле, что не все возможности среды времени выполнения доступны. лучше всего с этим в лиспах, в С++ довольно хреново, в D где-то между (CTFE это уже шаг впирёд, только пока ещё не все функции доступны).

то есть, тут метаязык и язык становятся интегрированны. в C++/D только тем способом, что задан в языке, в лиспах — произвольным (макросы позволяют задавать произвольную семантику вычислений).

anonymous
()
Ответ на: комментарий от AIv

есть 3 компилятора основных и ещё парочка игрушечных, типа D на D.

основной компилятор : dmd Волтера Брайта. Второй: gdc на базе gcc, третий ldc на базе llvm.

у первого приоритет — более быстрая скорость работы, чем оптимизации. отсюда старый тулчейн вроде линкера OPTLINK из Digital Mars C++ под виндой, у которого есть свои легаси проблемы. под линуксом всё собирается gcc, используется ld/gold из binutils, проблем нет.

этот компилятор — официальный референс, но возможно оптимизации не самые лучшие.

в ldc довольно неплохие оптимизации, в gdc на сегодняшний момент, похоже — самые лучшие.

то есть, оптимизации все те же cамые, что и в gcc.

плюс, отличия D от С/С++ — возможно, это позволит лучше оптимизировать в D.

в конкретном случае всё надо мерять. в dmd есть встроенный профилировщик (dmd -profile), в gdc можно его или gprof. лучше сменить алгоритм, чем бороться с неудобными моментами.

вроде сборки мусора. она отключаема, но рантайм пока слишком завязан на сборщик мусора: использование некоторых фич языка автоматически подразумевает поддержку их в GC. энтузиасты пилят альтернативный сборщик или альтернативные рантаймы (вроде Delphi-подобного TComponent), в которых мусор не возникает, потому что эти фичи языка не используются, а реализованы альтернативным способом, не задействуя GC.

anonymous
()
Ответ на: комментарий от AIv

Открываю «сикрет» - основные тормоза у большинства числодробилок (и не только числодробилок) в доступе к памяти.

ну да, cache-friendly алгоритмы, функциональные структуры данных, в которых не возникает многопоточных проблем, всякие хитрости для хранения разреженных массивов, например.

тут в стд. рантайме phobos в D пока есть проблемы в хеш-таблицах, как впрочем, и в лиспах. решается заменой хеш-таблиц своей более правильной реализацией.

будет ли это проблемой в каждом конкретном случае — надо мерять профилятором.

anonymous
()
Ответ на: комментарий от anonymous

то есть, оптимизации все те же cамые, что и в gcc.

Забавно... мне давно его тут советуют (не Вы ли?;-)). Надо будет найти время и посмотреть.

Сейчас в пользу цпп появился очень сильный аргумент - CUDA.

ну да, cache-friendly алгоритмы

Да, в данном случае алгоритмы учитывающие особенности графа зависимостей численной схемы.

функциональные структуры данных, в которых не возникает многопоточных проблем, всякие хитрости для хранения разреженных массивов

Для числодробилок скорее организация данных в многомерных массивах на основе Z-кривой (фрактал Лебега что ли), аналог d-деревьев с фикс длиной ветви - это кардинально повышает локальность данных при доступе к ближ. соседям. Задаются такие шутки на основе рекурсивных шаблонов, т.е. размер массива фиксируется во время компиляции, но зато все смещения компилятор уже знает.

AIv ★★★★★
()
Ответ на: комментарий от superhackkiller1997

Поэтому авось есть какой-то язык, о котором никто не знает.

есть, есть такой язык. Это D.

или D2 — новый официальный D, или форк старого заброшенного D1 под названием Amber (его может быть достаточно, хотя отличий маловато для форка).

anonymous
()
Ответ на: комментарий от AIv

Задаются такие шутки на основе рекурсивных шаблонов, т.е. размер массива фиксируется во время компиляции, но зато все смещения компилятор уже знает.

любопытно

anonymous
()
Ответ на: комментарий от AIv

Вы для начала сформулируйте реальный пример связным русским языком, до сих пор этого в треде не было. Слабо?

Яж писал - запили мне на шаблонах табличку, ascii_to_type( хотябы только для идентификаторов), где допустим, если символ есть 'a'-'z', 'A'-'Z', _ или цифирки0-9, то он мне даёт 1, а если не они, то ноль. Как-то так.

Очередной слив защитан. Открываю «сикрет» - основные тормоза у большинства числодробилок (и не только числодробилок) в доступе к памяти. Типовая эффективность (по сравнению с теор.производительностью) проценты. Десятки процентов это очень хорошо. 50% можно рассматривать как мировой рекорд, особенно для задач не влезающих в память. И достигается это не асмом (нынешний гцц как правило оптимизирует код не хуже человека), а правильными алгоритмами (специфическим порядком обхода и хранения данных), причем эти алгоритмы на асме хрен реализуешь, даже на смеси плюсов и питона это пишется очень нетривиально (и внезапно там используется «метапрограммирование» и шаблоны).

Т.е. ты мне объясняешь, что быстре асм"а только потом, что ут ебя не получилось на нём запилить - ок, аргумент. ГГЦ оптимизирует в мечтах твоих, а вреальной жизни ты должен минимум помогать ему, а как максимум перепиливать всё сам.

Ну давай мне простенькую задачку, чтобы я не долго вкуривал тему и запилим 2реализации - сравним. Т.е. не абстрактную муру на 20страниц, как вы любите, а конерктно что есть, какие данные и как их надо обработать. Я верю, что ты придумаешь.

superhackkiller1997
() автор топика

Очередной неосилятор С++? Чем тебя не устраивает решение с constexpr, предложенное в треде?

anonymous
()
Ответ на: комментарий от superhackkiller1997

Яж писал - запили мне на шаблонах табличку, ascii_to_type( хотябы только для идентификаторов), где допустим, если символ есть 'a'-'z', 'A'-'Z', _ или цифирки0-9, то он мне даёт 1, а если не они, то ноль. Как-то так.

В компайлтайм? НАХРЕНА??? Там что, такие объемы данных, что именно в компайлетайме это надо делать О_О? Я лично эту муру вообще в питоне всегда делаю, он для работы со строками куда удобней плюсов.

Т.е. ты мне объясняешь, что быстре асм"а только потом, что ут ебя не получилось на нём запилить

Поправочка - НИ У КОГО НЕ ПОЛУЧИЛОСЬ.

Ну давай мне простенькую задачку, чтобы я не долго вкуривал тему и запилим 2реализации - сравним.

Вот тута www.linux.org.ru/wiki/en/User:AIv/LRnLA - выбирайте любую. Самое простое - Максвелл, в вакуме, методом FDTD. Область 1024x1024x1024 ячейки.

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

AIv ★★★★★
()
Ответ на: комментарий от AIv

В компайлтайм? НАХРЕНА??? Там что, такие объемы данных, что именно в компайлетайме это надо делать О_О? Я лично эту муру вообще в питоне всегда делаю, он для работы со строками куда удобней плюсов.

В это твоя проблема - с твоим подходом ты наткнёшься на тот же фейл, что шланг.

Поправочка - НИ У КОГО НЕ ПОЛУЧИЛОСЬ.

А никто и не пытался. Много ли ты видел бесполезных, околонаучных числодробилок написанных не как какаха? Я нет.

Вот тута www.linux.org.ru/wiki/en/User:AIv/LRnLA - выбирайте любую. Самое простое - Максвелл, в вакуме, методом FDTD. Область 1024x1024x1024 ячейки.

Яж тебе написал - мне не интересна твоя абстрактная мура. Мне нужно конкретная задача, а как уж её запилить я выбиру сам, а на твои бесполезные описания недоалгоритмов я клал.

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

Нет, почти никто не занимается этим, никто не занимается реализациями. 99% карпят над абстракной мурой, аля мы даже не особо знаем как работает наш процессор, мы не осилили ЯП на среднем уровне, мы не осилили ОС, мы полные нули в программировании вообще, но зато мы спецы в алгоритмах. В этом ваш фейл.

Все ваши основы перфоманса - это архитектура х86 для чайников, если вы работаете с х86, что это вам даёт - я не знаю.

Давай я тебе кое что расскажу, ты никак теоретический предел производительност памяти подсчитать не можешь, а пдфник на твой странички вызвал у меня приступ смеха. Как ты можешь без полноценного анализа конвейера писать свои писульки(либо ссылаться на них), если в твоих( если ты сослался на чьё-либо - значит твоё мнение об этом сопоставимо) расчётах по определнию погрешность ДО 4 РАЗ, если не больше. Но нет же, он бох считаводства.

Он пишет про какие-то идеальные случаи, иделаьный случай это что? Прям детё с О-натацией головного мозга. В зависимости от того как ты считаешь у тебя разброс даже идеального случая 10раз, в чем смысл? Что ты подразумеваешь под «загрузить данные»? Куда тебе их надо загрузить, что это вообще?

Меня всегда удивляли эти глупые расчёты чего-то, не учитывая вообще ничего. х86 - это творение в пользу неосиляторства - оно не предсказуемо настолько, что проще запилить 10разных реализаций, чем подсчитать, но кого из вас это волнует?

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

Моё же подход иной. Тут дело не в качестве кода( и да, на асм ничего нет, ибо 95% из вас его не осилили, как и плюсы на уровне чуть ниже, чем стл). Как вы пилите свои кастыли? Вы пытаетесь запилить реализацию абстракщины, а потом те места, которые не ложатся идеально на архитектуру перепилить так, чтобы они тормазили минимально.

Мой же подход нивилирует моменты, которые тормазят просто в 0, ибо любой алгоритм, кпд которого минимально просто не появится в моей голове, ибо моё мышление ограничено тем, что я имею.

superhackkiller1997
() автор топика
Ответ на: комментарий от AIv

Ах да.

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

Ах да, выбирай что-то с минимальной теоретической базой и доступной хоть какой-то реализацией с реальными примерами. Т.е. что вы считаете и как, аля «Вот мы загоняем эту байду - эта байда нам что-то считает, а вот это у нас должно получится на выходе».

Я буду тебя ждать.

superhackkiller1997
() автор топика
Ответ на: комментарий от superhackkiller1997

В это твоя проблема - с твоим подходом ты наткнёшься на тот же фейл, что шланг.

Ну нате

#define ascii_to_type(c) (('a'<=c&&c<='z')||('A'<=c&&c<='Z')||('0'<=c&&c<='9')||c=='_')

Насчет всего остального долго ржал.

Как вы пилите свои кастыли? Вы пытаетесь запилить реализацию абстракщины, а потом те места, которые не ложатся идеально на архитектуру перепилить так, чтобы они тормазили минимально.

Вы ничего не поняли, из того что написано по той ссылке. Вообще.

Оптимизация алгоритма (в т.ч. с учетом особенностей работы ЦПУ) дает прирост куда больший (порядки), чем оптимизация реализации алгоритма. Всегда. БПФ порвет обычный Фурье. Поиск делением пополам на питоне порвет в клочья поиск перебором на асме, какой бы мегагуру его не писал.

И как бы хорошо Вы асм не знали (а я его вообще не знаю), Вы нихрена разумного не сможете сделать не зная предметной области. Причем нигде. А предметной области Вы не знаете, иначе не писали бы такой чуши, Вы похоже вообще числодробилок не видели...

Мой же подход нивилирует моменты, которые тормазят просто в 0, ибо любой алгоритм, кпд которого минимально просто не появится в моей голове, ибо моё мышление ограничено тем, что я имею.

Это в квотезы! Однозначно, я аж прослезился.

Вот Вам сходу две задачки.

1) Надо решить интегральное уравнение вида

m = \frac{\int\limits_0^\pi cos\theta f(\theta) \sin theta d\theta}{\int\limits_0^\pi f(\theta) \sin theta d\theta}, f(theta) = exp(m cos(theta)/T).

Вам понятна TeX-овская нотация? Если нет, я выложу pdf. T некоторая константа, 0<T<=4. Надо в итоге найти зависимость m(T). Сетку по theta для интегрирования можете выбирать любой (ну скажем с шагом в 0.01 градус). Решается методом последовательных приближений, начальное приближение m=1, дальше подставляете его в правую часть, и результат является значением m на следующей итерации. Надо построить в итоге зависимость m(T), T=0.1... 4 с шагом 0.1. Для каждого значения T уравнение решается отдельно.

2) Чуть сложнее, двумерное уравнение диффузии, тупая схема Эйлера.

d u(x,y)/d t = d^2 u/d x^2 + d^2 u/d y^2.

Схема такая

\hat u_{i,j} = alpha u_{i,j} + (1-alpha)(u_{i-1,j}+u_{i+1,j}+u_{i,j-1}+u_{i,j+1})/4

\hat u - значения на следующем временном слое, alpha=0.99, начальные условия u=0 везде кроме центра области, в центре u=1. Гран условия - u=0 везде за пределами счетной области.

Мне б конечно хотелось увидеть в Вашем исполнении параллельную версию кода (там бы Ваш слив был особенно заметен), но можем начать с последовательной - там Ваше мегарешение просто не будет отличаться по производительности от 100500 решений написанных косорукими учеными. До тех пор, пока задача влезает в память ес-но...

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.