Интересуют перспективы применения Nemerle в такой области как CFD, где численно решаются дифференциальные уравнения в частных производных (ДУЧП). Эта область хороша тем, что все абстракции можно выразить математически. В частности, привлекают макросы, с которыми я пока на Вы,
позволяющие разворачивать матричные операции вида C = A + B без оверхеда в циклы.
Re: Перспективы применения в вычислительной матетике
Здравствуйте, ST1, Вы писали:
ST1>Интересуют перспективы применения Nemerle в такой области как CFD, где численно решаются дифференциальные уравнения в частных производных (ДУЧП). Эта область хороша тем, что все абстракции можно выразить математически. В частности, привлекают макросы, с которыми я пока на Вы, ST1>позволяющие разворачивать матричные операции вида C = A + B без оверхеда в циклы.
Nemerle — язык под .net. А .Net не лучшая платформа для мат.вычислений, так как не оптипизировался под них и имеет ряд рантайм-проверок, которые замедляют вычисления над матрицами, которые часто встречаются в мат.вычислениях.
Однако, ты прав в том смысле, что макросы позволяют генерировать оптимальный код по модели близкой к модели предметной области. Естественно, что нашлись люди которые попытались использовать эту особенность Nemerle. Например, есть такая библиотека NUDA. Вот статься автора о ней: Нетрадиционные языки для нетрадиционных суперкомпьютеров
Здравствуйте, VladD2, Вы писали:
VD>Nemerle — язык под .net. А .Net не лучшая платформа для мат.вычислений, так как не оптипизировался под них и имеет ряд рантайм-проверок, которые замедляют вычисления над матрицами, которые часто встречаются в мат.вычислениях.
VD>Однако, ты прав в том смысле, что макросы позволяют генерировать оптимальный код по модели близкой к модели предметной области. Естественно, что нашлись люди которые попытались использовать эту особенность Nemerle. Например, есть такая библиотека NUDA. Вот статься автора о ней: Нетрадиционные языки для нетрадиционных суперкомпьютеров
VD>Еще есть NemerleCL
Матрицы не совсем удачный пример, меня интересует даже уровень выше.
Скажем сейчас в C++ для решения ДУЧП я использую связку freePOOMA и автоматическое дифференцирование (ADOL-C, CppAD, Sacado). Фактически, я записываю уравнения на уровне невязок с использованием разностных аналогов дифференциальных операторов div/grad относительно объектов авт.дифф-я. freePOOMA, за исключением OpenFOAM, это лучшее из опен-сорс,
но имеет ряд ограничений. Аналог этой либы я и хотел бы попробовать реализовать на Nemerle, а всю производную линейную алгебру перенаправить на C++ библиотеки. Вопрос в том, буду ли макросы Nemerle сопоставимы с шаблонами C++ по скорости если запись вида
div(grad(u))=0
будет разворачиваться в двумерной области в циклы
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
u(i+1,j)-2*u(i,j)+u(i+1,j)+u(i,j+1)-2*u(i,j)+u(i,j+1)=0
Работы Адинца находил. Интересно, пересекается ли он с ребятами из ttglabs
Re[3]: Перспективы применения в вычислительной матетике
Здравствуйте, ST1, Вы писали:
ST1>Аналог этой либы я и хотел бы попробовать реализовать на Nemerle, а всю производную линейную алгебру перенаправить на C++ библиотеки. Вопрос в том, буду ли макросы Nemerle сопоставимы с шаблонами C++ по скорости если запись вида ST1>
ST1>div(grad(u))=0
ST1>
ST1>будет разворачиваться в двумерной области в циклы ST1>
ST1>for (int i = 0; i < N; i++)
ST1>for (int j = 0; j < N; j++)
ST1>u(i+1,j)-2*u(i,j)+u(i+1,j)+u(i,j+1)-2*u(i,j)+u(i,j+1)=0
ST1>
Само переписывание будет работать существнно шустрее нежели на С++, так как код макросов предварительно компилируется в машинный код и выполняется почти так же быстро как рнтайм-код С++ (в отличии от шаблонов С++, которые по сути являются интерпретатором работающим во время компиляции).
А вот вычисления, особенно над массивами и матрицами будут подтормаживать. Но если сами вычисления будут транслироваться в вызовы сишных библиотек, то проблем быть не должно. В таком подходе проблемой может стать только итероп дотнета (вызовы анменеджед-кода в дотнете не бесплатные).
ST1>Работы Адинца находил. Интересно, пересекается ли он с ребятами из ttglabs
Несомненно в чем-то пересекаются, но по ссылке предлагаются услуги по переписыванию код, а не библиотеки позволяющие писать такой код автоматически на базе ДСЛ. Похоже они занимаются закатом солнца вручную.
В прочем, это все не область в которой я серьезно разбираюсь. Пусть, лучше, говорят те кто в ней не одну собаку съел.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Перспективы применения в вычислительной матетике
Здравствуйте, ST1, Вы писали:
ST1>Матрицы не совсем удачный пример, меня интересует даже уровень выше. ST1>Скажем сейчас в C++ для решения ДУЧП я использую связку freePOOMA и автоматическое дифференцирование (ADOL-C, CppAD, Sacado). Фактически, я записываю уравнения на уровне невязок с использованием разностных аналогов дифференциальных операторов div/grad относительно объектов авт.дифф-я. freePOOMA, за исключением OpenFOAM, это лучшее из опен-сорс, ST1>но имеет ряд ограничений. Аналог этой либы я и хотел бы попробовать реализовать на Nemerle
Для начала нужно сперва оформить для себя язык предметной области, а уж потом смотреть какими средствами можно его интегрировать в Nemerle (и нужно ли это вообще).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Перспективы применения в вычислительной матетике
Здравствуйте, ST1, Вы писали:
ST1>Матрицы не совсем удачный пример, меня интересует даже уровень выше. ST1>Скажем сейчас в C++ для решения ДУЧП я использую связку freePOOMA и автоматическое дифференцирование (ADOL-C, CppAD, Sacado). Фактически, я записываю уравнения на уровне невязок с использованием разностных аналогов дифференциальных операторов div/grad относительно объектов авт.дифф-я. freePOOMA, за исключением OpenFOAM, это лучшее из опен-сорс,
А почему для решения этой задачи не взять какой-нибудь математический пакет вроде "Матиматиака" или "Маткад"?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Перспективы применения в вычислительной матетике
Здравствуйте, VladD2, Вы писали:
VD>А почему для решения этой задачи не взять какой-нибудь математический пакет вроде "Матиматиака" или "Маткад"?
потому что шаг вправо шаг влево и немерли будет рвать их по скорости и удобству, правда шаги должны быть совсем не стандартные. Если бы немерли мог транслировать в С, то цены бы ему не было.
Re[4]: Перспективы применения в вычислительной матетике
Здравствуйте, VladD2, Вы писали: VD>А почему для решения этой задачи не взять какой-нибудь математический пакет вроде "Матиматиака" или "Маткад"?
У меня далеко не школьные примеры — решаемые уравнения, расчетные области и разностные схемы не предусмотрены в этих пакетах.
Даже Comsol и матлабовский Femlab не получается использовать, только хардкор. GUI тоже кастомный — на данный момент использую WTL.
Притом что на руках есть работающий код в виде либы C++, использовать его для быстрого прототипирования (например в НИОКР'ах)
новых моделей пока не удается. Кодогенерация на внешних скриптовых языках как-то не шибко лучше. Я конечно попробую через interop вынести всю алгебру, посмотрим что выйдет. Фактически я стремлюсь получить в руки код на Nemerle под специфическую область (в которой уже 7 лет имею наработки) синтаксис matlab'а.
Re: Перспективы применения в вычислительной матетике
Процитирую себя:
"Реализация любой вычислительной модели сводится к решению системы нелинейных дифференциальных уравнений в частных производных сеточным методом и в этом смысле не отличается от многих других задач вычислительной механики сплошных сред. При этом заметим, что подобно тому, как расчетные переменные определены в узлах разностной сетки, любое CFD-приложение условно находится на пересечении линий, представляющих абстракции предметной области. Поэтому, если иметь доступные реализации этих абстракций, мы получаем, с одной стороны, среду, параметры изменения которой можно менять для конкретных приложений, c другой ‒ параметризуем возможные будущие изменения в самом приложении для оптимизации процесса его разработки при одновременной декомпозиции нежелательной «монолитности». Соответствующий подход к современному проектированию на C++ предложен в работе "Коплиен Дж. Мультипарадигменное проектирование для C++".
С другой стороны понятно, что соответствующий DSL, притом на редком языке без достаточной поддержки сторонних библиотек, может занять далеко не пару месяцев. Хотелось бы понять, не утопия ли это.
Re[2]: Перспективы применения в вычислительной матетике
От:
Аноним
Дата:
12.11.12 18:02
Оценка:
Здравствуйте, ST1, Вы писали:
В реальности у немерли просто нет библиотек для интерфейса, нет генерации в С
да, он лучше для написания аналога опенфоама чем с++, но особого смысла в этом нет.
Немерли не готов для применения в указанных областях. С н2 должно быть существенно лучше.
Re[5]: Перспективы применения в вычислительной матетике
Здравствуйте, Аноним, Вы писали:
А>потому что шаг вправо шаг влево и немерли будет рвать их по скорости и удобству, правда шаги должны быть совсем не стандартные.
А что там с шагами?
А> Если бы немерли мог транслировать в С, то цены бы ему не было.
Ну, никто не запрещает сварганить генератор подмножетсва немела в С. В жабаскрипт ведь сделали, а там даже goto нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Перспективы применения в вычислительной матетике
Здравствуйте, Аноним, Вы писали:
А>В реальности у немерли просто нет библиотек для интерфейса,
Что? Матумба, ты что ли?
А>нет генерации в С
До недавнего времени в JavaScript тоже не было...
А>да, он лучше для написания аналога опенфоама чем с++, но особого смысла в этом нет. А>Немерли не готов для применения в указанных областях.
Это чёйто?
А>С н2 должно быть существенно лучше.
Ну, в Н2 много чего упростится. Но пока его нет и еще долгое время не будет (в ближайшие месяц-два можно ожидать только парсер).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.