Alexander
спасибо
Alexander
особые опции сборки?
A64m
все-таки хаскельный ввод вывод давно написали и с тех пор только подкастыливали там и тут
A64m
у меня никакой экзотики, -O2
Alexander
опции RTS?
Alexander
-A16m?
eahqzsr
-dynamic -O2 -optc-O3 - у меня так
A64m
да, но от A64 это не отличается, при дефолтных там продуктивность процентов 70
Alexander
6s, 0.03 system вариант @A64m_qb0 у меня
Alexander
-O2 просто
eahqzsr
А можно Lazy ByteString перенарезать на куски явно без Builder-а, через конверсию в обычный ByteString и назад?
Dmitry
Надо с пайпай вариантом и сравнить
Alexander
можно
Alexander
но зачем?
Alexander
а перенарезать
A64m
@eahqzsr чанки будут как в билдере, они там емнип одной константой заданы для всего
Alexander
не думаю
Alexander
мне кажется больше чем одной
Alexander
вариант @voidlizard 8s при дефолном A и 12 при -A16m
Alexander
щас результаты сравню ещё и можно начинать думать
A64m
там нету работы ГЦ вообще, так что толку от тюнинга нету
A64m
если в варианте @voidlizard собирать билдером чанки то быстрее моего будет, я-то просто до последнего пытался "высокоуровневый" вытянуть
A64m
другой вопрос, почему тогда сам байтстринг в unlines так не делает
Danila Matveev
можно еще бейзлайн отчертить, если замерить работу только логики, без ио
Alexander
так а во сколько ещё раз хотелось бы?
A64m
да я замерял одно ио без логики, можно сказать что только оно и есть
A64m
в десять раз быстрее перовй версии емнип
A64m
на моей машине сейчас 6 раз разница
Alexander
@A64m_qb0 output file вообще разный
Alexander
у тебя и у @voidlizard
A64m
а черт
Alexander
mygfc5tg3e vs 5tg3emygfc
Alexander
похоже местами не поменяно
eahqzsr
Не принципиально, понятно где пофиксить.
Alexander
не-не-не, просто поменять e1 и e2 не прокатит
Alexander
там какая-то веселуха с билдером
Alexander
если я меняю e1 и e2 местами, то e2 пропадает
eahqzsr
Хм. В общем самый бейзлан я причесал, тут https://pastebin.com/JM6qAnUW
A64m
у меня вроде в том же порядке, что и в первоначальном хаскельном варианте
Alexander
mygfc|5tg3e
Alexander
если поменять, то |mygfc
Alexander
разделитель мой
eahqzsr
Все что unzip и правее - это парсинг.
Alexander
@eahqzsr надо менять чанки местами или нет?
Alexander
что меня несколько удивляет (про билдер)
eahqzsr
Ну я не оч понял как билдер работает, но вообще конечно нужно к правильному варианту привести.
A64m
я воспроизводил поведение вот этого main :: IO () main = do interact processAll processAll = concat . process . unzip . map toPairs . lines process (l1, l2) = [format e1 e2 | e1 <- l1, e2 <- l2] toPairs line = (el1, tail el2) where (el1, el2) = break (==' ') line format a b = a ++ b ++ "\n"
Alexander
5.47 с hSetBuffering
A64m
так это почти то же самое
Alexander
15%&
Alexander
так ладно, поехали уже что-то пытаться самому сделать
Alexander
@A64m_qb0 попробуй у себя заменить
A64m
что заменить?
Alexander
-process (l1, l2) = [Builder.lazyByteString e1 <> Builder.lazyByteString e2 <> Builder.char8 '\n' | e1 <- l1, e2 <- l2] +process (l1, l2) = [Builder.lazyByteString e2 <> Builder.lazyByteString e1 <> Builder.char8 '\n' | e1 <- l1, e2 <- l2]
Alexander
и сравнить результаты ( | head) хотя бы
A64m
у меня fast-builder в полтора раза быстрее
Alexander
а с этим что? у меня он тупо съедает e2, looks like a bug..
A64m
а какие настройки буферизации были?
Alexander
не важно
Alexander
я это до этого заметил
Alexander
меняешь e1 и e2 и полстроки нету
A64m
да я не по вопросу съедания интересуюсь
Alexander
Nothing
Alexander
implementation dependent
A64m
воспроизводится
Alexander
похоже на баш
Alexander
баг
Alexander
при чем в e1 и e2 то что нужно
Alexander
если вставить что-то между, то это видно
Alexander
вариант voidlizard с builder-ом - 6.13с
Alexander
т.е. тоже что высокоуровневый, но строки нормальные
Alexander
а не. секунду
Alexander
4.48
Alexander
@A64m_qb0 ^
Alexander
пока рекорд у меня
Dmitry
Так может сделать LBS.fromChunks и перенарезать?
Alexander
билдер это и делает
Dmitry
pypy можешь запустить для сравнения?
Alexander
как его поставить на nixos?
Alexander
и где исходник