Re[27]: Как замучать эрланговый рантайм
От: Трурль  
Дата: 02.04.08 05:39
Оценка: +1
Здравствуйте, http://deadbee.livejournal.com/, Вы писали:

HDL>
HDL>Crash dump was written to: erl_crash.dump
HDL>eheap_alloc: Cannot reallocate 2501920024 bytes of memory (of type "heap").
HDL>Aborted
HDL>


Здесь скорее всего не хватило памяти для форматирования списка.
Re[26]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 02.04.08 06:15
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Так что все эти расчеты идут в топку.

Не лез бы ты в очередной раз с указательными пальцами в темы, в которых ничего не понимаешь.

WH>Также смотри это
Автор: WolfHound
Дата: 01.04.08
сообщение.

WH>Там количество памяти занимается линейно, а размер дерева ростет экспоненциально.

В топку идут такие программы, не имеющие никакого отношения к теме дискуссии.
Re[28]: Как замучать эрланговый рантайм
От: geniepro http://geniepro.livejournal.com/
Дата: 02.04.08 08:08
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Здесь скорее всего не хватило памяти для форматирования списка.


1> N=5000, A=lists:duplicate(N,lists:seq(1,N)), L=lists:last(lists:last(A)). 
5000

werl.exe занял 200MB ОЗУ (похоже, на каждый элемент списка уходит по 8 байт на 32-битной WinXP -- 4 байта на число и 4 байта на ссылку на след. элемент...)
1> N=50000, A=lists:duplicate(N,lists:seq(1,N)), L=lists:last(lists:last(A)).

Crash dump was written to: erl_crash.dump
eheap_alloc: Cannot reallocate 3480006320 bytes of memory (of type "heap").


Abnormal termination

werl.exe долго о чём-то думал, занимая при этом всего 10MB памяти, а потом выдал сообщение об ошибке.
Ну тут-то уж не нужно трёх с половиной гигабайт для печати числа 50000...
Re[29]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.04.08 08:15
Оценка:
Здравствуйте, geniepro, Вы писали:

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


Т>>Здесь скорее всего не хватило памяти для форматирования списка.


[cut]

Забавное гадание на кофейной гуще

Только к топику это прямого отношения не имеет, ведь можно и не через lists:duplicate/2 построить длинный список, только вопрос стоит нахрена?
Re[29]: Как замучать эрланговый рантайм
От: Трурль  
Дата: 02.04.08 08:34
Оценка:
Здравствуйте, geniepro, Вы писали:


G>
1>> N=5000, A=lists:duplicate(N,lists:seq(1,N)), L=lists:last(lists:last(A)). 
G>5000
G>

А вот так?
-module(test).
-export([chk/1]).
chk(N)-> A=lists:duplicate(N,lists:seq(1,N)), lists:last(lists:last(A)).
Re[29]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 02.04.08 10:04
Оценка:
Здравствуйте, geniepro, Вы писали:

Т>>Здесь скорее всего не хватило памяти для форматирования списка.


G>
1>> N=5000, A=lists:duplicate(N,lists:seq(1,N)), L=lists:last(lists:last(A)). 
G>5000
G>

G>werl.exe занял 200MB ОЗУ (похоже, на каждый элемент списка уходит по 8 байт на 32-битной WinXP -- 4 байта на число и 4 байта на ссылку на след. элемент...)

http://www.erlang.org/doc/efficiency_guide/advanced.html#9.1

A good start when programming efficiently is to have knowledge about how much memory different data types and operations require. It is implementation-dependent how much memory the Erlang data types and other items consume, but here are some figures for erts-5.2 system (OTP release R9B). (There have been no significant changes in R12B.)

The unit of measurement is memory words. There exists both a 32-bit and a 64-bit implementation, and a word is therefore, 4 bytes or 8 bytes, respectively.

Memory size of different data types
Data type Memory size
Integer (-16#7FFFFFF < i <16#7FFFFFF) 1 word
Integer (big numbers) 3..N words
Atom 1 word. Note: an atom refers into an atom table which also consumes memory. The atom text is stored once for each unique atom in this table. The atom table is not garbage-collected.
Float On 32-bit architectures: 4 words
On 64-bit architectures: 3 words
Binary 3..6 + data (can be shared)
List 1 word per element + the size of each element
String (is the same as a list of integers) 2 words per character
Tuple 2 words + the size of each element
Pid 1 word for a process identifier from the current local node, and 5 words for a process identifier from another node. Note: a process identifier refers into a process table and a node table which also consumes memory.
Port 1 word for a port identifier from the current local node, and 5 words for a port identifier from another node. Note: a port identifier refers into a port table and a node table which also consumes memory.
Reference On 32-bit architectures: 5 words for a reference from the current local node, and 7 words for a reference from another node.
On 64-bit architectures: 4 words for a reference from the current local node, and 6 words for a reference from another node. Note: a reference refers into a node table which also consumes memory.
Fun 9..13 words + size of environment. Note: a fun refers into a fun table which also consumes memory.
Ets table Initially 768 words + the size of each element (6 words + size of Erlang data). The table will grow when necessary.
Erlang process 327 words when spawned including a heap of 233 words.

Re[27]: Как замучать эрланговый рантайм
От: WolfHound  
Дата: 02.04.08 11:01
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Не лез бы ты в очередной раз с указательными пальцами в темы, в которых ничего не понимаешь.

А тебе не кажется что этот твой камент и + на этом
Автор: WolfHound
Дата: 01.04.08
несколько протеворечат друг другу?
Или ты таки хочешь сказать что авторы эрланга совсем больные и клонируют неизменяемые структуры данных?

G>В топку идут такие программы, не имеющие никакого отношения к теме дискуссии.

Очень даже имеет.
Это пример того как можно построить огромную с логической точки зрения структуру данных затратив при это очень мало памяти.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[28]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 02.04.08 11:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

G>>Не лез бы ты в очередной раз с указательными пальцами в темы, в которых ничего не понимаешь.

WH>А тебе не кажется что этот твой камент и + на этом
Автор: WolfHound
Дата: 01.04.08
несколько протеворечат друг другу?

WH>Или ты таки хочешь сказать что авторы эрланга совсем больные и клонируют неизменяемые структуры данных?

Я поставил плюс на твоем комменте, потому что с ним согласен. Я написал тебе предыдущий коммент — потому, что не согласен с твоим следующим замечанием.

1) Структура с разделением данных не отменяет рассчета количества элементов, по которым будет пробежка при сопоставлении с образцом. Он был проведен автором корректно.
2) "В топку" оправлять рассчеты вот так запросто — вообще нехорошо. Люди от этого заводятся. Температура дискуссии повышается.

G>>В топку идут такие программы, не имеющие никакого отношения к теме дискуссии.

WH>Очень даже имеет.
WH>Это пример того как можно построить огромную с логической точки зрения структуру данных затратив при это очень мало памяти.
Если ты это хотел сказать своим примером — то тогда конечно имеет. Только откуда мне (да и другим) знать, что ты хотел этим примером сказать, выводы можно сделать самые разные. Добавил бы сразу это короткое предложение — вопросов бы не было.
Re[15]: Как замучать эрланговый рантайм
От: Cyberax Марс  
Дата: 02.04.08 16:00
Оценка:
Здравствуйте, Курилка, Вы писали:

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

К>Если ты предоставишь реальный юзкейс и реальный механизм где это будет полезно, то можно поговорить.
Ровно точно такой же, как и в Sun JVM — оптимизация кода на базе собраной статистики после некоторого периода интерпретации. А потом деоптимизация и переключение в режим интерпретации по требованию (при перезагрузке кода, например).

К>А так могу заметить ещё факт, что дискретизация параллелизма построена на редукциях и при увеличении тел функций этот параллелизм будет "страдать" (в зависимости от кода, конечно). Плюс не вижу нахрена тут нужен джит, когда этот инлайнинг вполне себе можно делать в HiPE. Или ты предлагаешь держать рантайм статистику вызовов, ещё более "ускоряя" выполнение эрлангового кода, и по ней делать инлайнинг на базе неких эвристик?

Да. Плюс, может быть, ещё удастся сделать инлайнинг посылки сообщений (т.е. превратить посылку в прямой вызов).

К>Ну нафига нам JVM для эрланга?

JVM быстрая.
Sapienti sat!
Re[16]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.04.08 16:04
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


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

К>>Если ты предоставишь реальный юзкейс и реальный механизм где это будет полезно, то можно поговорить.
C>Ровно точно такой же, как и в Sun JVM — оптимизация кода на базе собраной статистики после некоторого периода интерпретации. А потом деоптимизация и переключение в режим интерпретации по требованию (при перезагрузке кода, например).

См. последний коммент.

К>>А так могу заметить ещё факт, что дискретизация параллелизма построена на редукциях и при увеличении тел функций этот параллелизм будет "страдать" (в зависимости от кода, конечно). Плюс не вижу нахрена тут нужен джит, когда этот инлайнинг вполне себе можно делать в HiPE. Или ты предлагаешь держать рантайм статистику вызовов, ещё более "ускоряя" выполнение эрлангового кода, и по ней делать инлайнинг на базе неких эвристик?

C>Да. Плюс, может быть, ещё удастся сделать инлайнинг посылки сообщений (т.е. превратить посылку в прямой вызов).
См. альтернативные модели памяти для Эрланга, это уже давно рассматривалось

К>>Ну нафига нам JVM для эрланга?

C>JVM быстрая.

Дак зачем тебе нужен эрланг-то тогда???
Re[17]: Как замучать эрланговый рантайм
От: Cyberax Марс  
Дата: 02.04.08 16:34
Оценка:
Здравствуйте, Курилка, Вы писали:

C>>Да. Плюс, может быть, ещё удастся сделать инлайнинг посылки сообщений (т.е. превратить посылку в прямой вызов).

К>См. альтернативные модели памяти для Эрланга, это уже давно рассматривалось
Это не имеет отношения к модели памяти как таковой. Я хочу, чтобы можно было вообще выбросить создание отдельного процесса, если к нему обращение только из одного процесса потом будет. Это радикально ускорит посылку сообщений в некоторых случаях.

К>>>Ну нафига нам JVM для эрланга?

C>>JVM быстрая.
К>Дак зачем тебе нужен эрланг-то тогда???
Удобный параллелизм, замена кода, удобный функциональный язык.
Sapienti sat!
Re[18]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.04.08 16:36
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


C>>>Да. Плюс, может быть, ещё удастся сделать инлайнинг посылки сообщений (т.е. превратить посылку в прямой вызов).

К>>См. альтернативные модели памяти для Эрланга, это уже давно рассматривалось
C>Это не имеет отношения к модели памяти как таковой. Я хочу, чтобы можно было вообще выбросить создание отдельного процесса, если к нему обращение только из одного процесса потом будет. Это радикально ускорит посылку сообщений в некоторых случаях.
Т.е. ты хочешь чтоб думал, не человек, который дизайнит систему, а ИИ, встроенный в эрланговый рантайм. Понятно...
Странно, но вот почему-то пользователи Эрланга не согласны с тобой судя по всему.

К>>>>Ну нафига нам JVM для эрланга?

C>>>JVM быстрая.
К>>Дак зачем тебе нужен эрланг-то тогда???
C>Удобный параллелизм, замена кода, удобный функциональный язык.
Скалу возьми чтоль...
Re[19]: Как замучать эрланговый рантайм
От: Cyberax Марс  
Дата: 02.04.08 18:11
Оценка:
Здравствуйте, Курилка, Вы писали:

C>>Это не имеет отношения к модели памяти как таковой. Я хочу, чтобы можно было вообще выбросить создание отдельного процесса, если к нему обращение только из одного процесса потом будет. Это радикально ускорит посылку сообщений в некоторых случаях.

К>Т.е. ты хочешь чтоб думал, не человек, который дизайнит систему, а ИИ, встроенный в эрланговый рантайм. Понятно...
Ага.

К>Странно, но вот почему-то пользователи Эрланга не согласны с тобой судя по всему.

Странно, почему это пользователи GCC ещё не начали кампаний по отмене оптимизаций и возврату к ассемблеру...

К>>>Дак зачем тебе нужен эрланг-то тогда???

C>>Удобный параллелизм, замена кода, удобный функциональный язык.
К>Скалу возьми чтоль...
Актёры в Скале — это здорово. Но это всего лишь удачные обходы недостатков самой JVM.
Sapienti sat!
Re[20]: Как замучать эрланговый рантайм
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.04.08 18:35
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


К>>Странно, но вот почему-то пользователи Эрланга не согласны с тобой судя по всему.

C>Странно, почему это пользователи GCC ещё не начали кампаний по отмене оптимизаций и возврату к ассемблеру...
Доказательства по аналогии идут сам понимаешь какой траекторией.
Кстати, в твоей аналогии Эрланг выходит ассемблером чтоли?
И из этого ассемблера ты хочешь сделать GCC? Может С++0X в Эрланг транслировать?

К>>>>Дак зачем тебе нужен эрланг-то тогда???

C>>>Удобный параллелизм, замена кода, удобный функциональный язык.
К>>Скалу возьми чтоль...
C>Актёры в Скале — это здорово. Но это всего лишь удачные обходы недостатков самой JVM.

Т.е. сделав в эрланге по сути JVM (по меньшей мере усложним до нужного уровня) мы не родим подобных недостатков?
На вопрос зачем так и не прозвучало конкретных аргументированных примеров.
А без конкретных юзкейсов и вариантов хороших решений все подобные рассуждения останутся лишь догадками.
Только людям работать надо.
Re[12]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 02.04.08 19:20
Оценка: 14 (1)
Здравствуйте, Cyberax, Вы писали:

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


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

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

Обычно HiPE ускоряет раза в два — и на это вполне можно рассчитывать. Иногда я получал больше, иногда — меньше (реже). Скажем, общая производительность управляющей программы AXD301 возрасла вдвое при компиляции Хайпом. Если твои программы не ускоряются — значит они упираются в обмен сообщениями и ввод-вывод. Либо — ты неправильно пользуешься Хайпом — например, у тебя слишком много переключений режимов байт-код-нэйтив.

И вообще — приведи пример кода, который не ускоряется Хайпом, в студию.

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

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

Пока оно не реализовано, когда будет реализовано — тогда и видно будет. Но Хайп неплохо выводит типы из контекста уже сейчас.

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

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

Банально — все перечисленное тобой Хайп уже делает статически, и я не понимаю, зачем нужен JIT и почему именно он поможет. Добавь вот эти строки в начало своих модулей:

-compile( [ native, { hipe, o3 } ] ).
-compile( [ inline, { inline_size, 100 } ] ).


И ни в коем случае не используй export_all — чем меньше межмодульный интерфейс, и чем больше модули, тем лучше Хайп выводит из контекста типы (ага, выводит) и устраняет лишние проверки типов (именно, устраняет). Например, Хайп знает сигнатуры большинства BIF-ов, и использует это при выводе. При наличии операций с плавающей запятой — не забудь поставить сверху гвард на флоат, тогда плавающая запятая скомпилируется в нативную.
Re[15]: Как замучать эрланговый рантайм
От: Gaperton http://gaperton.livejournal.com
Дата: 02.04.08 19:24
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Плюс не вижу нахрена тут нужен джит, когда этот инлайнинг вполне себе можно делать в HiPE.


Ага. Достаточно дать компилятору опцию "inline", и HiPE сделает автоматический инлайнинг. Причем — это работает уже очень давно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.