分解物質
Alexander
@voidlizard поменяешь ещё один мой?
Dmitry
@qnikst давай
Alexander
https://paste.pound-python.org/show/IWSLkR8XtbFNQTgcDEM3/
Alexander
поидее +- твой должен быть
Alexander
надо бы заделать 1 массив ещё
Dmitry
dmz@zen ~/tmp/bsfuck $ time ./qnikst < ./49zGQ6Zt.txt > /dev/null
real 0m1.532s
user 0m1.528s
sys 0m0.000s
Alexander
о, новый рекорд?
Anonymous
вообще нужно таймить несколько раз
Aragaer
ага
Anonymous
и считать среднее мб
Aragaer
да, потому что уже результаты различаются на один процент
Dmitry
да, различия уже небольшие
Alexander
ладно надо завта все аккуратно собрать и потом прогнать на вводе побольше
Alexander
а ещё запускать на машине без иксов браузера и прочего
Aragaer
у меня есть подозрение, что мой вариант сейчас довольно много времени тратит на разбиение входа на первый и второй столбец
Aragaer
чем больше данных, тем меньше это должно влиять
Alexander
с одним массивом ещё быстрее стало
Alexander
ещё можно позаимствовать rawmemchr
分解物質
сколько хаскель версия по времени?
Dmitry
dmz@zen ~/tmp/bsfuck $ time ./v-stream < ./49zGQ6Zt.txt > /dev/null
real 0m1.652s
user 0m1.624s
sys 0m0.024s
Dmitry
@qnikst удивительно, что версия с аллокациями, копированими и реверсом списка не сильно уступает
Alexander
угу
Alexander
@yellow_apple у меня на компе 1.24с
Alexander
у dmz порядка 1.6
Alexander
на си у меня рекорд 0.84c
Alexander
но там некоторые вещи сделаны досаточно нечестно
Alexander
а если я пишу #define _GNU_SOURCE это значит код должен быть gpl-ным
Aragaer
ну там если например знать верхнюю границу длины слова, то можно переходить между ними гораздо шустрее
Alexander
@anarchostatist не надоело это каждый раз после того как я пишу что-то про свой комп писать?
Alexander
вот мне надоело
Dmitry
это значит, что подцепяться GPL-ные хидеры местами
Dmitry
и могут быть различия в сокетах, етц
Aragaer
Macro: _GNU_SOURCE
If you define this macro, everything is included: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions. In the cases where POSIX.1 conflicts with BSD, the POSIX definitions take precedence.
Aragaer
нет, про лицензию ничего
Dmitry
@aragaer вроде выяснили, что основные тормоза это IO , а не парсинг
Aragaer
я прогонял свою программу через валгринд
Dmitry
правда при изменении длины ввода может получиться разница
Aragaer
после введения постраничной записи ио в нем вааще не светится
A64m
@qnikst а что там с багом было? А то я его, похоже, наблюдаю без всякого билдера
Alexander
@A64m_qb0 нету бага
Alexander
он выводит в \r
Alexander
и терминал переносит каретку, счастливо переписывая строку
Anonymous
Dmitry
@aragaer но при этом не сильно поменялось общее время?
Aragaer
625,281,451 PROGRAM TOTALS
--------------------------------------------------------------------------------
Ir file:function
--------------------------------------------------------------------------------
225,604,841 ???:main [/tmp/prog]
216,000,000 /build/glibc-MECilU/glibc-2.24/string/../sysdeps/x86_64/multiarch/../multiarch/memmove-vec-unaligned-erms.S:memcpy@GLIBC_2.2.5 [/lib/x86_64-linux-gnu/libc-2.24.so]
155,923,866 /build/glibc-MECilU/glibc-2.24/string/../sysdeps/x86_64/rawmemchr.S:rawmemchr [/lib/x86_64-linux-gnu/libc-2.24.so]
Aragaer
как раз и поменялось - было 8 секунд, стало 1.6
A64m
@qnikst ясно
Alexander
@anarchostatist ещё раз, ты после каждого моего сообщения про время писал. что какая разница
Aragaer
вот после этого все оптимизации это было именно в переписывании байт
Alexander
я прошу тебя перестать это делать
Alexander
rawmemchr ещё немного прироста дало
A64m
@qnikst а в стриминговом бенчмарке простой билдер действительно ускоряет в разы проставление восклицательных знаков, ну т.е. все как и ожидалось
Alexander
не удивительно
Alexander
https://paste.pound-python.org/show/siOmADstaaBAPWbhpAmN наверное последний мой сишный вариант и хватит уже этого дела
Danila Matveev
$ time java -jar lonely_evening-assembly-0.0.1.jar < 49zGQ6Zt.txt > /dev/null
real 0m12,434s
user 0m0,015s
sys 0m0,046s
код максимально простой
единственное что ушли в лес некоторые методы вектора, и дефолтный принт (охренительно медленный)
забавный момент, что print(a + b + "\n") почти в 1.5 раза быстрее println(a+b)
дальше надо другое апи уже смотреть и писать гораздо больше кода (не сегодня)
Dmitry
@qnikst
./qnikst.c: In function ‘main’:
./qnikst.c:65:19: error: too many arguments to function ‘rawmemchr’
char *l_end = rawmemchr(l_start, '\n', buf+size-l_end);
^
Alexander
хм
Alexander
секунду
Anonymous
Dmitry
@optician_owl есть смысл это у меня бенчмаркать?
Aragaer
у rawmemchr два аргумента и оно надеется, что байт будет, иначе улетает
Alexander
https://paste.pound-python.org/show/Lb5x3j0XGn4aSbawP5y9/
Alexander
@aragaer я в курсе
Danila Matveev
пока не вижу резона, если доберусь перпеисать на java nio, тогда может быть профит
Dmitry
@qnikst
dmz@zen ~/tmp/bsfuck $ time ./qnikst < ./49zGQ6Zt.txt > /dev/null
real 0m1.326s
user 0m1.316s
sys 0m0.012s
Alexander
nya!
Dmitry
в этих всех сишных вариантах очень прикольно получится, когда токенов станет, например, три
Dmitry
или появятся комментарии
Dmitry
или разделятся табуляцией
Alexander
ой раст чятик веселый 😏
Dmitry
шо где?
Dmitry
там тоже пошла движуха, что ли?
Aragaer
у меня между словами любое не-alphanum
Dmitry
дайте ссылку
Anonymous
я там попросил оптимизировать мой вариант
Anonymous
пошло не очень хорошо
Alexander
@voidlizard ты ж там был
Dmitry
там один закрылся