Плюсы и минусы вычислений с плавающей точкой?

Про байтики и логику ЭБУ
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Плюсы и минусы вычислений с плавающей точкой?

Post by mivaol »

Кстати всякого рода вычисления с плавающей точкой лучше бы избегать не так ли
например умножить 14.75 на 1.05 не проще умножить 1475 на 105 и результат поделить на сто а ещё лучше вообше не иметь в таблице таких больших чисел а иметь например если это смесь до сотых то так единица квантования 0.05 то смесь
начинать от скажем 8.00-20.75 так выйдет что значение в таблице 0 это 8.00, 1 это 8.05, 2 это 8.10 итд
Тогда экономится куча места не так ли?
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

Короткий ответ - нет, нет, нет и нет :(

Не проще, не быстрее, и не экономит память.
Например, целочисленное деление на 100 может оказаться дороже вещественного умножения.
Например, float занимает 32 бита так же как и integer - и у нас особого дефицита памяти нет, чтоб нужно было экономить.
Например, от загромождения кода арифметикой фиксированной точки мы получим только загромождённый плохочитаемый код.

См. также некоторые из агрументов из http://rusefi.com/forum/viewtopic.php?f=9&t=225
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by mivaol »

Всё ясно то есть стм одинаково умножит 14.75 и 1475 на 1.05 и 105 соответственно? Что то мне подсказывает что нет ;)

не понял только как это на код повлияет, ведь значения из таблицы просто берется int вместо float быстренько вычисляется результат отдается всё.
А вот забивка таблицы для конечного пользователя выглядит как будто 14.75
Ну не сильно я понимаю что внутри стм но хочется что бы всё было лучше .
Last edited by mivaol on Thu Jan 30, 2014 8:44 pm, edited 1 time in total.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

mivaol wrote:Всё ясно то есть стм одинаково умножит 14.75 и 1475 на 1.05 и 105 соответственно?
Умножит по разному. Вот только в одном случае ты забыл, что будет еще и деление на 100 - а в другом случае всё, у тебя есть результат. И ты забыл, что ДАЖЕ если целочисленная арифметика будет быстрее - еще есть проблема загромождения кода.

По сумме всех факторов именно в stm32f4 имемнно при наличии FPU - float для меня выигывает.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by mivaol »

russian wrote:
mivaol wrote:Всё ясно то есть стм одинаково умножит 14.75 и 1475 на 1.05 и 105 соответственно?
Умножит по разному. Вот только в одном случае ты забыл, что будет еще и деление на 100 - а в другом случае всё, у тебя есть результат. И ты забыл, что ДАЖЕ если целочисленная арифметика будет быстрее - еще есть проблема загромождения кода.

По сумме всех факторов именно в stm32f4 имемнно при наличии FPU - float для меня выигывает.
Точно! но можно во всем коде убрать сотые то есть флоат(в случае сотых) тогда не придется и делить, хотя пока система справляется пускай будет флоат.
Как понимаю если проц не справиться то поэтапно всё будет решаться?
Но таблиц будет много судя по TODO топику.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

mivaol wrote:поэтапно всё будет решаться?
Да. Всё будет решаться поэтапно.

Вообще глобально в настоящий момент с программированием сейчас затыка я не вижу - затык сейчас я вижу в отсутствии удобного железа, которые можно бы было быстро собрать, быстро подключить к стандартной проводке и начать играться с софтом. Софт сейчас слишкмо оторван от реальных мотороров, реальных моторов сейчас ОДИН и на этом одном моторе он работает. Я сейчас занимаюсь в большей степени организацией разработки и изготовления железа - мне это сейчас кажется самым полезным.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by mivaol »

Тогда надо было наверно уничтожить реальный блок выпаяв проц впаяв разъем и подсоединить f4 плату через переходник тогда за очень быстро выйдет правильно сделанный по железу блок с мягкой для вас программой.
Либо выпаяв родной микроконтроллер через переходник впаять платку с стм32 либо подобным, так чуток дольше но компактнее и аккуратнее.
Ну вообще круть это просто использовать готовый блок перепрограммировать проц в нем.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

mivaol wrote:Тогда надо было наверно уничтожить реальный блок выпаяв проц впаяв разъем и подсоединить f4 плату через переходник тогда за очень быстро выйдет правильно сделанный по железу блок с мягкой для вас программой.
Да, я такую идею думал и наверное до сих пор планирую.

Машина 1992 года - там это сработает идеально, там DIP. А вот в машине 1996 года уже мелкие компоненты и много чипов, между которыми чёрт знает какие протоколы - и впаиваться уже сложно, и исследовать это уже не подарок. Так что этот план ушёл на задний план, он слишком не универсальный.

И вопрос перепрограммирования блока с мощным процессором тоже не совсем тревиальный, там есть подводные камни тоже - компилятор, документация и так далее.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

есть тесты fpu perfomance для STM32? Сколько времени занимают унарные операции?
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

В прошивке у нас есть команда testperf, сейчас прилечу домой скопирую её отчёт сюда.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Sergey89 »

Вот что известно из аппноута по поводу FPU:
Absolute value (1 cycle)
Negate of a float or of multiple floats (1 cycle)
Addition (1 cycle)
Subtraction (1 cycle)
Multiply, multiply accumulate/subtract, multiply accumulate/subtract then negate (3
cycles)
Divide (14 cycles)
Square root (14 cycles)
The FPU has compare instructions (1 cycle) and a convert instruction (1 cycle).
Conversion can be done between integer, fixed point, half precision and float.
http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/application_note/DM00047230.pdf

Только я не понял, почему интерес к унарным операторам?
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

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

Здесь в некоем синтетическом тесте преимущество 11-17 раз.

цикл - это сколько тактов имеется ввиду?
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Sergey89 »

1 цикл равен 1 такту
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

да ну фигня какая то. откуда тогда всего 6-ти кратное преимущество от программной реализации float?
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by mivaol »

Пообщался с человеком одним сегодня.
Он спросил зачем спрашиваю, ответил хочу знать как справится FPU на ртос.
Так он сказал что если ртос реально заточена под m4 и стоят всякие галки- использовать фпу, то выигрыш все равно сомнителен(имеется ввиду если совсем отказаться от флоат) так как ось будет для каждого процесса сохранять регистры в том читсле и регистры фпу, при переходе от процесса к процессу.
Вот вопрос а точно ли так нужна ось? (не совсем эта тема но..)
Во вторых стоит ли нагружать то что в нагрузке не нуждается...
В другой теме другой вопрос.
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

Кстати да - содержимое регистров FPU же является контекстом и требует сохранения.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

Про утяжеление переключения контекста всё верно, кстати человек умный, смог про это вспонить. Он нам здесь нужен :)

Повторяю еще раз для "оптимизаторов":
1) если исходный код програмы в случае float на 1% проще
2) float требует в 10 раз больше ресурсов
3) эти лишние ресурсы ЕСТЬ в наличии

то в итоге выгоднее использовать float

Дома буду часов через 7 и отпишу результата микро-теста.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
потому что тройная интерполяция даже без поиска без трюков это 18 простых действий.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

Maxi wrote:у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
потому что тройная интерполяция даже без поиска без трюков это 18 простых действий.
У нашей 3d interpolation.c есть очевидный потенциал ускорения за счёт предподсчёта линейных коэффициентов a & b в двух из трёх 2D интерполяций - но сначала нужно уметь собирать статистику, которая ДОКАЖЕТ, что эту оптимизацию нужно делать. Я понимаю важность профилирования, а главное - именно это всё я умею лучше всего делать.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

Вообще в крутых системах сначала вычисляют единую для всех случаев матрицу осевых коэффициентов. Затем в каждом 3d lookup результат получается за 12 действий.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by AndreyB »

Maxi wrote:Вообще в крутых системах сначала вычисляют единую для всех случаев матрицу осевых коэффициентов.
Я думаю, что мы как раз об одном и том же говорим - заранее вычисляем a & b для уровнения "a * x + b = y"

Итак, я дошёл до дома и вот обещанные результаты - это наша встроенная команда testmath

Code: Select all

testmath 100000
Finished 100000 iterations of getBaseFuel in 944ms
Finished 100000 iterations of 'chTimeNow()' in 6ms
Finished 100000 iterations of 'chTimeNow()' with chSysLock in 87ms
Finished 10000 iterations of 'currentTimeMillis' in 1ms
Finished 100000 iterations of empty loop in 3ms
Finished 100000 iterations of int summation in 3ms
Finished 100000 iterations of int division in 2ms
Finished 100000 iterations of long summation in 3ms
Finished 100000 iterations of long division in 4ms
Finished 100000 iterations of float summation in 4ms
Finished 100000 iterations of float division in 26ms
Finished 100000 iterations of double summation in 149ms
Finished 100000 iterations of double division in 1005ms

testmath 1000000
Finished 1000000 iterations of getBaseFuel in 9450ms
Finished 1000000 iterations of 'chTimeNow()' in 61ms
Finished 1000000 iterations of 'chTimeNow()' with chSysLock in 877ms
Finished 100000 iterations of 'currentTimeMillis' in 8ms
Finished 1000000 iterations of empty loop in 30ms
Finished 1000000 iterations of int summation in 31ms
Finished 1000000 iterations of int division in 24ms
Finished 1000000 iterations of long summation in 37ms
Finished 1000000 iterations of long division in 31ms
Finished 1000000 iterations of float summation in 43ms
Finished 1000000 iterations of float division in 256ms
Finished 1000000 iterations of double summation in 1485ms
Finished 1000000 iterations of double division in 2726ms
Это конечно же микротесты, у микротестов бывают дикие искажения - но я старался надурить компилятор как мог, да и цифры примерно ожидаемые:
плавающее аппаратное сложение примерно равно обычному сложение, плавающее аппаратное деление - примерно в 8 раз медленее целочисленного. Библиотечные сложение и деление отстают этак в 10 раз.

getBaseFuel - это по сути наш interpolate3d
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
locon
Posts: 17
Joined: Fri Jan 31, 2014 6:43 am

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by locon »

Maxi wrote:у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
потому что тройная интерполяция даже без поиска без трюков это 18 простых действий.
несколько неверная информация ...
функции table lookup входят в набор базовых утилит, не относящийся к ядру ercos, и в оригинале они написаны на мета-языке.
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

locon wrote:
Maxi wrote:у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
потому что тройная интерполяция даже без поиска без трюков это 18 простых действий.
несколько неверная информация ...
функции table lookup входят в набор базовых утилит, не относящийся к ядру ercos, и в оригинале они написаны на мета-языке.
Транслятор такой эффективности этого куска дать не может даже сейчас - не говоря уж про середину 90х.
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by XDA »

В условном коде просто написана заглушка, чтобы на всех этапах был работоспособный код.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
locon
Posts: 17
Joined: Fri Jan 31, 2014 6:43 am

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by locon »

Maxi wrote:
locon wrote:
Maxi wrote:у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
потому что тройная интерполяция даже без поиска без трюков это 18 простых действий.
несколько неверная информация ...
функции table lookup входят в набор базовых утилит, не относящийся к ядру ercos, и в оригинале они написаны на мета-языке.
Транслятор такой эффективности этого куска дать не может даже сейчас - не говоря уж про середину 90х.
Банальный пример (все оттуда же, узнаешь Maxi?):

Code: Select all

;
; search function coefficients (offset:slope) for linear interpolation 
;
; input:
;        R13 - item (value)
;        R12 - table (pointer)
;
; output:
;        R4  - offset(H):slope(L)
;
; table structure [byte]:
;        size, data (N0 ... Nsize)
;
u8_seek_direct:  mov     r4, #0          ; = offset(H):slope(L) <- output value

                 mov     r3, r13         ; = item               <- input argument
;
                 movb    rl1, [r12+]     ; = table              <- input argument
                 movbz   r1, rl1         ; = size of table
;
                 mov     r2, r12         ; idx = 0              <- data of table
;
                 cmpb    rl3, [r2]
                 jmpr    cc_ULE, return  ; item =< table[0]
;
                 add     r2, r1          ; idx = max
                 sub     r2, #1
;
                 cmpb    rl3, [r2]
                 jmpr    cc_NC, loc_2    ; item > table[max-1]

loc_1:           sub     r2, #1          ; idx--
;
                 cmpb    rl3, [r2]
                 jmpr    cc_C, loc_1     ; item < table[idx]
;
                 subb    rl3, [r2]
                 shl     r3, #8
                 mov     MDL, r3         ; 'tmp1' -> (item - table[idx]) * 256
;
                 movb    rl3, [r2+1]
                 subb    rl3, [r2]
                 movbz   r3, rl3         ; 'tmp2' -> (table[idx+1] - table[idx])
;
                 divu    r3              ; 'tmp1' / 'tmp2'
                 mov     r4, MDL         ; = slope

loc_2:           sub     r2, r12
                 movb    rh4, rl2        ; = offset

return:          rets                    ; return offset(H):slope(L)

; End of function u8_seek_direct
- он несложен даже для банального "С", не говоря уже о языке специально заточенным под математику. Кстате и keil и tasking, тех годов, адекватно транслируют этот пример, а при соответствующей оптимизации - tasking транслирует байт в байт. Весь набор базовых утилит (включая математику) написан на мета-языке - у ETAS "пунктик" на кроссплатформенности, автогенерации кода и повторном использовании ... это достоверная информация.
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

Ты эту достоверную информацию берешь из переводимых же тобой документов по ercos? как насчет реальности? там нет и половины из того что написано в этих документах - ибо это банально не нужно. И есть очень много чего там не написано..
locon
Posts: 17
Joined: Fri Jan 31, 2014 6:43 am

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by locon »

Maxi wrote:как насчет реальности?
а пример выше уже из нереальности? он такой сложный, что закодить его эффективно можно только на ассемблере целевого процессора? или упаковка в один регистр двух значений переменных это и есть пресловутый трюк, не реализуемый эффективно без ассемблера? можно еще пример "нереальный", например, 3D lookup привести, но там все тоже самое, только в 4 раза больше кода.
Maxi wrote:там нет и половины из того что написано в этих документах - ибо это банально не нужно. И есть очень много чего там не написано..
Полностью с тобой согласен, но .... если рассмотреть документ, что я представил в "Источниках ...", в ercos, например, m(e)7 есть все то, что описано в документе и нет ничего что не описано. Вот как то так ...
Maxi wrote:Ты эту достоверную информацию берешь из переводимых же тобой документов по ercos?
Есть притензии к переводу? Конструктивная критика приветствуется! Я специализируюсь на встраиваемых системах по управлению сложным технологическим оборудованием - как реверс-инженер, профессионально (металорежущее оборудование). Автотематика просто мое хобби, потому соответствующего специального "автомобильного" образования не имею. Приходится учиться самому, но некоторые вопросы я понять пока не могу, а спросить порою неукого. Мне очень импонирует твой профессианализм, я многому у тебя научился. Поэтому не хочу мериться у кого длиннее. Хочется конструктивного диалога.
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

locon wrote:
Maxi wrote:как насчет реальности?
а пример выше уже из нереальности? он такой сложный, что закодить его эффективно можно только на ассемблере целевого процессора? или упаковка в один регистр двух значений переменных это и есть пресловутый трюк, не реализуемый эффективно без ассемблера? можно еще пример "нереальный", например, 3D lookup привести, но там все тоже самое, только в 4 раза больше кода.
трюки вообще не из сферы программирования а из свойств простых чисел.
Полностью с тобой согласен, но .... если рассмотреть документ, что я представил в "Источниках ...", в ercos, например, m(e)7 есть все то, что описано в документе и нет ничего что не описано. Вот как то так ...
1. обмен сообщениями дороже чем offline изоляция на уровне глобальных переменных. Поэтому его используют очень редко когда он и правда нужен. в основном простые изолированные переменные.
2. семафоры не используются вообще в таких системах - это тупиковая ветвь разделения ресурсов от жирных тупых ОС. Да собственно разделяемых ресурсов то - кот наплакал. В основном ресурс принадлежит конкретной задаче чуть менее чем всегда.
3. служба динамического таймера используется очень редко - в ней нет смысла. Если задаче нужна некая динамичность - то ее реализуют внутри задачи машиной состояний, это все равно быстрее чем таймеры.
4. исключения нет смысла обрабатывать - их не должно быть. Это чисто отладочная функция.
Есть притензии к переводу? Конструктивная критика приветствуется!
перечитай его сам - там несколько строк противоречат сами себе. Короче его надо вычитывать.
locon
Posts: 17
Joined: Fri Jan 31, 2014 6:43 am

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by locon »

Maxi wrote: у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
...
трюки вообще не из сферы программирования а из свойств простых чисел.
Вот эти две фразы, об одном и том же вопросе, не связаны между собой, так как трюки, основанные на свойствах простых чисел, не могут помешать писать эффективный код на мета-языке.
1. обмен сообщениями дороже чем offline изоляция на уровне глобальных переменных. Поэтому его используют очень редко когда он и правда нужен. в основном простые изолированные переменные.
Это прямыми словами отражено в документе - "В случае статического анализа исходного текста, операции приема/отправки, могут быть вставлены строкой в исходный текст, так как фактический контекст процесса известен. Это сокращает исходный текст до простых операций присваивания, например, msg (1): = msg;" ... так что мимо.
2. семафоры не используются вообще в таких системах - это тупиковая ветвь разделения ресурсов от жирных тупых ОС. Да собственно разделяемых ресурсов то - кот наплакал. В основном ресурс принадлежит конкретной задаче чуть менее чем всегда.
Это что, тест на мою профпригодность?! :) Например, SSC шина разделяемый ресурс (так как на ней несколько внешних устройств), и доступ к нему (из разных задач) осуществляется классически (как в жирных тупых ОС) - с захватом ресурса, выставлением семафора, обслуживанием, освобождением ресурса, сбросом семафора. ADC тоже разделяемый ресурс, но не классически (просто здесь доступ к нему из одной задачи) - захвата и освобождения ресурса нет, но семафор есть, его просто не стали выпиливать из готового и отлаженного кода, что лишний раз подтверждает слова герра Томаса Бека - о повторном использовании программного кода. Кстате, контроль за семафором тоже остался, "если что". Так ты лукавишь, или действительно не знал этого?
3. служба динамического таймера используется очень редко - в ней нет смысла. Если задаче нужна некая динамичность - то ее реализуют внутри задачи машиной состояний, это все равно быстрее чем таймеры.
Да и правда, нет в ней смысла, только вот запуск кооперативного планировщика осуществляется с помощью службы динамического таймера. Хотя есть еще одна область задач, где без нее никак. Кстате, а почему 10ms timeRaster может иметь 2 (две!) одновременно запущенных копии (это в правах задачи написано), когда все остальные таймслоты только одну? (даю подсказку - 10ms timeRaster активируется службой динамического таймера).
4. исключения нет смысла обрабатывать - их не должно быть. Это чисто отладочная функция.
А так же нет смысла контролировать в фоне пользовательский стек, время выполнения задач, целостность кода, аппратную переферию и прочие, что реализовано в m(e)7, например.
перечитай его сам - там несколько строк противоречат сами себе. Короче его надо вычитывать.
если только авторы противоречат сами себе .... я противоречий не нашел, или глаз "замылился", или как я писал выше - некоторые вопросы я пока понять не могу ...
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Плюсы и минусы вычислений с плавающей точкой?

Post by Maxi »

locon wrote:
Maxi wrote: у боша 2d-3dlookup входят в ядро еркоса и на ассемблере написаны с трюками.
...
трюки вообще не из сферы программирования а из свойств простых чисел.
Вот эти две фразы, об одном и том же вопросе, не связаны между собой, так как трюки, основанные на свойствах простых чисел, не могут помешать писать эффективный код на мета-языке.
А почему они должны быть связаны именно так как ты себе представил связь?

1. обмен сообщениями дороже чем offline изоляция на уровне глобальных переменных. Поэтому его используют очень редко когда он и правда нужен. в основном простые изолированные переменные.
Это прямыми словами отражено в документе - "В случае статического анализа исходного текста, операции приема/отправки, могут быть вставлены строкой в исходный текст, так как фактический контекст процесса известен. Это сокращает исходный текст до простых операций присваивания, например, msg (1): = msg;" ... так что мимо.
не сокращает это ничего. Все равно на уровне offline должен быть определен владелец и тип. Это сокращает глюки и ошибки.
Это что, тест на мою профпригодность?! :) Например, SSC шина разделяемый ресурс (так как на ней несколько внешних устройств), и доступ к нему (из разных задач) осуществляется классически (как в жирных тупых ОС) - с захватом ресурса, выставлением семафора, обслуживанием, освобождением ресурса, сбросом семафора. ADC тоже разделяемый ресурс, но не классически (просто здесь доступ к нему из одной задачи) - захвата и освобождения ресурса нет, но семафор есть, его просто не стали выпиливать из готового и отлаженного кода, что лишний раз подтверждает слова герра Томаса Бека - о повторном использовании программного кода. Кстате, контроль за семафором тоже остался, "если что". Так ты лукавишь, или действительно не знал этого?
SSC - не разделяемый ресурс! Им почти всегда монопольно владеет задача его обслуживания. И висит там кот наплакал чего - eeprom тупо кешируется на чтение сразу. А любая запись кешируется обычным стеком на уровне уже задачи. Еще я один раз встречал разделение на уровне ЗАДАЧ. когда задачи блокируют друг друга - но никак не сам ресурс. Потому что это просто глупо. Причем такое возможно только для неотвественных кусков (тот же SSC - в общем случае если его вообще отрезать и все его задачи убить - ничего страшного не произойдет)... То что ты там мог видеть какое то другое разделенное - это полная изоляция отдельных несвязанных кусков кода.
Да и правда, нет в ней смысла, только вот запуск кооперативного планировщика осуществляется с помощью службы динамического таймера.
ерунда кооперативный планировщик работает от системного таймера и никакого отношения к динамическому таймеру он не имеет - у него жесткое заданное offline поведение.
Хотя есть еще одна область задач, где без нее никак. Кстате, а почему 10ms timeRaster может иметь 2 (две!) одновременно запущенных копии (это в правах задачи написано), когда все остальные таймслоты только одну? (даю подсказку - 10ms timeRaster активируется службой динамического таймера).
Это где такое?
4. исключения нет смысла обрабатывать - их не должно быть. Это чисто отладочная функция.
А так же нет смысла контролировать в фоне пользовательский стек, время выполнения задач, целостность кода, аппратную переферию и прочие, что реализовано в m(e)7, например.
c каких пор там контролируется пользовательский стек и время выполнения задач?! и главное ЗАЧЕМ?
ты вообще не путаешь с отладкой сейчас?
Post Reply