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

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

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

Регистрация: May 2009
Сообщений: 220
По умолчанию Производительность участка кода зависит от разной компоновки одного и того же?

Не раз уже сталкиваюсь со странными (для меня) явлениями в исполнении кода. Например, скорость исполнения участка кода зависит от последовательности его в этом самом коде (при этом параллельных операций, а-ля Loader'им картинку - не производится; общая нагрузка на процессор - так же стабильная).
Те же самые операторы +=, ++ ведут себя по разному для одних и тех же операций. При чем отклонения не пару миллисекунд, а сотни.

Примеры: здесь тестировался миф о том, что типизованный массив с фиксированной длиной исполняется быстрее:
Код AS3:
var v:Vector.<int> = new Vector.<int>();	var v:Vector.<int> = new Vector.<int>();
v[0] = 0;					v[0] = 0;
v.fixed = true;						
 
var t:int;					var t:int;
t = getTimer();					t = getTimer();
 
for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;	for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;
trace (getTimer() - t); //1206			trace (getTimer() - t); //1208
 
v.fixed = false;				v.fixed = true;
t = getTimer();					t = getTimer();
 
for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;	for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;
trace (getTimer() - t); //1243			trace (getTimer() - t); //1247
Что это? Кто первый тот и папа? ))


Или это:
Код AS3:
// пример №1
var n:Number = 1.13456;
var t:int;
 
t = getTimer();
 
for (var i:uint = 0; i<100000000; i+=1)
{
 n = Math.floor(n);
 n = 1.13456;
}
 
trace(getTimer()-t); //10289
t = getTimer();
 
for (var j:uint = 0; j<100000000; j+=1)
{
 n = n >> 0;
 n = 1.13456;
}
 
trace(getTimer()-t); //1860
 
===================================
 
// пример №2
var n:Number = 1.13456;
var t:int;
 
t = getTimer();
 
for (var i:uint = 0; i<100000000; i++)
{
 n = Math.floor(n);
 n = 1.13456;
}
 
trace(getTimer()-t); //10253
t = getTimer();
 
for (var j:uint = 0; j<100000000; j++)
{
 n = n >> 0;
 n = 1.13456;
}
 
trace(getTimer()-t); //1485
 
=====================================
 
// пример №3
"var n:Number = 1.13456;
var t:int;
 
t = getTimer();
 
for (var i:uint = 0; i<100000000; i++)
{
 n = Math.floor(n);
 n = 1.13456;
}
 
trace(getTimer()-t); //10192
t = getTimer();
 
for (var j:uint = 0; j<100000000; j+=1)
{
 n = n >> 0;
 n = 1.13456;
}
 
trace(getTimer()-t); //1328
Примеры тестировались не раз, погрешность -- незначительна. (на более слабых ПК погрешность увеличивается - но не суть, пропорция остается)
Как видите, от перекомпоновки операторов в счетчике цикла мы получаем разные значения для одних и тех же вычислений.
Это что ж получается -- "от перемены мест слагаемых сумма..." меняется ?


Последний раз редактировалось switcher!; 14.09.2009 в 20:29.
Старый 14.09.2009, 20:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Для начала не надо использовать Flash IDE (если и использовать, то только обернув тест в функцию) и режим дебага для подобных тестов.

Старый 14.09.2009, 21:07
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 3  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
н-да, в пакетах(FD) и функциях(Flash IDE) - все ровно для разных случаев.
Только debug в Flash IDE стабильно показывает небольшое отставание исполнения первого кода над вторым (в обоих случаях, из первого примера).
Примерно, 1730/1690.

Единственное, что сильно напрягло, это непомерная разница исполнения кода в пакете и в функции в таймлане (для второго примера).
19922/10266(в пакете) против 10306/688(в функции таймлайна)

Старый 14.09.2009, 21:16
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Math.floor() !== A >> 0
__________________
Hell is the possibility of sanity

Старый 14.09.2009, 21:32
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 5  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
что функция не есть побитовый сдвиг? =) Знаю... интересует, почему код в функции кода на таймлайне - исполняется гораздо быстрее, чем тот же код в пакете, в конструкторе класса, например

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

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

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


 


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


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