Balancer: Все сообщения за 21 Сентября 2009 года

 
ПнВтСрЧтПтСбВс
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Balancer

администратор
★★★★★
Новый тест. Очень интересный язык fan: Новости - OpenSource - Парни из Ричмонда разработали язык Fan на замену C# и Java

Машина уже не та, операционка другая, версии компиляторов - другие, так что примерный подсчёт. Опорные точки:

c++ heap [gcc версия 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5)] - 20,9 сек. Соотношение к базовому тесту 1,26

java [не -server, build 1.6.0_16-b01] - 4,99сек. или отношение 1,28

Грубо примем соотношение производительности нынешней машины к тестовой, как 1:1,27.

Вариант на fan выполнился за 6,25 сек. Или в старом тесте это будет, соответственно, 6,25/1,27 = 4,9 сек. Туда и впишем.

Исходный код:
code text
  1. class FibObj
  2. {
  3.     Int _value
  4.  
  5.     new make(Int n) { _value = n }
  6.  
  7.     public Int value()
  8.     {
  9.         if(_value <= 2)
  10.             return 1
  11.  
  12.         FibObj f1 := FibObj(_value - 1)
  13.         FibObj f2 := FibObj(_value - 2)
  14.  
  15.         return f1.value() + f2.value()
  16.     }
  17.  
  18.     static Void main(Str[] argv)
  19.     {
  20.         for(Int i:=0; i<10; i++)
  21.         {
  22.             FibObj x := FibObj(40)
  23.             echo(x.value())
  24.         }
  25.     }
  26. }
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Обнаружилось, что очень большой прирост дала java с ключиком -server

Было 2,5 сек., т.е. при пропорции 1:1,27 сейчас должно быть 3,2сек. А вышло - 2,33 :)

Видимо, у Sun что-то заметно подкрутили.

Делаю несколько новых опорных тестов:

C#/mono - 12,8сек. Пропорция 1,15. Несколько меньше, чем 1,27, но mono более новый. Возможно, подкрутили тоже немного. Всё же, v1.2.6.0 -> v2.4.2.3

...

(ещё несколько тестов прогоню, результат в это же сообщение допишу)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
> from psyco.classes import metaclass

Чёрт, не работает для новых тестов. Python 2.5 у меня в системе уже неполноценен, и psyco ругается тупо «ImportError: No module named psyco.classes», а в 2.6, видно, что-то поменялось: «ImportError: cannot import name _metaclass_».

Ладно, отложим пока...
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
pokos> Судишь по своим работам? Несколько опрометчиво выглядит.

Нет. Я сужу по их сайту. Детали - см. выше :)

pokos> Ты думаешь, я не читал твои ответы?
pokos> Они же выдают кустаря-одиночку с головой.

pokos> Знаешь, как ответила бы серьёзная контора? Примерно так:
pokos> 1-"Отсутствие поддержки IE6 было согласовано с Заказчиком на этапе составления ТЗ".

Такой ответ звучал, но никого не удовлетворил :)

pokos> 2-"Заказчик отказался от подписания контракта на сопровождение и изменил исходный текст Продукта самостоятельно.

И этот ответ тоже звучал.

А что не в точно такой же формулировки? Так тут, вроде, у нас форум для неформального общения. Или я уже чего-то упустил?

Собственно, оба этих ответа были первым же ответом на твою претензию: Сайт пенсионного фонда. 3,8млн. руб. [Balancer#17.09.09 19:45] :)

Всё остальное - обычный уже флейм на тему «а не нужно было заказчику давать возможность менять свой продукт» или «а на Авиабазе IE6 тоже не поддерживается, значит он не поддерживается во всех продуктах Балансера».
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Balancer>> Из Гугля по запросу «oculist» :)
Mishka> Это не совсеми корректно. :) Есть такая болезн под названием старость. :)

Там фотки молодых тоже есть :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин>> А во сколько ты оценил бы этот сайт: http://www.codezone.com
HolyBoy> Лично я — не шибко высоко:

Гы. В Опере не показывается :) Firefox ради одного сайта грузить влом.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
В.М.> Они именно на ней свои прикладные решения предлагают.

Кстати, а кто пишет Linux'ы для Top500? :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
waveM> Возможно, я что-то не догоняю... Зачем городить огород с созданием новых экземпляров объекта

Потому что это цель теста. Поверь, для простого вычисления чисел Фибоначчи есть куда более подходящие способы :D

waveM> И чем вариант со стеком на с++

Я тут подобрал более актуальный пример (ближе к реалиям), но тестить буду позже и уже в отдельной теме. Вот, например, вариант на Java:
code java
  1. class FibObj2
  2. {
  3.         private int _value;
  4.         private FibObj2 _prev1;
  5.         private FibObj2 _prev2;
  6.         private int[] _foo = new int[20];
  7.  
  8.         private final void _init(int n)
  9.         {
  10.                 _prev1 = new FibObj2(n-1);
  11.                 _prev2 = new FibObj2(n-2);
  12.         }
  13.  
  14.         private final void _free()
  15.         {
  16.                 _prev1 = null;
  17.                 _prev2 = null;
  18.         }
  19.  
  20.         FibObj2(int n)
  21.         {
  22.                 _value = n;
  23.  
  24.                 for(int i=0; i<20; i++)
  25.                         _foo[i] = 0;
  26.         }
  27.  
  28.         public int value()
  29.         {
  30.                 if(_value <= 2)
  31.                         return 1;
  32.  
  33.                 _init(_value);
  34.                 int res = _prev1.value() + _prev2.value() + _prev1.foo() + _prev2.foo();
  35.                 _free();
  36.                 return res;
  37.         }
  38.  
  39.         public int foo()
  40.         {
  41.                 int sum = 0;
  42.                 for(int i=0; i<20; i++)
  43.                         sum += _foo[i];
  44.  
  45.                 return sum;
  46.         }
  47.  
  48.         public static void main(String[] argv)
  49.         {
  50.                 for(int i=0; i<10; i++


Дальше »»»
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Спокойный_Тип> я к чему это - к тому что Linux на не десктопах - это не миноритарно

Я же выше ссылку на Top500 давал. Там Linux - это 88.6% (у той же AIX - только 4.2%).

На Web-серверах доля Linux+FreeBSD процентов за 60 сегодня.

...

Так что миноритарность Linux - только на массовом десктопе наблюдается.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
waveM> На С++? С удовольствием! :-) Но для начала, что же мы тестируем? В зависимости от этого решения будут разными

Топикстартовый тест. Есть объект Fib, содержащий в себе один property value. И метод value(), который возвращает рекурсивно расчитываемое число Фибоначчи через генерацию двух таких же объектов, инициализирующихся значениями (n-1) и (n-2).

Но этот тест показал свою невысокую актуальность. Слишком простые объекты, отсутствует передача объектов между методами.

Поэтому навскидку сформирована новая задача.

Кроме всего упомянутого выше, есть пустой массив из 20 элементов (на глаз - типовое значение среднего числа свойств объекта). Нужно при инициализации класса занулить эти элементы (именно индивидуальные обращения... Пожалуй, чтобы не было соблазна заюзать memset (мы тестируем не скорость зануления, а скорость обращения), можно заменить прямые обращения на геттеры/сеттеры - да, наверное, так и сделаю к релизному тесту), при вычислении value вызвать для каждого объекта-источника данных метод foo(), который суммирует значения этих свойств.

Перед расчётом значения value() нужно дополнительно проинициализировать класс, загрузив объекты prev1 и prev2 для (n-1) и (n-2). После вызова можно освободить.

Инициализация не включена в конструктор (первоначально так думал сделать), так как иначе для 33-го числа не хватит никакой памяти :)

В общем, текста описания, по-моему, вышло больше, чем исходного кода.

waveM> 1) Если хвостовую рекурсию, то мне нужно разворачивать рекурсию в момент компиляции (привет от Александреску!)

При чём тут хвостовая рекурсия? Нас интересует жонглирование объектами. С рекурсией - это к Аккерману :) Древние топики Мерянье пи... э... попугаями. Быстродействие языков. и Быстродействие языков тест2

waveM> 2) Ежели просто грамотное использование объектами кучи (run-time), то тогда выяснить сколько объектов нужно для вычисления максимального пути (N-2), запросить N объектов и разложив их в ячейки 0..N брать значение из объектов в ячейках

Это чересчур искуственный тест. Мой - тоже, но он намного ближе к реальным задачам :)

waveM> т.е. по-прежнему не понимаю, что же имено мы тестируем?

Выполнение вышеописанного алгоритма :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
waveM> Хмм, а почему тогда не рассматривается такой вариант на С++?

Потому что этого теста строго формально ещё нет :) На ЛОРе, как раз, ищем слабые места. Уже ясно, что мой вариант не подходит, так как возникает неистребимое желание выкинуть из теста неиспользуемые операции :) Вот и в твоём тесте нету обращений к уже имеющимся объектам в value()...

В общем, перепишу тест, чтобы не было желания сэкономить - выложу :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru