Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.05.2012, 14:20
Gantenbain вне форума Посмотреть профиль Отправить личное сообщение для Gantenbain Найти все сообщения от Gantenbain
  № 1  
Ответить с цитированием
Gantenbain

Регистрация: Jul 2011
Сообщений: 32
По умолчанию Вычисление корня в 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 улучшил свой расчет корня? Или я что-то в Нахе не понял?

Старый 08.05.2012, 16:44
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Во первых:
- Сборку релизную делаешь?
Во воторых:
- 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);
	}
Раньше вроде без этого работало, или я чего-то не помню просто...


Последний раз редактировалось expl; 08.05.2012 в 16:48.
Старый 08.05.2012, 18:31
Gantenbain вне форума Посмотреть профиль Отправить личное сообщение для Gantenbain Найти все сообщения от Gantenbain
  № 3  
Ответить с цитированием
Gantenbain

Регистрация: Jul 2011
Сообщений: 32
Цитата:
Сообщение от expl Посмотреть сообщение
Во первых:
- Сборку релизную делаешь?
Именно в этом и была загвоздка.
Спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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