Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вычисление корня в ActionScript vs. Haxe (http://www.flasher.ru/forum/showthread.php?t=179164)

Gantenbain 08.05.2012 14:20

Вычисление корня в ActionScript vs. Haxe
 
Наткнулся на пост Nicolas Cannasse , тесты довольно старые, но встретились также и довольно свежие сравнительные тесты на ту же тему. А поскольку имею надобность посчитать изрядное количество корней, поставил Haxe SDK 2.09 (ранее с ним дела не имел) и попробовал воспроизвести увиденные у отмеченных авторов результаты. Однако, странным образом, скорость вычисления квадратного корня Нахе, в моих тестах, получается много ниже, чем у Math.sqrt() для Actionscript. Компилирую из под FlashDevelop:
Код AS3:

package ;
 
import flash.Lib;
import flash.Memory;
import flash.utils.ByteArray;
 
class Main
{
 
        static function main()
        {
                    prepare();
                    var i:Int = 0;
                    var beginTime:Int = Lib.getTimer();
                    var result:Float = 0;
                    while(i<1000000){
                      result = rSqrt(1245);                       
                      i++;
                }               
            trace(Lib.getTimer() - beginTime);
        }
 
        public static function prepare():Void {
                var b:ByteArray = new ByteArray();
                b.length = 1024;
                Memory.select(b);
        }
 
        public static function rSqrt(x:Float): Float
        {
                var original:Float = x;
                var half:Float = 0.5 * x;
                Memory.setFloat(0, x);
                var i:Int =Memory.getI32(0);
                i = 0x5f3759df - (i >> 1);
                Memory.setI32(0, i);
                x = Memory.getFloat(0);
                x = x * (1.5 - half * x * x);
                x = original * x;
                return x;
        }
}

Странно то, что скорость работы Math.sqrt() сравнима с указанной в последней статье, но корень из Haxe считается втрое медленнее (а не вдвое быстрее, чего, собственно, желалось).
выбор версии флеш-плеера для компилируемого проекта на скорость видимого влияния не оказывает. Тестил на 2-х ядерном AMD Athlon, 2Гб, 2ГГц. Отчего такое отличие результатов? Adobe улучшил свой расчет корня? Или я что-то в Нахе не понял?

expl 08.05.2012 16:44

Во первых:
- Сборку релизную делаешь?
Во воторых:
- public static function rSqrt(x:Float): Float
инлайнить нужно - вызов функции отнимает время

Ибо я засекал - реально в разы быстрее. Да что там, даже на том же as3 некоторые приближенные методы вычисления корня быстрее нативного работают (по крайней мере, если копипастить алгоритм по месту без вызова функции, но дело, конечно, не только в этом, а еще в приближенности вычислений)

Цитата:

Код AS3:

public static function prepare():Void {
                var b:ByteArray = new ByteArray();
                b.length = 1024;
                Memory.select(b);
        }


Раньше вроде без этого работало, или я чего-то не помню просто...

Gantenbain 08.05.2012 18:31

Цитата:

Сообщение от expl (Сообщение 1078681)
Во первых:
- Сборку релизную делаешь?

Именно в этом и была загвоздка.
Спасибо!


Часовой пояс GMT +4, время: 13:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.