![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
AntonTatu |
![]()
Сообщение
#51
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
..получил увеличение производительности больше чем в 12 раз. А что нужно сделать что бы переделать Вот этот кусочек
на на такой
т.е. необходимо создать формулу, посчитать ее, j=0; f.addOp( new VarOp( &arr[ 0 ][ j ] ) ); f.addOp( new VarOp( &arr[ 3 ][ j ] ) ); f.addOp( new VarOp( &arr[ 7 ][ j ] ) ); res = f.calc(); передвинуться на следующий j -й столбец массива arr, посчитать, j : =j+1; res = f.calc(); на следующий.. j : =j+1; res = f.calc(); и т.д. т.е. что бы появилась возможность "сдвигать" формулу и, не перестраивая формулу заново и не генерируя новый массив ? Сообщение отредактировал AntonTatu - 10.3.2009, 17:36 |
|
|
SABROG |
![]()
Сообщение
#52
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#53
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
SABROG |
![]()
Сообщение
#54
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#55
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
т.е. что бы появилась возможность "сдвигать" формулу и, не перестраивая формулу заново и не генерируя новый массив ? Ну барин ты задачки задаешь. (с) ![]() Переделать операцию VarOp или сделать еще одну операцию (это набросок).
Таким образом можно наделать разных необходимых операций, ввести переменные и т.д. Например, если у всех переменных необходимо изменять j, можно сделать такую операцию, которая это будет делать вызовом одной функции. Думай пробуй. ![]() |
|
|
AntonTatu |
![]()
Сообщение
#56
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ну барин ты задачки задаешь. (с) ![]() ............................................. ............................................. Таким образом можно наделать разных необходимых операций, ввести переменные и т.д. Например, если у всех переменных необходимо изменять j, можно сделать такую операцию, которая это будет делать вызовом одной функции. Думай пробуй. ![]() Да у самого голова уже пухнет ![]() Последний вопрос связанный вот с этим , и все.... вот эта часть
как сделать так что бы при сложении если на стеке ( m_stack.push( v1 + v2 ) ![]() я сделал так.... вот
все работает как надо, но мне кажется что можно было както проще сделать ? Сообщение отредактировал AntonTatu - 11.3.2009, 0:21 |
|
|
BRE |
![]()
Сообщение
#57
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Мне кажется, что логичней, если сам метод run() будет сообщать нужно ли продолжать вычисления.
вот
Еще желательно ввести методы для очистки стека, т.к. при таком прерывании операции возможны случаи, когда в стеке останутся данные. Можно ввести такое понятие как контекст, в котором хранить арифметический стек, состояние (ошибка), исходные данные, локальные переменные. Тогда мы бы избавились от статического стека и получили возможность пихать расчет формул по разным потокам. Если будут еще вопросы задавай, мне самому интересен этот вопрос. ![]() Сообщение отредактировал BRE - 11.3.2009, 8:39 |
|
|
AntonTatu |
![]()
Сообщение
#58
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мне кажется, что логичней, если сам метод run() будет сообщать нужно ли продолжать вычисления. Так и знал что можно было огород не городить......с флажком... ![]() Цитата Еще желательно ввести методы для очистки стека, т.к. при таком прерывании операции возможны случаи, когда в стеке останутся данные. сделал так: вот
Если выход из цикла будет по break, то в стэке будет какой то результат, но в этом случае очищать его мне ненужно, т.к., я его в дальнейшем использую... (мне его наооборот получать нужно ![]() Цитата Можно ввести такое понятие как контекст, в котором хранить арифметический стек, состояние (ошибка), исходные данные, локальные переменные. Тогда мы бы избавились от статического стека и получили возможность пихать расчет формул по разным потокам. Если будут еще вопросы задавай, мне самому интересен этот вопрос. ![]() вот это очень интересно, т.к. скорости мне все равно хочется больше... (если компилировать dll ку с массивом получается намного быстре, только компилятор таскать за собой не получится...) |
|
|
BRE |
![]()
Сообщение
#59
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
//Очищаем стэк перед новым расчетом //хотя заметил что перед новым расчетом стэк всегда пуст, даже если предыдущий выход из цикла был по брэйку...., //наверно и очищать его не нужно.... и функция лишняя... ? Вот смотри формула: 100 200 300 400 0 / * + + происходит ошибка: Деление на 0, в стеке: 100 200 300 400 Тут от формулы зависит. вот это очень интересно, т.к. скорости мне все равно хочется больше... (если компилировать dll ку с массивом получается намного быстре, только компилятор таскать за собой не получится...) С нативом даже не сравнивай, не расстраивай себя. Такой производительности не будет. ![]() Контексты набросаю чуть позже... |
|
|
BRE |
![]()
Сообщение
#60
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Добавил контексты.
Разбил по файлам. Кратко документировал. Проект в архиве.
Прикрепленные файлы
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 7.7.2025, 22:52 |