Re[21]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 31.03.08 06:30
Оценка: 4 (1)
Здравствуйте, http://deadbee.livejournal.com/, Вы писали:

HDL>Здравствуйте, Mikl Kurkov, Вы писали:

MK>>Ну опять 25, в смысле 50. Вот здесь
Автор: Трурль
Дата: 25.03.08
уже Трурль указывал. Не 50К там, а 50К*50К, почувствуйте разницу что называется. А 50К можете сами взять и проверить, все матчится мгновенно.


HDL>Пардон, невнимательно посмотрел. То есть, если не ошибаюсь, там матчили списковые структуры по 18 гигобайт


50K*50K = 2500M = 2,5G.
Размер списка чисел = размер слова * 2 * количество элементов = 16 * 2,5G. Сколько получается? Правильно, 16+16+8=40G. Я взял размер слова 8 байт, потому, что очевидно, это будет работать на 64-битном эрланге. На 32-х битном будет 20G, но столько памяти там выделить просто нельзя. Если не разделять подсписки, конечно. Ну что, очень страшная проблема, да? Просто "косяк спецификации языка" ((с)Кодт), и "антипаттерн".

Проблема в том, что некоторые товарищи, в число которых в этот раз попал Кодт, разводят истерику на ровном месте, не затрудняя себя при этом элементарной проверкой фактов. И все бы ничего, но посты этих уважаемых людей читают другие люди, и начинают делать выводы, опять же не затрудняя себя проверками, потому что написали такие уважаемые люди как Кодт.
Re[22]: Как замучать эрланговый рантайм
От: BulatZiganshin  
Дата: 31.03.08 10:20
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Размер списка чисел = размер слова * 2 * количество элементов = 16 * 2,5G. Сколько получается? Правильно, 16+16+8=40G. Я взял размер слова 8 байт, потому, что очевидно, это будет работать на 64-битном эрланге.


tails [1..50]
Люди, я люблю вас! Будьте бдительны!!!
Re[22]: Как замучать эрланговый рантайм
От: Аноним  
Дата: 01.04.08 02:13
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Проблема в том, что некоторые товарищи, в число которых в этот раз попал Кодт, разводят истерику на ровном месте, не затрудняя себя при этом элементарной проверкой фактов. И все бы ничего, но посты этих уважаемых людей читают другие люди, и начинают делать выводы, опять же не затрудняя себя проверками, потому что написали такие уважаемые люди как Кодт.


Я, как и Кодт, видимо, где-то увидел циферь 50000, и смел поверить, что оно матчится сколько-либо заметно для рантайма. Удивительно, как там вообще смогли выделить, если говорить точно, в общей сложности 74 с половиной гигабайт, перед тем, как дивиться чему-либо. Вот кстати, в тему топика: почему рантайм не убивает процесс, который захотел памяти, сколько ее нет, а рушится сам?
Re[23]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.04.08 05:23
Оценка:
Здравствуйте, http://deadbee.livejournal.com/, Вы писали:

HDL>Я, как и Кодт, видимо, где-то увидел циферь 50000, и смел поверить, что оно матчится сколько-либо заметно для рантайма. Удивительно, как там вообще смогли выделить, если говорить точно, в общей сложности 74 с половиной гигабайт, перед тем, как дивиться чему-либо. Вот кстати, в тему топика: почему рантайм не убивает процесс, который захотел памяти, сколько ее нет, а рушится сам?


Предложите решение которое бы убивало процесс, с сохранением всей семантики и нынешней скорости выполнения.
Re[23]: Как замучать эрланговый рантайм
От: WolfHound  
Дата: 01.04.08 11:48
Оценка: +1
Здравствуйте, http://deadbee.livejournal.com/, Вы писали:

HDL>Я, как и Кодт, видимо, где-то увидел циферь 50000, и смел поверить, что оно матчится сколько-либо заметно для рантайма. Удивительно, как там вообще смогли выделить, если говорить точно, в общей сложности 74 с половиной гигабайт, перед тем, как дивиться чему-либо.

Смотрим еще раз внимательно.
Там не 50К списков из 50К элементов, а 50К ссылок на один список из 50К элементов
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.04.08 16:29
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, http://deadbee.livejournal.com/, Вы писали:


HDL>>Я, как и Кодт, видимо, где-то увидел циферь 50000, и смел поверить, что оно матчится сколько-либо заметно для рантайма. Удивительно, как там вообще смогли выделить, если говорить точно, в общей сложности 74 с половиной гигабайт, перед тем, как дивиться чему-либо.

WH>Смотрим еще раз внимательно.
WH>Там не 50К списков из 50К элементов, а 50К ссылок на один список из 50К элементов

А теперь отвечаем: откуда в эрланге ссылки?
Re[25]: Как замучать эрланговый рантайм
От: WolfHound  
Дата: 01.04.08 16:42
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А теперь отвечаем: откуда в эрланге ссылки?

А что в эрланге объекты передаются по значению?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.04.08 16:48
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Курилка, Вы писали:


К>>А теперь отвечаем: откуда в эрланге ссылки?

WH>А что в эрланге объекты передаются по значению?

В эрланге нет объектов
Re[25]: Как замучать эрланговый рантайм
От: WolfHound  
Дата: 01.04.08 16:57
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А теперь отвечаем: откуда в эрланге ссылки?

Еще можешь покурить вот такую программу:
using System;
using System.Console;
using Nemerle.Utility;

module Program
{
    variant Tree
    {
        | Nil
        | Node { l : Tree; r : Tree; }
        public Size : int
        {
            get
            {
                match (this)
                {
                | Nil => 1;
                | Node(l, r) => 1 + l.Size + r.Size;
                }
            }
        }
    }
    Main() : void
    {
        def next(t : Tree) : Tree
        {
            WriteLine(t.Size);
            Tree.Node(t, t);
        }
        def t : Tree = Tree.Nil();
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        def t = next(t);
        _ = ReadKey();
    }
}

Таже фигня только в гораздо болие жестоком виде... памяти раз два и обчелся но матчить... особенно если если next раз 100 позвать (ессно подсчет размера придется убрать)
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.04.08 16:59
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Курилка, Вы писали:


К>>А теперь отвечаем: откуда в эрланге ссылки?

WH>Еще можешь покурить вот такую программу:
[cut]

Спасибо, только я не курю
Re[27]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 01.04.08 17:17
Оценка:
Здравствуйте, Курилка, Вы писали:

К>>>А теперь отвечаем: откуда в эрланге ссылки?

WH>>А что в эрланге объекты передаются по значению?

К>В эрланге нет объектов


Не в пику — мне очень нравятся твои ответы, а исключительно заради справедливости и занудства. Процесс является вполне себе настоящим объектом, со всеми необходимыми аттрибутами объекта. А pid — его identity, ссылкой.

Кроме того, есть (редкие) исключения в виде штуковин типа ets и dets, которые мутабельны, и ничего кроме ссылок на них нет. Соответственно, абстрактные типы данных, которые на построены — например модуль граф из стандартной либы — это самый настоящий объект со ссылками на него, который надо создать и не забыть удалить.
Re[11]: Как замучать эрланговый рантайм
От: Cyberax Марс  
Дата: 01.04.08 18:12
Оценка:
Здравствуйте, Gaperton, Вы писали:

C>>Потому как хуже HiPE уже сложно сделать.

G>Обоснуй.
Из опыта. У меня он не ускорил ни одну из моих программ. Даже Питоновский psyco лучшие реузльтаты показывал.

C>>Если серьёзно, то система типов в стандартной библиотеке вместе с достаточно даже примитивным JITом существенно улучшит ситуацию.

G>Система типов — это EEP 8.
G>http://www.erlang.org/eeps/eep-0008.html
Я знаю. Пока только оно всё ещё не дало видимых результатов.

G>HiPE вообще-то выводит типы из контекста, кстати. А каким именно образом примитивный JIT может улучшить ситуацию — не вполне понятно. Я тебя уже в третий раз подряд об этом спрашиваю. Объяснишь?

Банально — инлайнинг функций, компиляция и инлайнинг ПМ (как в OCaml'е, где ПМ пока самый быстрый из всех, которых я видел). Это две основные вещи, которые могут дать большой прирост скорости.
Sapienti sat!
Re[12]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.04.08 18:36
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Gaperton, Вы писали:


G>>HiPE вообще-то выводит типы из контекста, кстати. А каким именно образом примитивный JIT может улучшить ситуацию — не вполне понятно. Я тебя уже в третий раз подряд об этом спрашиваю. Объяснишь?

C>Банально — инлайнинг функций, компиляция и инлайнинг ПМ (как в OCaml'е, где ПМ пока самый быстрый из всех, которых я видел). Это две основные вещи, которые могут дать большой прирост скорости.

Банально инлайнинг порушит (или переусложнит) текущую систему модулей и хот апдейт
Re[24]: Как замучать эрланговый рантайм
От: geniepro http://geniepro.livejournal.com/
Дата: 01.04.08 19:37
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Смотрим еще раз внимательно.

WH>Там не 50К списков из 50К элементов, а 50К ссылок на один список из 50К элементов

Eshell V5.5.2  (abort with ^G)
1> lists:duplicate(5,lists:seq(1,5)).
[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]

Значит, при 50K элементах будет список из 50К подсписков, каждый из которых по 50К элементов... всего 2.5G элементов...
Re[25]: Как замучать эрланговый рантайм
От: WolfHound  
Дата: 01.04.08 19:54
Оценка:
Здравствуйте, geniepro, Вы писали:

G>Значит, при 50K элементах будет список из 50К подсписков, каждый из которых по 50К элементов... всего 2.5G элементов...

Еще раз. Там физически ровно 2 списка.
Список интов и список ссылок на список интов.
Ибо никто в здравом уме не станет клонировать неизменяемую структуру данных.
Так что все эти расчеты идут в топку.
Также смотри это
Автор: WolfHound
Дата: 01.04.08
сообщение.
Там количество памяти занимается линейно, а размер дерева ростет экспоненциально.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Как замучать эрланговый рантайм
От: Cyberax Марс  
Дата: 01.04.08 22:09
Оценка:
Здравствуйте, Курилка, Вы писали:

C>>Банально — инлайнинг функций, компиляция и инлайнинг ПМ (как в OCaml'е, где ПМ пока самый быстрый из всех, которых я видел). Это две основные вещи, которые могут дать большой прирост скорости.

К>Банально инлайнинг порушит (или переусложнит) текущую систему модулей и хот апдейт
Чем? У нас остаётся исходный байт-код. Кто мешает по требованию откатить оптимизации и перейти в режим интерпретации, когда потребуется? Ну это, как Sun JVM сейчас делает.
Sapienti sat!
Re[26]: Как замучать эрланговый рантайм
От: Аноним  
Дата: 02.04.08 01:11
Оценка:
Здравствуйте, WolfHound, Вы писали:
G>Значит, при 50K элементах будет список из 50К подсписков, каждый из которых по 50К элементов... всего 2.5G элементов...
WH>Еще раз. Там физически ровно 2 списка.
WH>Список интов и список ссылок на список интов.
WH>Ибо никто в здравом уме не станет клонировать неизменяемую структуру данных.
WH>Так что все эти расчеты идут в топку.

В топку идут догадки.

$ erl
Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0] [kernel-poll:false]

Eshell V5.5.2  (abort with ^G)
1> N=50000, A=lists:duplicate(N,lists:seq(1,N)).

Crash dump was written to: erl_crash.dump
eheap_alloc: Cannot reallocate 2501920024 bytes of memory (of type "heap").
Aborted
Re[14]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.04.08 05:37
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Курилка, Вы писали:


C>>>Банально — инлайнинг функций, компиляция и инлайнинг ПМ (как в OCaml'е, где ПМ пока самый быстрый из всех, которых я видел). Это две основные вещи, которые могут дать большой прирост скорости.

К>>Банально инлайнинг порушит (или переусложнит) текущую систему модулей и хот апдейт
C>Чем? У нас остаётся исходный байт-код. Кто мешает по требованию откатить оптимизации и перейти в режим интерпретации, когда потребуется? Ну это, как Sun JVM сейчас делает.

Если ты предоставишь реальный юзкейс и реальный механизм где это будет полезно, то можно поговорить.
А так могу заметить ещё факт, что дискретизация параллелизма построена на редукциях и при увеличении тел функций этот параллелизм будет "страдать" (в зависимости от кода, конечно). Плюс не вижу нахрена тут нужен джит, когда этот инлайнинг вполне себе можно делать в HiPE. Или ты предлагаешь держать рантайм статистику вызовов, ещё более "ускоряя" выполнение эрлангового кода, и по ней делать инлайнинг на базе неких эвристик?
Ну нафига нам JVM для эрланга?
Re[27]: Как замучать эрланговый рантайм
От: Трурль  
Дата: 02.04.08 05:37
Оценка: :)
Здравствуйте, Курилка, Вы писали:

К>Спасибо, только я не курю

С таким то ником?
Re[28]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.04.08 05:38
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Здравствуйте, Курилка, Вы писали:


К>>Спасибо, только я не курю

Т>С таким то ником?

Именно с таким ником
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.