
Andrey
03.11.2016
21:06:22
Правда сравнивал readline-echo
А при увеличении числа процессов и размера сообщений торнадо начал выигрывать - 970rps против 1090rps

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

Google

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

Roman
03.11.2016
22:10:01
Не делай так.

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

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
попробую

Google

Roman
04.11.2016
10:49:25

Andrey
04.11.2016
10:49:37
И оно умеет складывать сразу по нескольким осям

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

Sergey
04.11.2016
10:58:39

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

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

Serge
04.11.2016
11:18:32

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
Я помню когда давно пробовал нумпи для вычислений, в итоге быстрее оказалось питоновскими типами пользоваться

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

Serge
04.11.2016
11:25:43

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 сильно повышает производительность, особенно линейной алгебры.

Serge
04.11.2016
11:27:37

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

Google

Serge
04.11.2016
11:28:42

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

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

Serge
04.11.2016
12:34:21

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
чему именно я должен удивляться?

Serge
04.11.2016
12:44:38

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

Serge
04.11.2016
12:45:10

Eugene
04.11.2016
12:45:23

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

Zart
04.11.2016
12:45:42

Google

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

Zart
04.11.2016
12:46:28

Serge
04.11.2016
12:47:06

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

Serge
04.11.2016
12:47:37
Что делать если Born 0 ?

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

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

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

Serge
04.11.2016
12:50:20

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

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