@spbpython

Страница 182 из 785
Andrey
03.11.2016
21:06:22
Вообщем, в tcp-echo на pypy самым быстрым оказался twisted(101krps), потом tornado(99krps), eventlet(97krps), gevent(93krps). luajit + libuv - 120krps, tarantoool + libuv - 145krps, Go - 140-160krps с gomaxprocs=1
Как раз написал сегодня в образовательных целях подобие эвентлупа. Сравнил с торнадо - 4500rps против 4160rps (CPython 3.5 на винде)

Правда сравнивал readline-echo

А при увеличении числа процессов и размера сообщений торнадо начал выигрывать - 970rps против 1090rps

Andrey
03.11.2016
21:19:27
кажется, что на подобные различия гораздо больше влияет структура запросов, чем сам луп

Google
Andrey
03.11.2016
21:22:57
Если кто захочет потыкать палочкой, вот код: https://github.com/ethframe/microio

GNU/Docker
04.11.2016
08:44:06
Ром

А у тебя код где нить есть по тестам?

Aleksander
04.11.2016
08:45:54
сходил вчера на PiterJS - они там startcarft 2 на чистом CSS делают о_О

Andrey
04.11.2016
10:11:27
Не делай так.
Прикрутил epoll

Serge
04.11.2016
10:46:08
пооптимизировал вчера немножко life. оказывается сделать sum(sum(numpy.array())) быстрее, чем sum(numpy.array.flatten()) для двумерных массивов

Andrey
04.11.2016
10:48:41
А если с numpy.sum сравнивать?

Serge
04.11.2016
10:49:16
А если с numpy.sum сравнивать?
ы:) а такое есть, да?

попробую

Google
Roman
04.11.2016
10:49:25
Andrey
04.11.2016
10:49:37
ы:) а такое есть, да?
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.sum.html

И оно умеет складывать сразу по нескольким осям

Serge
04.11.2016
10:56:36
но мне все ранво на маленьких полях уже паузу пришлось между циклами поставить, иначе ничего не рассмотреть:)

Serge
04.11.2016
11:00:55
ну там примерно так и есть, но хочется же не тупить и считать новый циклкак можно раньше, это же больше вычисление, чем игра

я ожидаю, что на более мощном процессоре циклы быстрее будут обрабатываться

pyglet как раз позволяет удобно разделить это, но тут это большого смысла не имеет

По крайней мере, пока

Eugene
04.11.2016
11:09:47
Случайное поле можно сгенерировать, используя numpy (np.random.rand(width, height) < DENSITY).astype(int)

Eugene
04.11.2016
11:19:02
https://github.com/lig/life/blob/master/life/creator.py#L20

Serge
04.11.2016
11:19:16
Что делает np.random.rand(width, height)?

Eugene
04.11.2016
11:19:49
Генерирует массив размером width x height и заполняет его случайными значениями

вррбще правильно np.random.rand(height, width)

Serge
04.11.2016
11:20:21
Eugene
04.11.2016
11:20:30
Будет bool-массив

Serge
04.11.2016
11:20:54
Прикольно оно с массивами работает

Eugene
04.11.2016
11:21:05
Так в этом и суть numpy.

Google
Serge
04.11.2016
11:21:05
Интересно будет ли это быстрее

Eugene
04.11.2016
11:21:13
векторизация везде где возможно

Serge
04.11.2016
11:21:23
Оно очень много времени на создание нового массива тратит

А тут их аж три

векторизация везде где возможно
Вот только нужна ли она

А вот поле в новое я бы смапил

Eugene
04.11.2016
11:22:28
Ну по сравнению с питоновскими циклами и даже генераторами списков она гораздо быстрее

Serge
04.11.2016
11:22:29
Попробую

Создание нового массива дорого

В общем, помереем

Eugene
04.11.2016
11:23:53
Можно выделить память под массив numpy.empty((M, N), dtype=int)

Serge
04.11.2016
11:24:23
Я помню когда давно пробовал нумпи для вычислений, в итоге быстрее оказалось питоновскими типами пользоваться

Можно выделить память под массив numpy.empty((M, N), dtype=int)
Так сравнение новый создаст и astype

Eugene
04.11.2016
11:24:51
Более того, многие numpy функции умеют не создавать массив, а писать в заданный извне. То есть сначала выделяешь всю память, а потом в цикле туда пишешь

Eugene
04.11.2016
11:25:55
https://docs.scipy.org/doc/numpy-1.11.0/reference/routines.logic.html#logical-operations см. аргумент out

Кстати, сборка numpy с MKL сильно повышает производительность, особенно линейной алгебры.

Eugene
04.11.2016
11:27:49
Можно

Google
Serge
04.11.2016
11:28:42
Кстати, сборка numpy с MKL сильно повышает производительность, особенно линейной алгебры.
А линуховая либа, которая на фортране не подходит? На линухе оно же вроде собирается с чем-то там

Eugene
04.11.2016
11:29:16
По умолчанию используется openblas вроде, а оно одно из самых медленных.

Интеловские либы и компилятор вообще крутые, только вот денег стоят

Zart
04.11.2016
12:15:13
скучная и ограниченная реализация

Zart
04.11.2016
12:35:21
про все эти нумпи массивы

Eugene
04.11.2016
12:40:06
"скучная реализация" - это как? Напоминает "скучные обои". Ну, а ограниченность есть везде и во всём, любая реализация чем-то ограничена: требованиями, спецификацией, предметной областью. Честно говоря, не понял, о чем речь.

Zart
04.11.2016
12:41:39
в том что тупо массив M на N

Admin
ERROR: S client not available

Eugene
04.11.2016
12:42:08
в смысле, созданный массив не может быть изменён в размере?

Zart
04.11.2016
12:42:27
в том что поле ограниченно изначально

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

Serge
04.11.2016
12:43:44
в том что поле ограниченно изначально
Ты удивишься, но это как раз часто полезно

Zart
04.11.2016
12:44:06
чему именно я должен удивляться?

Zart
04.11.2016
12:44:57
cells = {(0, 0), (0, 1), ...}

Eugene
04.11.2016
12:45:23
cells = {(0, 0), (0, 1), ...}
это ты придумал sparse matrix?

Serge
04.11.2016
12:45:32
Ты же понимаешь, что пустую клетку тоже надо обрабатывать?

Zart
04.11.2016
12:45:42
это ты придумал sparse matrix?
на авторство я претендовать точно не буду

Google
Serge
04.11.2016
12:46:16
Там есть условие на Born

Zart
04.11.2016
12:46:28
Ты же понимаешь, что пустую клетку тоже надо обрабатывать?
в твоем алгоритме да - тебе надо обработывать всё поле без вариантов если же хранить поле как выше - тебе надо найти помимо этих клеток всех их соседей и обрабатывать только их

Zart
04.11.2016
12:47:18
а сеты тебе на что?

Zart
04.11.2016
12:48:39
и что?

Serge
04.11.2016
12:48:41
Или мне нужно каждый раз сортировать ещё?

Zart
04.11.2016
12:49:32
возьми тупой флипфлоп - три клетки в ряд. для его обработки надо обойти три клетки, найти их 12 соседей, и в итоге обработать 21 клетку а в твоем алгоритме будет ебашится всё полё

Zart
04.11.2016
12:50:25
не помню сейчас где я видел эту реализацию. но меня поразило что весь код там влез строчек в 20 суммарно

с выводом поля на печать принтами

Serge
04.11.2016
12:51:00
А в последней версии вычисление нового значения из старого и суммы вокруг делается в одну строку:)

https://github.com/lig/life/blob/master/life/creator.py#L45

https://github.com/lig/life/blob/master/life/creator.py#L45
Забавно, что в этой строке используется все битовые логические операции, кроме сдвигов.

Andrey
04.11.2016
13:10:21
С последней версией что-то не так, кстати

Страница 182 из 785