Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 27 июня 2013< ^ >
f[x] установил(а) тему: OCaml / ОКэмл / Камль -- http://ocaml.org/ | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом | KEEP CAML AND CURRY ON | F#, Coq - де-факто онтопик
Конфигурация комнаты
Участники комнаты

GMT+4
[00:15:39] tilarids вошёл(а) в комнату
[00:19:59] ermine вышел(а) из комнаты
[00:24:35] Zbroyar вышел(а) из комнаты
[00:30:31] Kakadu вышел(а) из комнаты
[01:59:34] tilarids вышел(а) из комнаты: Computer went to sleep
[03:48:39] komar вышел(а) из комнаты
[04:06:45] komar вошёл(а) в комнату
[04:35:56] letrec вошёл(а) в комнату
[05:42:24] komar вышел(а) из комнаты: Logged out
[05:50:45] letrec вышел(а) из комнаты
[06:53:55] f[x] вошёл(а) в комнату
[08:20:24] zinid вошёл(а) в комнату
[08:45:54] avkarpich вошёл(а) в комнату
[10:11:15] tilarids вошёл(а) в комнату
[10:28:50] f[x] вышел(а) из комнаты
[10:31:07] ermine вошёл(а) в комнату
[10:59:04] ftrvxmtrx вышел(а) из комнаты
[11:03:24] Typhon вошёл(а) в комнату
[11:20:58] Typhon вышел(а) из комнаты
[11:42:22] ftrvxmtrx вошёл(а) в комнату
[12:03:35] f[x] вошёл(а) в комнату
[12:19:25] Typhon вошёл(а) в комнату
[12:37:22] tilarids вышел(а) из комнаты: Computer went to sleep
[12:51:35] Kakadu вошёл(а) в комнату
[13:45:42] Zbroyar вошёл(а) в комнату
[14:08:57] Zbroyar вышел(а) из комнаты
[14:29:13] komar вошёл(а) в комнату
[14:52:49] avkarpich вышел(а) из комнаты
[15:02:14] tilarids вошёл(а) в комнату
[15:31:56] bobry вошёл(а) в комнату
[15:32:36] <bobry> господа, а нету ли для камла чего-то вроде reducers из мира clojure? тобишь либы для параллельной свертки чего угодно
[15:44:55] <gds> bobry: есть несколько различных либ, основная идея которых -- fork + ipc.  Сходу вспомнилась либа, которую можно найти по "ocaml parmap", но она не единственная.
[15:47:07] <bobry> но это всё будет работать через системные треды, я правильно понимаю?
[15:47:22] <gds> через fork.
[15:47:28] <bobry> ах, процессы
[15:47:38] <komar> > треды
> параллельность
> ocaml
[15:47:41] <gds> а как ты несколько камлотредов запустишь в одном процессе?
[15:48:13] <bobry> ну вот я и думаю как: по идее без модификации камло-рантайма этого не сделать :(
[15:48:41] <bobry> прям обидно за державу-то, в х-ле есть легкие треды, а в камло нет
[15:48:53] <gds> в окамле есть лёгкие треды.
[15:48:55] <bobry> *вытесняющие легкие треды
[15:49:03] <bobry> в камле только кооперативные
[15:49:07] <bobry> если ты про lwt
[15:51:06] <gds> вроде пилят многотредовый рантайм где-то в недрах ocamlpro или подобной конторы.
[15:51:13] <f[x]> > вытесняющие лёгкие треды
[15:51:23] <f[x]> один я вижу тут противоречащий параграфы?
[15:51:49] <f[x]> gds: не многотредовый, а многорантаймовый рантайм
[15:51:55] <f[x]> в смысле - один тред один рантайм
[15:52:01] <f[x]> у камля свой путь
[15:52:04] <f[x]> и два горба
[15:52:17] <gds> про параграфы -- спишем на "погружение в х-ь" (ну, "dive into ...").
[15:52:48] <komar> Лерой сказал хуита нинужно.
[15:52:58] <gds> многорантаймовый рантайм -- это сильно сказано.
[15:53:18] <gds> f[x]: ссылку напомнишь, на этот много-...?  я посеял.
[15:54:33] <f[x]> gds: у меня в друзяыффках на гитхабе
[15:56:02] <f[x]> https://github.com/lucasaiu/ocaml
[15:56:46] <f[x]> точнее я неправильно описал
[15:56:55] <f[x]> тредов можно несколько на рантайм
[15:57:06] <f[x]> но рантаймов в одном процессе тоже несколько
[15:59:07] <aleksey> а лерой всё ещё считает что smp нинужно?
[16:01:15] <f[x]> ну линия партии не менялась вроде
[16:01:33] <f[x]> для символьных вычислений профит не оправдывает сложности
[16:01:44] <f[x]> а для числодробления камло изначально не годится
[16:02:33] aleksey постоянно числодробит на камле
[16:02:52] <gds> но камло ведь general purpose language!111
[16:03:31] <aleksey> prelude.ml с parmap иногда спасает конечно
[16:05:18] <f[x]> prelude?
[16:05:48] <bobry> f[x]: в чем противоречие?
[16:05:54] <bobry> aleksey: а что числодробишь?
[16:06:06] <aleksey> https://github.com/kig/preludeml
[16:06:09] <f[x]> bobry: а что такое лёгкие треды?
[16:06:15] <aleksey> bobry: projecteuler :)
[16:06:56] <aleksey> вернее не parmap, а pmap
[16:08:18] <bobry> f[x]: треды уровня языка, а не ОС
[16:10:08] <f[x]> а вытесняет кто - рантайм языка?
[16:10:47] <bobry> угу
[16:10:49] <f[x]> в камле такое есть - в байткоде vmthreads - тот ещё набор костылей судя по коду
[16:11:07] <f[x]> и как у него со скоростью работы?
[16:11:22] <f[x]> а биндинги как писать?
[16:11:47] <bobry> у кого у него? у vmthreads?
[16:12:03] <f[x]> у х-ьной реализации
[16:12:49] <f[x]> и как это работает в сочетании с ОС-вытеснением..
[16:14:17] <f[x]> т.е. там наверное маппинг 1 системный тред - несколько лёгких
[16:14:35] <f[x]> когда один из лёгких делает блокирующую операцию - остальные висят?
[16:14:40] <bobry> да, мапинг ровно такой
[16:14:42] <f[x]> или лучше пул
[16:14:50] <bobry> детали реализации не знаю
[16:18:18] <f[x]> не, ну вытеснение на уровне языка для нативного кода - это конечно круто, но ведь тормоза будут?
[16:19:40] <bobry> что значит блокирующая операция?
[16:19:42] <bobry> IO?
[16:19:47] <f[x]> угу
[16:20:10] <bobry> ну а кто мешает передавать управление на IO?
[16:20:34] <f[x]> куда? отщеплять только такой тред в пул, как в lwt
[16:21:43] <bobry> гм, а что в lwt после отщепления происходит?
[16:22:40] <f[x]> ну лёгкий тред переносится на выделенный системный тред и выполняется там
[16:22:46] <f[x]> выделенный тред берётся из пула
[16:23:16] <bobry> я не знаю как это сделано в х-ле, но почему мы не можем просто пометить этот тред как "ожидающий IO" и переключиться на любой другой тред в текущем пуле
[16:23:49] <f[x]> ну они могли решить это точно так же
[16:23:55] <f[x]> но не так как ты говоришь
[16:24:08] <bobry> почему?
[16:24:25] <f[x]> ну отметишь ты лёгкий тред как ждущий io - но все другие лёгкие что были замапленны на этот е системный - будут висеть
[16:24:26] <bobry> понял почему
[16:24:31] <bobry> ага
[16:24:39] <f[x]> но это решается отщеплением
[16:25:12] <f[x]> так что остаётся один только интересный вопрос - с какой скоростью оно тормозит
[16:25:37] <bobry> ну для чистых то вычислений тормозов не будет
[16:25:54] <f[x]> why??
[16:26:50] <bobry> а откуда? context switching между легкими тредами?
[16:26:54] <f[x]> чистые вычисления на лёгких тредах делать ненуна - это как раз худший случай когда тормоза будет видно
[16:27:11] <f[x]> ну да
[16:28:26] <ADEpt> рассказываю, как оно в хаскеле
[16:28:48] <ADEpt> на каждый CPU у рантайма есть HEC (haskell execution context) - что-то типа менеджера этого CPU
[16:28:58] <ADEpt> у каждого HEC есть пул из worker threads
[16:29:04] <ADEpt> (системных)
[16:30:30] <ADEpt> на этих wroker thread-ах просиходит выполнение нативного кода (т.н. sparks)
[16:31:24] <ADEpt> если надо сделать foreign call, то для этого есть отдельный пул тредов
[16:31:57] <ADEpt> как только foreign call завершается, он кидает сообщение в общую очередь событий HEC. Текущий легковесный тред видит это сообщение и делает yield
[16:32:43] <ADEpt> когда выполняется легковесный код, тред который это делает лочит HEC
[16:32:55] <ADEpt> s/легковесный/нативный/
[16:33:38] <ADEpt> когда выполняется foreign call, HEC разлочивается, а когда мы вернулись и нам отдали управление, HEC лочится тем тредом, откуда был foreign call
[16:33:51] <ADEpt> очень похоже сделано в JS Async :)
[16:35:18] <ADEpt> www.haskell.org/~simonmar/papers/ <http://www.haskell.org/~simonmar/papers/>conc-ffi.pdf‎
[16:35:29] <f[x]> как делятся эти sparks
[16:35:45] <f[x]> генерится нативный код со switch'ами?
[16:35:54] <f[x]> статически?
[16:36:05] f[x] afk
[16:36:19] f[x] вышел(а) из комнаты
[16:37:21] <ADEpt> "par" и "pseq" генерят спарки, никакой автоматизации
[16:42:02] bobry вышел(а) из комнаты
[16:42:08] bobry вошёл(а) в комнату
[17:11:40] f[x] вошёл(а) в комнату
[17:12:32] <f[x]> так это не вытесняющие, ну
[17:12:45] <f[x]> bobry, объяснитесь!
[17:19:41] <Kakadu> Господа, что такого можно попарсить, чтобы мемоизация парсер-комбинаторов дала выгоду?
[17:19:53] f[x] вышел(а) из комнаты
[17:22:15] <komar> Маркдаун.
[17:22:40] <komar> _например, *так*
[17:23:58] <komar> Обычны парсер увидит начало емфасиса, попытается его распарсить, найдет внутри болд, распарсит его, обосрется в связи отсутствием закрывающего «тега» для емфасиса, вернется в начало и начнет парсить все как plain text, наткнется на болд и СНОВА будет его парсить.
[17:35:18] bobry вышел(а) из комнаты
[17:40:49] bobry вошёл(а) в комнату
[17:42:11] <bobry> на тему х-ля и вытеснения: http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html#g:14
[18:00:33] <zinid> нинада про парсиры
[18:35:40] f[x] вошёл(а) в комнату
[18:37:18] <f[x]> ADEpt: вообщем по сути этот как будто-бы камлевый global lock был per-cpu %)
[18:37:28] Typhon вышел(а) из комнаты
[18:40:22] <ADEpt> f[x]: ну, типа да. Вроде бы механизм yield-а по memory allocation устроен немного по-разному, но в области локов все выглядит достаточно похоже
[18:44:55] bobry вышел(а) из комнаты
[18:48:08] f[x] вышел(а) из комнаты
[18:57:19] f[x] вошёл(а) в комнату
[19:02:50] tilarids вышел(а) из комнаты: Computer went to sleep
[19:13:07] bobry вошёл(а) в комнату
[19:40:06] <bobry> а поругайте ещё идею запилить NumPy-like слайсы для Genarray пока я не начал :)
[19:40:57] <bobry> для тех кто не в курсе, numpy slice это тапл, где для каждого измерения массива можно написать выражение вида 'a:b:step', что эквивалентно [a, a + step, a + 2 * step, … b)
[19:41:28] <bobry> соотв. мы выберем подмассив ссотв. индексам из списка
[19:42:10] <f[x]> пили!
[19:42:21] <bobry> f[x]: а ты поругай :)
[19:42:26] <zinid> не пили!
[19:42:28] <aleksey> bobry: фффууууу
[19:42:37] <bobry> aleksey: wat?
[19:42:47] <aleksey> поругиваю
[19:42:53] <aleksey> неконструктивно
[19:43:02] <bobry> а я хочу конструктивно :)
[19:43:13] <aleksey> этого небыло в изначальном тз!
[19:43:33] <aleksey> напиши хоть зачем это надо бывает
[19:44:06] <f[x]> я даже не знаю как поругать
[19:44:14] <f[x]> я себе такую штуку для строк пилю
[19:44:37] <bobry> aleksey: ну это такой способ компактно писать тривиальные forloop'ы
[19:44:50] <bobry> например xs[:5, :5] = 42
[19:44:57] <bobry> ну или массив какой присвоить справа
[19:45:11] <bobry> ну или мы хотим получить все нечетные строчки матрицы
[19:45:21] <bobry> точнее view, соотв. этим строчкам (без копирования)
[19:45:40] <aleksey> а как оно будет работать без копирования?
[19:46:59] <bobry> я детали ещё не продумывал
[19:47:43] <bobry> кстати и правда неочевидно, интересно как в NumPy это сделано
[19:47:44] <f[x]> просто в семантике прописывается волшебная фраза что изменение значений низлежащего массива - UB - и всё
[19:47:55] <bobry> UB?
[19:48:01] <f[x]> undefined behaviour
[19:48:34] <bobry> f[x]: вопрос в том как представлять такие слайсы внутрях
[19:49:41] <gds> bobry: ругаю: докажи (хотя бы примерами _реального_ кода), что это сколько-нибудь полезно, а иначе это всё тупое говно и синтаксический сахар для имбецилов.
[19:50:03] <bobry> gds: это пользуют все научные либы в питоне
[19:53:51] <gds> bobry: "апелляция к очевидности, ложная авторитетность"
[19:54:14] <bobry> gds: я ищую какой-нибудь клевый пример, погоди :)
[19:54:43] <gds> а я ищу способ удовлетворить твою просьбу :]
[19:56:06] bobry вышел(а) из комнаты
[19:58:07] bobry вошёл(а) в комнату
[19:58:25] <bobry> чота самый популярный юзкейс — обойти матрицу по строчкам или по столбцам
[19:58:41] <bobry> стало быть слайсы вида xs[:, i] или xs[i, :]
[19:58:44] <bobry> ну тоже ОК :)
[20:01:51] <aleksey> нинужно!!!
[20:02:09] <aleksey> for i = 0 to n - 1 do ... done!
[20:06:05] <gds> bobry: и эту замену for или рекурсивному комбинатору, да ещё и через синтаксическое расширение, небось?
[20:07:21] letrec вошёл(а) в комнату
[20:08:47] <gds> вот клёво было бы пройтись по пулу соединений, где куски ип-адреса в сумме дают число, кратное 7.  Это получится?
[20:09:47] <gds> (чорт, не получится, я же забыл про ipx.)
[20:14:06] <gds> bobry: к слову про синтаксические расширения.  Если есть "почти уверенность" в том, что людишки (учоные, небось) захотят твой синтаксис, то вперде.  Почему уточнил: они же как котята слепые, на производительность не смотрят, но синтаксису радуются.  Может быть, что им это очень понравится.  Вбрось ОНОНС в caml-list, посмотри на результаты, может.
[20:19:48] <aleksey> у них на питоне библиотечки, которые матрицы перемножают на gpu, и в умножении матриц их программы проводят 99% времени, поэтому их непроизводительные программы на питоне могут быть быстрее выоптимизированый камловых
[20:36:29] Kakadu вышел(а) из комнаты: Logged out
[20:37:27] <f[x]> дык у нас тоже есть вычисления на gpu
[20:37:29] <f[x]> чай не лыком шиты!
[20:38:01] <aleksey> у меня вот даже нет gpu на котором можно это запустить
[20:38:06] <f[x]> так что скоро наступит светлое будущее с слайсами и синтаксическими расширениями
[20:38:18] <aleksey> а какая библиотека?
[20:38:32] <f[x]> spoc
[20:38:35] <f[x]> недавно в листе было
[20:38:41] <f[x]> на этой неделе
[20:39:09] <aleksey> о, thx
[20:41:26] ftrvxmtrx вышел(а) из комнаты
[21:50:18] letrec вышел(а) из комнаты
[21:52:42] f[x] вышел(а) из комнаты
[21:53:21] zinid вышел(а) из комнаты
[22:00:29] bobry вышел(а) из комнаты
[22:00:39] bobry вошёл(а) в комнату
[22:26:55] ftrvxmtrx вошёл(а) в комнату
[22:53:26] bobry вышел(а) из комнаты
[22:57:19] Kakadu вошёл(а) в комнату
[23:40:51] Typhon вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!