Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Вход


Опции
К последнему сообщению К первому непрочитанному
Offline уни  
#1 Оставлено : 1 ноября 2010 г. 18:20:53(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Хотел бы я такую фичу. Вообще говоря, как по мне, математическая программа должна перемалывать числа. Объектный подход кушает очень много ресурсов, причём эти ресурсы в главном рассчитаны на универсальный подход к построению описания модели "математическая программа", чем на сами вычисления. Тому доказательство - тормоза в работе математических программ. Если пользователь что-то запрограммировал, то это интерпретируется - по-моему это одна из основных причин, почему инженеру всё-равно нужно изучать ЯВУ, чтобы получить _реальные_ результаты.

Так вот, мне кажется, что можно перевести код программы (функции) прямо в машинные команды. Хочу сам попробовать это сделать на примере функции implicitplot3d(). Если у меня будет доступ к нативной записи функции в виде ОПЗ, то я могу налету сгенерить код для процессора и всунуть её в неуправляемую dll как тело функции.

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

План у меня очень простой:
Шаг 1. Пишу на ассемблере код алгоритма implicitplot3d(), причём, прежде чем работать с функцией нужно будет инициализировать массивы.
Шаг 2. Этот код компилируется в неуправляемую dll. Эта dll будет состоять из нескольких секций. Одна из секций (кода) будет содержать шаблон функции и точку входа для её вызова.
Шаг 3. Пишем плагин для SMath. Этот плагин должен перевести ОПЗ функции в опкод процессора. Вставить этот код в dll в то место, где находится шаблон. Потом инициализировать память для работы с функцией и вызвать функцию через механизм работы с неуправляемым кодом.

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

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

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

П.С. Но это на очень далёкое будущее. Только не думайте, что новые процессоры будут быстрее, памяти больше и тому прочая ерунда. Процы уже быстрее, а памяти не меряно... просто микрософт ищёт всё время чем же это всё занять, чтобы продажи не падали.... спираль однако.
Россия навсегда!
Вячеслав Мезенцев

Wanna join the discussion?! Login to your Форум проекта SMath forum account. Новые регистрации запрещены.

Offline build_your_web  
#2 Оставлено : 2 ноября 2010 г. 15:03:31(UTC)
build_your_web


Статус: Advanced Member

Группы: Developers, Registered
Зарегистрирован: 28.08.2009(UTC)
Сообщений: 127

Сказал(а) «Спасибо»: 19 раз
Поблагодарили: 4 раз в 4 постах
Я с ассемблером не знаком, но откуда-то из глубин памяти вспоминаю, что код для разных платформ будет разный.
Т.о. потеряется кросс-платформенность как внутри ОС (х86, х64), так и между разными ОС.
Offline уни  
#3 Оставлено : 2 ноября 2010 г. 15:50:10(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Да, это так. Но зачем она вам нужна? Чтобы поддерживать точконетовский интерфейс? Это для математической программы важно?
Реальные вычислительные возможности сокрыты именно в конкретном "камне". Если Ваша задача посчитать что-то быстрее, то интерпретатор тут не помощник. Я вообще рассматриваю математический пакет как удобный инструментарий для составления программы для процессора, т.е. иерархически более высокий уровень, чем ЯВУ именно для работы с математическими объектами.

Можно представить результат работы такого пакета как, допустим, "неуправляемую" библиотеку в терминах .Net, которая имеем определённый стандартизированный интерфейс для доступа к алгоритму внутри. Сама же математическая программа - это компилятор с удобной средой разработки. Вот ЭТО уже что-то. Ведь обратите внимание, кто занимался программированием, SMath имеет типичный интерфейс IDE (среды разработки), компоненты бросаются на рабочий документ - текст математической программы, а выполняет все вычисления только процессор. С точки зрения кода вообще должно быть всё просто, т.к. это будет вещь в себе. Нет никаких событий системы, в случае полностью автоматического кода - не нужен никакой интерфейс в виде окна... чисто вычисления.

Потому я говорю, что вполне реально компилировать код прямо в опкод процессора. Не обязательно всего листа. Можно отладить какую-нить функцию или семейство функций и скомпилировать из них библиотеку с доступным интерфейсом для ЯВУ или каких других средств, где эти "кирпичики" могут использоваться для сооружения большой системы. По моему мнению, сейчас делается двойная работа при использовании мат. пакета: сначала моделируется система, а потом пишется быстродействующий код для среды выполнения. Думается мне, что можно это объединить.

Да, это будет зависеть от аппаратной платформы, но а как иначе то? Алгоритмы реально исполняются в конкретном девайсе, а не в .Net'овском окружении. Здорово было бы накидать код при помощи формул в SMath и компильнуть его для работы в контроллере. Вот эта затея достойная.

Даже не так. Компилировать функции в исходные тексты для разных моделей процессоров.

Отредактировано пользователем 2 ноября 2010 г. 15:52:38(UTC)  | Причина: Не указана

Россия навсегда!
Вячеслав Мезенцев
Offline mikka  
#4 Оставлено : 2 ноября 2010 г. 16:08:16(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
.NET и так компилит код в аппаратно зависимый, просто делает это по необходимости...
Я уверен, что на асме в ручную вы не сможете сделать код быстре... да и незачем это, тот же СИ или Паскаль, отлично компилится в машинный код, и накладных расходов там почти нет. Да и компилятор тогоже паскаля весит совсем не много, с необходимыми библиотеками для винды около 5 мегов...
По поводу скорости работы программы, все дело в ее архитектуре. При правильном подходе можно добиться довольно приемлемого быстродействия.
Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline уни  
#5 Оставлено : 2 ноября 2010 г. 17:00:32(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Цитата:
По поводу скорости работы программы, все дело в ее архитектуре. При правильном подходе можно добиться довольно приемлемого быстродействия.
Это неправда.
Маткад перешёл на .Net полностью и все отметили - тормозов больше и больше ничего.
Цитата:
.NET и так компилит код в аппаратно зависимый, просто делает это по необходимости...

Это где это вы такого начитались? .Net использует стандартизированный посредник - IL - промежуточный ассемблер. Он никогда не будет работать быстрее, чем его аппаратный аналог, т.к. выполняется на виртуальной машине. В любой технической идее (запомните это на всю жизнь, так учат в технических вузах) всегда есть плюсы и минусы. Это закон сохранения такой. Только в рекламе одни плюсы, а в жизни всегда есть минусы. Микрософт подмяла под себя стандарт и навязала его всем, обладая монополией на продажи. Это принцип такой, чтобы всегда иметь прибыль (баснословную) нужно навязывать товар - это спираль Билла Гейтса из его книги "Дорога в будущее".

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

Цитата:
Я уверен, что на асме в ручную вы не сможете сделать код быстре... да и незачем это, тот же СИ или Паскаль, отлично компилится в машинный код, и накладных расходов там почти нет. Да и компилятор тогоже паскаля весит совсем не много, с необходимыми библиотеками для винды около 5 мегов...

Вы меня не поняли. Код на асме я предлагал писать самой программе SMath, т.к. она владеет ОПЗ для записи выражений. Эта запись несложно переводится хоть в код ассемблера, хоть на язык паскаля, хоть на си, но в случае ЯВУ нужен сторонний компилятор. Если же самому переводить код в инструкции процессора, то такого компилятора со стороны не надо.

Случай с Си, Паскалем и прочим уводит в сторону. Среды разрабортки и сами эти языки заточены под любое почти применение. SMath можно посчитать такой же средой и языком для сознание небольших блоков кода, но "заточен" этот инструмент именно может для математических разработок. Ведь написание программы для взятия интеграла может быть не так увлекательно для Си или Паскаль - программера, да и работа с такими математическими библиотеками тоже выглядит неестественно.
Россия навсегда!
Вячеслав Мезенцев
Offline уни  
#6 Оставлено : 2 ноября 2010 г. 17:55:28(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Поясню ещё раз. Текущая версия SMath Studio, на мой взгляд, работает медленнее, чем досовская версия Маткада в своё время. Она имела примерно те же возможности в плане вычислений и построения графиков, что SMath сейчас. Вот и сравнивайте. На современном компе математическая программа проигрывает такой же по функционалу, написанной 15 лет назад. Это факт. Я пользовался в своё время. Нам препод по матанализу показывал эту программку и рекомендовал к изучению (как сейчас помню).

Получается, что мощность компов выросла многократно, а тормоза как были так и остались. И дело как раз в архитектуре, Вы правы, чтобы поддерживать никому не нужные графические рюшечки и вводятся эти новые стандарты. Они запросто сожрут любую мощь любого нового проца, т.к. достичь уровня человеческого восприятия и обработки информации вряд ли в скором будущем удастся. Машину тужатся наделить интеллектом, "завидуя" возможностям мозга за долю секунды обработать огромный видеопоток, я уж не говорю про экспертные системы.

Вывод: если эффективно использовать старые технологии, то можно использовать и старые мощности помноженные на новую элементную базу.

Может быть я слишком упёрся именно в опкод. Да, это требует некоторых специфических знаний. Но для того, чтобы такая математическая программа в реальном режиме работала быстро нужно опускаться на неуправляемый код, т.к. именно он делает возможным такую технологию как .Net.
Россия навсегда!
Вячеслав Мезенцев
Offline mikka  
#7 Оставлено : 2 ноября 2010 г. 20:08:59(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
В нет есть компилятор jit:
http://ru.wikipedia.org/wiki/.NET_Framework
Цитата:

Подобно технологии Java, среда разработки .NET создаёт байт-код, предназначенный для исполнения виртуальной машиной. Входной язык этой машины в .NET называется MSIL (Microsoft Intermediate Language), или CIL (Common Intermediate Language, более поздний вариант), или просто IL. Применение байт-кода позволяет получить кроссплатформенность на уровне скомпилированного проекта (в терминах .NET: сборка), а не только на уровне исходного текста, как, например, в С. Перед запуском сборки в среде исполнения CLR байт-код преобразуется встроенным в среду JIT-компилятором (just in time, компиляция на лету) в машинные коды целевого процессора. Также существует возможность скомпилировать сборку в родной (native) код для выбранной платформы с помощью поставляемой вместе с .NET Framework утилиты NGen.exe.

Следует отметить, что один из первых JIT-компиляторов для Java был также разработан фирмой Microsoft. Современная технология динамической компиляции позволяет достигнуть уровня быстродействия, аналогичного традиционным «статическим» компиляторам (например, C++), и вопрос быстродействия зачастую зависит от качества того или иного компилятора.
Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline build_your_web  
#8 Оставлено : 3 ноября 2010 г. 0:53:58(UTC)
build_your_web


Статус: Advanced Member

Группы: Developers, Registered
Зарегистрирован: 28.08.2009(UTC)
Сообщений: 127

Сказал(а) «Спасибо»: 19 раз
Поблагодарили: 4 раз в 4 постах
Асм безусловно будет работать быстрее .Net. JIT компиляция всё равно происходит и забирает ресурсы, хоть обычно это и оправдано.

Но не вижу причин уходить настолько низкоуровнево.
C++ - это отличная скорость с сформированными стандартами взаимодействия с managed кодом. Код, написанный на C++, определенно получит больше шансов на развитие, чем асм, просто исходя из лучшей читаемости кода.

С другой стороны - плагины открыты.
Каждый может сделать плагин, который посчитает нужным.

И если кто-то сделает unmanaged вычисления - это будет, как минимум, очень полезный опыт.
Насчет "скомпилировать вычисления для контроллера" - идея действительно очень интересная, но явно узкоспециализированная и довольно объемная.

Сейчас хорошо бы довести программу до уровня удобного инструмента для выполнения научных работ.

Отредактировано пользователем 3 ноября 2010 г. 1:01:46(UTC)  | Причина: Не указана

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