Реализация анализатора (парсера) формул времени выполнения |
Здравствуйте, гость ( Вход | Регистрация )
Реализация анализатора (парсера) формул времени выполнения |
AntonTatu |
6.3.2009, 0:07
Сообщение
#21
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
А что по скорости выполнения ? , вот что написано у М.Шлее: рекомендую для начала по пробовать, и если на практике окажется неприемлемое быстродействие, тогда будешь искать другой вариант.ну вобщем попробовал, если использовать QtScript получается оччень медлено, использовал следующий скрипт:
х - это массив значений посчитанный в С++ и переданный скрипту engine.globalObject().setProperty("x", MyArray); в теле функции в скрипте используются различные значения массива x[i][j], я так понимаю что медленно потому что приходится скрипту передавать весь массив целиком (т.е. делать для него копию), а при использовании dll ки весь массив не копируется, а значение передается по ссылке, а может быть можно как то в скрипту указывать ссылку а не делать "копию" всех значений массива ? |
|
|
Гость_BRE_* |
6.3.2009, 7:52
Сообщение
#22
|
Гости |
я так понимаю что медленно потому что приходится скрипту передавать весь массив целиком (т.е. делать для него копию), а при использовании dll ки весь массив не копируется, а значение передается по ссылке, а может быть можно как то в скрипту указывать ссылку а не делать "копию" всех значений массива ? Самое простое сделать класс (еще проще (но не обязательно) если наследоваться от QObject), который будет управлять твоим массивом и обеспечить доступ к объекту этого класса из контекста скрипта.
А дальше из скрипта можно доставать значения используя arr.at( i, j ). |
|
|
BRE |
6.3.2009, 9:29
Сообщение
#23
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Пример:
array2d.h
array2d.cpp
main.cpp
Высокой скорости вычисления от скриптов ожидать не стоит (от нативной она будет сильно отличаться). |
|
|
BRE |
6.3.2009, 10:03
Сообщение
#24
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Пример:
array2d.h
array2d.cpp
main.cpp
Высокой скорости вычисления от скриптов ожидать не стоит (от нативной она будет сильно отличаться). |
|
|
Гость_Гость_AntonTatu_*_* |
6.3.2009, 12:11
Сообщение
#25
|
Гости |
Цитата Высокой скорости вычисления от скриптов ожидать не стоит (от нативной она будет сильно отличаться). спасибо, так то же попробывал..., очень медленно в 1000 раз на глазок если, вобщем вопрос не снят, каким образом можно из проги получать код и компилить его "нативно"....? я уже весь инет перелазил, ну не писать же собственный компилятор.... (для меня это не реально ) |
|
|
BRE |
6.3.2009, 12:26
Сообщение
#26
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
спасибо, так то же попробывал..., очень медленно в 1000 раз на глазок если, вобщем вопрос не снят, каким образом можно из проги получать код и компилить его "нативно"....? я уже весь инет перелазил, ну не писать же собственный компилятор.... (для меня это не реально ) Уточни, из каких операций будет состоять формула (+ - * /)? Или будут еще какие-то функции? Опиши подробней. Ты используешь 2-мерный массив, это не изображение часом, а формула - не фильтр ли? |
|
|
AntonTatu |
6.3.2009, 12:34
Сообщение
#27
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
спасибо, так то же попробывал..., очень медленно в 1000 раз на глазок если, вобщем вопрос не снят, каким образом можно из проги получать код и компилить его "нативно"....? я уже весь инет перелазил, ну не писать же собственный компилятор.... (для меня это не реально ) Уточни, из каких операций будет состоять формула (+ - * /)? Или будут еще какие-то функции? Опиши подробней. Ты используешь 2-мерный массив, это не изображение часом, а формула - не фильтр ли? все намного про ще, генерится специальным образом массив, считается формула такого вида: x[0,j]*x[2,j]*x[5,j]*x[10,j]+x[0,j]*x[3,j]*x[4,j]+N+..... формула считается в цикле, с каждой итерацией формула новая, ее длинна то же может изменится..., переменные в формуле это значения разных ячеек массива, на выходе каждой итерации необходимо получить расчетное значение итой формулы, колличество прогонов (итераций) миллионы.... |
|
|
BRE |
6.3.2009, 12:39
Сообщение
#28
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
все намного про ще, генерится специальным образом массив, считается формула такого вида: x[0,j]*x[2,j]*x[5,j]*x[10,j]+x[0,j]*x[3,j]*x[4,j]+N+..... формула считается в цикле, с каждой итерацией формула новая, ее длинна то же может изменится..., переменные в формуле это значения разных ячеек массива, на выходе каждой итерации необходимо получить расчетное значение итой формулы, колличество прогонов (итераций) миллионы.... Возможно ли выделить из формулы одинаковые части, например x[0,j]*x[2,j]*x[5,j]*x[10,j] x[0,j]*x[3,j]*x[4,j] которые повторяются от формулы к формуле? |
|
|
trdm |
6.3.2009, 16:34
Сообщение
#29
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Может быть ассемблер?
Данные то все числовые, компилятор небольшой |
|
|
SABROG |
6.3.2009, 17:01
Сообщение
#30
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Тогда можно глянуть на fasmlib.
|
|
|
Текстовая версия | Сейчас: 28.1.2025, 3:10 |