Производительность операций с floating point number
На днях прочитал про стандарт IEEE-754, к которому, как известно относится тип Number во флэше. Ничерта не понял, все слишком мудрёно, но на заметку взял такую штуку - оказывается операциям с очень маленькими числами требуется больше времени на выполнение (особенности реализации чисел - довольно запутанная штука). Например, на моем компьютере Intel Core 2 Duo E7600 такой код:
var aNum:Number = 10; var bNum:Number = 10; test(aNum, bNum); function test(a:Number, b:Number):void { var c:Number = a + b; }
(или если хотя бы один из операндов очень маленький)
Почему я написал название процессора? Потому что числовые операции происходят где-то там, но разные процессоры могут по-разному эти вычисления производить - например AMD (в статье так прочитал) урезают точность в угоду производительности в своих процессорах (интел вроде тоже в некоторых моделях).
И главный вопрос - почему я озадачился? Я допиливаю "очередной никому не нужный кроме меня физ движок собственного сочинения" и пытаюсь оптимизировать все что только можно оптимизировать. В той статье бороться советуют округлением - т.е. если значение очень маленькое - принять его равным 0. Но вот незадача - встроенного метода типа clamp() в AS нету, а if проверка займет больше времени, чем медленная операция.
В принципе, пост получился ниочем, но лично мне было интересно узнать такую фичу, теперь если в Своей Игре попадется вопрос на эту тематику, то я смогу заработать 100 очков.
Ах, да - тестировал во Flash CS4, AS 3.0, FP10.
Всего комментариев 12
Комментарии
18.03.2011 22:07 | |
Движок "пощупать" дадите?
|
18.03.2011 23:25 | |
Дам конечно!
|
19.03.2011 14:45 | |
И я, я тоже хочу! =) как раз недавно засел сравнивать и тестить nape vs box2d...
|
19.03.2011 18:40 | |
Неее, мне до них как до китая раком. Вообще на флэше круче nape нет ничего (я сужу по демкам - они божественны).
|
19.03.2011 19:16 | |
http://wiki.joa-ebert.com/index.php/Avoiding_Denormals
Тут есть об этом, и предлагается прибавлять очень маленькое число, чтобы избежать более затратных мат. операций. Но, если чесно, я думаю, что такой оптимизацией лучше не заниматься, т.как например завтра рассчеты ф.п. чисeл перенесут в GPU, (там действительно быстрее), но там может оказаться встроенная оптимизация, и ваш код будет наоборот работать хуже, если вы сделали оптимизацию на програмном уровне. При чем такие ситуации сплошь и рядом. Ну, скажем нe в AS3, но в языках, которые компилируются непосредственно в машинные коды существовала практика использовать побитовый сдвиг для деления и умножения на степень двойки. Но производители процессоров добавили инструкцию LEA, которая умножает число на константу, и работает это лучше, чем програмная реализация умножения и деления. |
20.03.2011 01:55 | |
У меня нет точной информации. И я не занимался никогда ничем, что бы требовало знать инструкции процессора, про GPU - со слов моего знакомого, который этим занимался. На сколько я его тогда понял, в определенных графических процессорах, особенно в тех, в которых есть хардверная поддержка какого-нибудь графического фреймворка типа OpenGL есть (или были) инструкции для работы с ф.п. числами. В то время как у процессоров которыми комплектуются обычные ПК таких инструкций нет. Но информация не приверенная, и мне не охота искать в вики, так оно или нет
ЗЫ. Если сложение дробных чисел окажется узким местом в движке, то считайте, что вы уже сделали его идеальным Не, и все-таки полез в вики. http://en.wikipedia.org/wiki/GPGPU Цитата:
The implementations of floating point on Nvidia GPUs are mostly IEEE compliant; however, this is not true across all vendors.[1] This has implications for correctness which are considered important to some scientific applications. While 64-bit floating point values (double precision float) are commonly available on CPUs, these are not universally supported on GPUs; some GPU architectures sacrifice IEEE compliance while others lack double-precision altogether. There have been efforts to emulate double-precision floating point values on GPUs; however, the speed tradeoff negates any benefit to offloading the computation onto the GPU in the first place.
|
Последние записи от Волгоградец
- Изометрическая сортировка. Новый подход. (25.01.2013)
- Stage3D заметки (06.04.2012)
- Embed клипа с одним кадром. (16.01.2012)
- Производительность операций с floating point number (18.03.2011)
- FTE based text controls (10.01.2011)