Сохранен 27
https://2ch.hk/pr/res/1331358.html
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

На каком ЯП лучше реализовать скрипт?(многопоточность)

 Аноним 21/01/19 Пнд 04:12:06 #1 №1331358 
5b5e56dc35c054020c6909f066e16b66.jpg
Собственно, есть функция (код спалить не могу), проще этой функции - только мусорнуться, она принимает в себя аргумент типа [3.8, 4, 10, 1] и после определенных вычислений выдает число. Таких аргументов около полумиллиона и на питоне это занимает много времени. Пробовал в многопоточность и мультипроцессорность, но на сколько я понял, на питоне будет сложно распаралелить данную задачу из-за особенностей самого питона. Анон, подскажи в какой ЯП податься, чтобы было быстро, модно, молодежно и параллелизм реально сократил время вычислений на количество потоков или (хотя бы на количество ядер). Если я совсем даун и не понимаю как это работает - плз, объясни, семпай.
Аноним 21/01/19 Пнд 04:56:30 #2 №1331362 
На крестах под OpenMP параллелить очень просто. На шарпе есть parallel linq, тоже ок, но надо разбираться. По-хардкору на самом питоне можно сделать на tensorflow - тогда даже на видеокарте можно будет параллелить, и ускорить вычисления в миллионы раз по сравнению с нативным питоном.
Аноним 21/01/19 Пнд 05:27:09 #3 №1331367 
Смотри в C++ в связке с Cuda для расчёта на GPU. Если только мощностями процессора то делай себе потоки, mutex и не знай горя
Аноним 21/01/19 Пнд 23:47:07 #4 №1332175 
>>1331358 (OP)
Похуй на код. Зто за функция то?
Какая вычислительная сложность?
Может у тебя там какой-нибудь эн-куб-логорифм. (миллион это смешное количество данных, так то), да еще и не паралелится by design.

А так мой внутренний телепат советует тебе смотреть в сторону функциональщины.
Аноним OP 22/01/19 Втр 00:04:51 #5 №1332183 
>>1332175
В функции нет вычислений сложнее обычного умножения (0.3456 * 1.05), но сама по себе она достаточно объемна. Она берет часть данных с list (~15 мб float чисел), который статичен и проводит арифметические операции на основе входящих аргументов ( [1.23, 0.678, 1, 10 и т.д]). Входящие аргументы тупо перебираются, грубо говоря, взял такой аргумент [0.1, 0.1, 0.1] и отправил функцию выполняться, получил с нее результат и дальше запустил ту же функцию, но уже [0.1, 0.1, 0.2]. Смысл в том, чтобы найти те аргументы, который дают больший результат, поэтому и смотрю в сторону параллелизма, чтобы сократить время общего перебора на количество потоков/ядер.
Читал статью, в которой чувак написал один и тот же скрипт, но на разных ЯП и по результатам, питон почти самый медленный, а scala и go одни из самых быстрых, потому созрело решение переписать свой код под новый язык(ибо мой код не сложнее hello world) попроще и побыстрее добавить параллелизм. Собственно вот и вопрос, в какой язык копать? TensorFlow пока очень интересен, а С (+, ++, #) и java достаточно сложны ибо придется выучить норм объем инфы, чтобы прописать грамотный параллелизм.
Аноним OP 22/01/19 Втр 00:12:34 #6 №1332186 
Если кто-нибудь готов посмотреть и посоветовать как быть, могу накатать на питоне похожий код. В нем будет все те действия, что я выполняю в функции, все данные, которые она обрабатывает и мои попытки достичь параллелизма в питоне.
Аноним 22/01/19 Втр 00:33:07 #7 №1332201 
>>1332186
не томи
Аноним OP 22/01/19 Втр 20:07:05 #8 №1332768 
>>1332201
Только вернулся с работы. Вот скрипт без многопоточности: https://pastebin.com/6Vd0bKZT
Скоро скину ссылку на то, как я добавил сюда многопоточность
Аноним OP 22/01/19 Втр 20:24:17 #9 №1332783 
Вот с двумя потоками через модуль threading: https://pastebin.com/9HkPTgJf
Я уже ебался с multiprocessing в питоне и написал тоже самое через этот модуль - результат почти не отличался от threading, зато дрочи для меня было много.
Крч, дайте, пожалуйста, совет куда копать и что можно сделать.
Аноним 22/01/19 Втр 20:56:50 #10 №1332809 
>>1332783
запили еще один скрипт с использованием os.fork() и сравни бенчмарки
Аноним OP 22/01/19 Втр 21:25:15 #11 №1332841 
>>1332809
Для этого нужно ставить Unix систему, а на ПК, на котором будет выполняться код, может быть только Винда, по рабочим причинам. Могу накатить на ноут, ради эксперимента, но в итоге скрипту все равно придется работать на винде, как не крути.
Аноним 22/01/19 Втр 21:29:21 #12 №1332847 
http://numba.pydata.org/numba-doc/0.12.2/tutorial_firststeps.html
/thread
Аноним OP 22/01/19 Втр 21:33:01 #13 №1332852 
Без названия.png
>>1332847
Спасибо, буду сегодня пробовать. а шо правда многопоточность на питоне и шо GIL не мешает, нунихуясебе
Аноним 22/01/19 Втр 23:51:26 #14 №1332945 
>>1332768
Тройной цикл можно распаралелить даже на консоли скриптами. Точно можно на баше, в повершеле наверняка тоэе можно. Просто подели одну из осей тройного цикла на количество процов, и передай отрезки в запущенные паралельно скрипты. Весть вывод скорми скрипту который найдет лучший результат из (32 или сколько у тебя камней) пар.

Но вообще у тебя, скорее всего у тебя задача на оптимизацию. Решать такие перебором — самый неоптимальный способ. И значит алгоритм плох by design.Наверняка у тебя будет работать метод простых итераций или типа того.
Аноним OP 22/01/19 Втр 23:57:32 #15 №1332951 
>>1332945
Ты сейчас очень сложные для меня вещи написал, буду гуглить, что ты написал, мб поможет. Я самоучка и учу язык только в том объеме, сколько мне нужно для реальной задачи. Но все равно, никакого комплексного подхода в обучении у меня нет, поэтому, если есть время, посмотри код выше и хоть на словах подскажи как именно это провернуть.
Аноним 23/01/19 Срд 22:28:19 #16 №1333612 
>>1332951
ты пытаешься в технический анализ чего-то бинарного?
Ощущение, что ты хочешь поставить бота, но не знаешь какие параметы ему дать, потому пеебирраешь параметры на выборке из прошлого.

Смотри.
start - это отклонение, по которому ты поверяешь (55), например.
Ты перебираешь варианты от 0.1 до 5%

Но на данных 0.33509000,0.33509000,0.33514000,0.33590000 максимальное изменение — 0.2%. Это значить для всех значений start более 0.2 у тебя не сработает условие (55) никогда.
И значит в цикле (133) ты можешь перебирать не 50 значений, а только 2 (0.1 и 0.2), так как остальные — вырожденные.

Я уверен есть еще много вырожденных вариантов.
(уместно ли использовать norm 0.1 когда crit 5. Есть ли в этом смыл? Возможны ли вообще такие данные?)
Раз в 100 на этом можно ускориться.

У тебя, кстати, очень криво написан цикл. В паре мест я вижу потенциальную ошибку в логике.

Если че, ты знаком с терминологией конечных автоматов?


Аноним OP 23/01/19 Срд 23:34:47 #17 №1333639 
>>1333612
Почти угадал, но все намного проще. Это трейдерский бот, он и правда работает в плюс, потому и бросаю сильно урезанный код. Числа из файла - это цены на покупку и продажу (ask и bid), каждую секунду через webstream я получаю от биржы аск и бид нужной мне пары и записываю в файл.
В итоге у меня работает бот на основе этих данных, а решения о покупке/продаже он принимает в зависимости от тех аргументов, что я перебираю.
Для того, чтобы угадать, какие аргументы будут давать большую прибыль, раз в определенное время я запускаю тот же бот, но цены там берутся не через webstream, а из файла, в итоге, если я собрал данных за пару недель, я могу за доли секунды увидеть сколько бы принес бот, если бы я его запустил пару недель назад на тех или иных аргументах.
Собственно задача чисто технического характера - оптимизировать код, чтобы я мог проверить большее количество комбинаций.
Какой цикл криво написан? Если в функции test, то это урезанная версия основной части бота и там нет смысла что-то менять, а если криво написан процесс перебора аргументов, то подскажи, пожалуйста, в чем проблема.
+Большую часть времени, которая уходит на тест - это достать значение из list, который я беру из файла, мб это как-то можно оптимизировать, пробовал внешние бд, пробовал array из numpy, но все это медленнее чем родной list у питона.
Аноним OP 23/01/19 Срд 23:41:37 #18 №1333644 
+ ускорял функцию (test из примера) с помощью numba.jit, прироста это не дало, мб юзаю неправильно, но обычно с оптимизацией jit функция выполнялась чуть дольше.
И ещё раз повторяю, я не программист, я походу вообще не вдупляю как это должно работать правильно и я не знаком с основами программирования, так как образование у меня юридическое и знакомых программистов вообще нет, собственно потому и спрашиваю здесь у людей с реальным опытом
Аноним 24/01/19 Чтв 00:11:05 #19 №1333651 
>>1333639
Тогда я знаю, как тебе радикально ускориться. Прям в тысячи раз. Вплоть до риалтайма. Но это несколько иной подход к решению задачи.

Цикл криво написан по архитектуре. Фактически, у тебя конечный автомат с состояниями бота, поведение которого ты моделируешь.
Аноним OP 24/01/19 Чтв 00:24:21 #20 №1333658 
>>1333651
И как же? Просвети, семпай, но, пожалуйста, так, чтобы хоть с гуглом я разобрался о чем ты говоришь.
Аноним OP 24/01/19 Чтв 00:35:57 #21 №1333667 
>>1333651
> Цикл криво написан по архитектуре. Фактически, у тебя конечный автомат с состояниями бота, поведение которого ты моделируешь.
В том и была идея, чтобы по состоянию бота в получать сколько он заработал и отобрать лучшее.
Но сейчас ситуация такова, что 50к комбинаций перебираются около 6 часов, плюс время растёт, в зависимости от количества данных, что я собрал, а в идеале комбинаций должно быть около 171 ляма, потому и хотел узнать, на какой язык переписать скрипт, чтобы оно само по себе быстрее перебиралось и мультипроцессорность можно было подрубить не сложнее, чем я подрубил многопоточность в своем втором примере на питоне.
Аноним 24/01/19 Чтв 01:16:55 #22 №1333693 
>>1333667
Да. Только автомат реализуется иначе.

Короче дискорд /GRDcDZ
Аноним 24/01/19 Чтв 23:16:46 #23 №1334358 
На java/kotlin можно распаралелить с помощью stream API
Аноним 25/01/19 Птн 07:29:20 #24 №1334438 
>>1331358 (OP)
>параллелить на питоне трудно
>threading
>PyOpenCL
Не язык - говно, а ты дебил.
Аноним 25/01/19 Птн 21:06:14 #25 №1334782 
>>1331358 (OP)
Тебе не язык другой нужен, а правильный алгоритм решения задачи. Задачу ты кстати не объяснил. Что вычисляет функция?
Аноним 25/01/19 Птн 22:30:35 #26 №1334857 
>>1334782
>Что вычисляет функция?
Коэффициент чоткости
Аноним 25/01/19 Птн 22:32:49 #27 №1334861 
ОП давно уже ушел в личку с быстро подскочившим анончиком, и скоро эти биржевые акулы завоюют Уолл Стрит.
comments powered by Disqus

Отзывы и предложения