[03:24:33] <L29Ah> КАПЧЯ
[10:37:18] <ada_ru> (nitrocerber) #2 2018-11-25 14:15
xxx: кто-нибудь может показать реальные проекты на Аде где-нибудь на гитхабе или соусфордж?
yyy: реальные проекты на Аде распространялись на 8 дюймовых дискетах
zzz: реальные проекты на Аде распространялись по баллистическим траекториям.

шутники блед
[12:45:07] <ada_ru> (Sergei)  отвечает (t91x0) на <Абсолютно верно пишу…>
Ну, если падает производительность, то для таких задач лучше в ручную. В субботу переписал программу поиска простых чисел с C++ на Chapel. Раз в 10 упала производительность. А при запуске параллельных задач (предположительно "лёгких потоков") вообще немысленно. Так что, высокоуровневые языки для распараллеливания - это, вероятно, пока выдача желаемого за действительное.
[13:41:33] <ada_ru> (I_vlxy_I) оно для удобства и для производительности. программиста 😊
[13:41:41] <ada_ru> (I_vlxy_I) также как всякие SQL
[14:05:59] <ada_ru> (Sergei)  отвечает (I_vlxy_I) на <оно для удобства и д…>
Брр. То есть, речь идёт о суперкомпьютерах стоимостью миллионы-миллиарды, на которых мы нанимаем программистов, удобство которых ставим выше производительности? Интересная тема подискутировать.
[14:06:38] <ada_ru> (Sergei) Я считаю, что, в частности, C++ предоставляет отличные средства для "удобства" без снижения производительности
[14:07:17] <ada_ru> (Sergei) В плане провести бенчмарки моей программы поиска простых чисел на Аде и Go. Кто хочет - присоединяйтесь.
[14:08:21] <ada_ru> (I_vlxy_I) Ада должна зарулить тут.
[14:08:40] <ada_ru> (I_vlxy_I) не сильно, раза в джва.
[14:08:58] <ada_ru> (Sergei) Да, Chapel, безусловно, интересный язык, но мне важно понять, сейчас, его медлительность в данном примере 1) временная недоработка 2) концептуальная 3) на Cray всё зашибись, а Intel - не target архитектура
[14:09:25] <ada_ru> (Sergei) Я выложу на github свой пример с комментариями
[14:10:16] <ada_ru> (Sergei) Мне интересно поднять производительность распараллеливанием
[14:10:22] <ada_ru> (Sergei) пока не удалось
[14:11:16] <ada_ru> (Sergei) с другой стороны, это конечно круто, что на Chapel ему всё равно, на одном компьютере или на клястере - минимально меняется программа
[14:11:38] <ada_ru> (Sergei) но, получается, я обгоняю клястер на chapel на одном компе и C++
[14:11:43] <ada_ru> (I_vlxy_I) оно, вероятно, именно под кластер и заточено. на одном узле/компе оно может работать медленней.
[14:11:57] <ada_ru> (I_vlxy_I) то есть фишка может быть в масштабируемости.
[14:12:11] <ada_ru> (I_vlxy_I) обычная тема для таких решений
[14:12:39] <ada_ru> (I_vlxy_I) то есть они хороши когду у тебя задача требует кластера и когда задача конкретно сложная, а не микробенчмарк.
[14:13:38] <ada_ru> (Sergei) Ну, могу попробовать с рэй трейсером, но сначало надо понять, в чём узкие места, которые так круто поймал мой микробенчмарк
[14:17:55] <ada_ru> (Sergei) Там, кстати, один из таргетов у Чапел - Intel Xeon Phi. Вот только непонятна политика Intel, они вроде отказываются уже от этой архитектуры
[14:19:18] <ada_ru> (Sergei) Чапел генерит промежуточный С код, его можно посмотреть. И он ужасен.
[14:23:55] <ada_ru> (I_vlxy_I) сгенереный код и должен быть ужасен
[14:24:06] <ada_ru> (I_vlxy_I) не для чтения глазами генерится 😊
[14:44:24] <ada_ru> (t91x0)  отвечает (Sergei) на <Ну, могу попробовать…>
Я думаю, какой-нибудь random forest на чапеле будет работать уже вровень с с++
[15:31:15] <ada_ru> (Максим)  отвечает (Sergei) на <В плане провести бен…>
Давай я тебе на OpenCL заструячу!  😊
[15:39:29] <ada_ru> (Sergei)  отвечает (Максим) на <Давай я тебе на Open…>
Давай. Я тебе кину гитхаб линку, когда код туда выложу.
[16:01:30] <ada_ru> (Максим) А в чём задача состоит?
[16:02:11] <ada_ru> (Sergei) Просто поиск простых числел. Я печатаю последовательно, по мере того, как нахожу: 2, 3, 5, 7, ...
[16:03:41] <ada_ru> (Максим) Хм, помойму на печеть уйдёт больше времени чем на поиск :)
[16:04:15] <ada_ru> (Sergei) да вроде нет. Хотя я сравню время без печати ещё
[16:05:19] <ada_ru> (Sergei) я запускал с перенаправлением в /dev/null
[16:05:44] <ada_ru> (Sergei) не похоже, что на печать в /dev/null уходило время
[16:05:45] <ada_ru> (Максим) С решетом Эратосфена?
[16:05:55] <ada_ru> (Sergei) Ну почти.
[16:06:12] <ada_ru> (Sergei) Как ты думаешь последовательно искать с решетом?
[16:06:33] <ada_ru> (Sergei) в классическом решете все ответы находятся в последний момент
[16:06:38] <ada_ru> (Sergei) а у меня - последовательно
[16:06:42] <ada_ru> (Максим) строишь решето по мере роста последовтельности. а как еще?
[16:07:21] <ada_ru> (Sergei) Достаточно взять циклический буфер размерности корень квадратный от макс. простого числа, до которого ты выводишь последовательность
[16:07:37] <ada_ru> (Sergei) можно ещё разделить пополам, но это не обязательно
[16:07:49] <ada_ru> (t91x0) В чапеле есть распределённая обработка матриц, например - умножение. Чтобы сделать на с++ подобное, нужно как-то изрядно извернуться, раскидать вручную обработку по куче машин.
[16:08:02] <ada_ru> (Максим) и делить потом? В решете вроде деления нет вообще
[16:08:13] <ada_ru> (Sergei)  отвечает (t91x0) на <В чапеле есть распре…>
Ну, наверняка есть либы для этого
[16:09:32] <ada_ru> (Sergei)  отвечает (Максим) на <и делить потом? В ре…>
мне придётся написать алгоритм
[16:10:17] <ada_ru> (Sergei) там есть неочевидные моменты, долго объяснять
[16:10:31] <ada_ru> (Sergei) я кину ссылку
[16:16:06] <ada_ru> (Sergei) но вкратце. идёшь по буферу по кругу. Каждый шаг состоит из очистки последней ячейки и переходу к следующей. Каждая ячейка - это массив переменной ёмкости макс размерности  10 (как вычислить это число - расскажу позже). Ты проходишь по этому массиву, достаёшь числа и дополняешь их к массиву в ячейке буфера на это самое число вперёд. Так ячейка очищается. Далее переходишь к следующей. Если в ней пустой массив - ты нашёл простое число. Если это число меньше размерности циклического буфера (корень макс. числа, делённый на 2)- заносишь его в ячейку.
[16:17:21] <ada_ru> (Sergei) простейшее распараллеливание строится на забивании каждой 3, 5, 7 .., p. ячейки буфера . Теперь ты гарантированно можешь использовать p потоков
[16:19:09] <ada_ru> (I_vlxy_I) тут еще штука такая, что чапель мог тормозить именно своим stdout'ом.
[16:19:17] <ada_ru> (Sergei) более тонкое распараллеливание - в шаге 1 обработка всего динамического массива (1..10 зелёных потоков)
[16:19:19] <ada_ru> (I_vlxy_I) кто ж его знает что у них там io либа такая
[16:19:20] <ada_ru> (I_vlxy_I) например
[16:19:31] <ada_ru> (Sergei)  отвечает (I_vlxy_I) на <кто ж его знает что …>
да, я проведу эксперимент без io
[16:19:52] <ada_ru> (Sergei) но по мере увеличения чисел на вывод тратится всё меньше и меньше
[16:19:57] <ada_ru> (Sergei) и потом это не играет роли
[16:20:11] <ada_ru> (Sergei) увеличивается дистанция между числами постоянно
[16:20:32] <ada_ru> (Sergei) при достаточно больших последовательностях не должно играть роли время вывода
[16:21:29] <ada_ru> (Sergei)  отвечает (Максим) на <и делить потом? В ре…>
Понятен алгоритм на пальцах?
[16:22:13] <ada_ru> (Sergei) ты строишь решето по оси времени, а не сразу от начала до конца для каждого простого
[16:44:17] <ada_ru> (Максим) надо подумать
[16:59:02] <ada_ru> (Sergei) вот серия последовательных состояний циклического буфера, чтобы было понятно

|||||||||||||||||||||||||  (1)
||2|||||||||||||||||||||   (2)
print 3
|2||3||||||||||||||||| (4)
||3,2|||||||||||||||||  (5)
print 5
|3,2||||5||||||||| (6)
||2|3|5|||||        (7)
print 7
|2|3|5||||7|||  (8)
|3|5,2||||7|||| (9)
|5,2||3||7|||| (10)
||3,2||7|5|||| (11)
print 11
|3,2||7|5||||| (12)
||7,2|5,3||||    (13)
print 13
[17:00:18] <ada_ru> (Sergei) каждое число, когда "съедается" слева переносится на соответствующее ему количество ячеек вперёд. Если там уже что-то есть, добавляется.
[17:02:54] <ada_ru> (Sergei) после sqrt(N) простые числа уже не добавляются в буфер
[17:03:27] <ada_ru> (Sergei) т.е., если ты хочешь вывести до 100, то 11 уже можно не добавлять а в буфере достаточно иметь 10 ячеек
[17:06:00] <ada_ru> (Sergei) потому, что в любом числе < 100, в котором будет входить 11, оно будет входить как произведение на простое число, меньшее 11, а оно уже и так учитывается
[17:21:02] <ada_ru> (Sergei) Когда станет понятно, расскажу, как можно распараллелить
[17:26:15] <ada_ru> (Sergei) это жёсткий тест, так как параллельность АЛУ тут до лампочки. Нужна параллельность (одновременность) работы с разными ячейками памяти
[17:31:47] <ada_ru> (I_vlxy_I) главное чтобы эти ячейки памяти были достаточно далеко друг от друга. особенно если в них пишут.
[17:33:26] <ada_ru> (Sergei) ну, тут есть некоторая локализация, но проблема у Intel, если я правильно себе представляю, может быть даже с кэшем первого уровня. он может одновременно использоваться ядрами, или есть блокировки?
[17:33:52] <ada_ru> (Sergei) тут ядра должны использовать соседние ячейки одновременно
[17:34:25] <ada_ru> (Sergei) не первого уровня, а общим кэшем данных для ядер
[17:40:46] <ada_ru> (I_vlxy_I) если кэш будет регулярно инвалидироваться - это будут конкретные тормоза. то есть если кто-то запишет в ячейку рядом с той, которую ты читаешь, то твой кеш инвалидируется и жди пока снова тебе приедет значение этой же ячейки с тем же значением.
[17:41:00] <ada_ru> (Sergei) именно так и будет
[17:41:13] <ada_ru> (I_vlxy_I) это будут тормоза
[17:41:21] <ada_ru> (Sergei) на Intel однозначно
[17:41:27] <ada_ru> (I_vlxy_I) на amd тоже
[17:41:39] <ada_ru> (Sergei) а какая разница, это одно и то же почти
[17:41:55] <ada_ru> (Sergei) нужен по настоящему параллельный процессор
[17:41:57] <ada_ru> (I_vlxy_I) да и на ibm power pc скорее всего тоже да. короче, везде где есть кеши.
[17:42:01] <ada_ru> (Sergei) с параллельной памятью
[17:42:18] <ada_ru> (Sergei) а лучше PIM
[17:42:22] <ada_ru> (I_vlxy_I) тебе нужен просто максимально примитивный процессор с быстрой одноуровневой памятью.
[17:42:32] <ada_ru> (I_vlxy_I) многоядерный микроконтроллер без кешей - норм
[17:43:05] <ada_ru> (Sergei) да, это так. Но тесты говорят, что тормозят языки ещё до того, как вылазит проблема с кешем
[17:43:16] <ada_ru> (Sergei) жду теста Ады :)
[17:43:34] <ada_ru> (Sergei) интересно посмотреть Go
[17:44:44] <ada_ru> (I_vlxy_I) а что Go? Go никогда не заявлялся как нечто, где будет очень круто распараллеливать проги.
[17:45:12] <ada_ru> (Sergei) Ну, есть такое мнение, мне надо это проверить.
[17:45:20] <ada_ru> (I_vlxy_I) Оно ж для concurrency а не для parallelism'а
[17:45:46] <ada_ru> (Sergei) а что для параллелизма остаётся, кроме C++ и Ады?
[17:46:42] <ada_ru> (I_vlxy_I) GPU!
[17:46:48] <ada_ru> (t91x0) Фортран
[17:46:50] <ada_ru> (nitrocerber) Парасолька!
[17:46:51] <ada_ru> (I_vlxy_I) ТУДА!
[17:47:00] <ada_ru> (I_vlxy_I) СЮДА!
[17:47:09] <ada_ru> (Sergei) Вот и проверим
[17:47:27] <ada_ru> (Sergei)  отвечает (t91x0) на <Фортран>
GNU подойдёт?
[17:47:43] <ada_ru> (I_vlxy_I) причем паралелизм можно, грубо говоря на разных ядрах, а можно и на одном через SIMD. В каком-то смысле.
[17:47:49] <ada_ru> (I_vlxy_I) прирост до 4x!
[17:47:51] <ada_ru> (t91x0)  отвечает (Sergei) на <GNU подойдёт?>
Лучше уж сразу интеловский
[17:48:09] <ada_ru> (Sergei) эх, мне надо не intel программировать
[17:48:59] <ada_ru> (t91x0) Мне кажется, это в тему обсуждения
[17:49:00] <ada_ru> (t91x0) <прислал фото>
[17:49:20] <ada_ru> (Sergei)  отвечает (t91x0) на <Мне кажется, это в т…>
5 баллов :)
[18:00:05] <ada_ru> (Sergei) Кстати, докопался почему после 90-х так много процессоров альтернативных Intel ушло в небытие
[18:00:56] <ada_ru> (Sergei) это было связано с японским компьютером "5 го поколения" который "не взлетел"
[18:02:24] <ada_ru> (Sergei) американцы очень перепугались, пустили кучу гос денег на выработку альтернатива и, за неимением времени, решили делать суперкомпьютеры путём объединения в клястер отдельных компьютеров, которые уже есть. Так Intel процессоры с громадным бустом заняли серверный рынок
[18:06:22] <ada_ru> (Sergei) эта тенденция продолжается - сейчас у них есть план построить очередного лидера top500 путём объединения сетью двух прошлых лидеров. Но это работает далеко не на всяких задачах.
[18:19:53] <ada_ru> (I_vlxy_I)  отвечает (t91x0) на <>
А если в Excel? 😊
[18:21:25] <ada_ru> (Sergei)  отвечает (I_vlxy_I) на <А если в Excel? 😊>
это уже middle менеджмент уровень
[18:22:33] <ada_ru> (I_vlxy_I) ну, вообще говоря, статистический анализ всякий и прочее подобное в excel'e вполне возможно делать. то есть ML там тоже вполне возможен.
[18:23:01] <ada_ru> (Sergei)  отвечает (I_vlxy_I) на <ну, вообще говоря, с…>
но ты говоришь как менеджер
[18:23:59] <ada_ru> (I_vlxy_I) так плохо говорю?
[20:42:14] <geniepro> Sergei) Да, Chapel, безусловно, интересный язык

вы ещё Sisal вспомните, тоже крутой язык для распараллеливания автоматического, сишечку рвал на тестах, хотя использовал кодогенерацию в си
ещё и синтаксис паскалеподобный, для адовцев почти родной )))
[20:55:26] <geniepro> если делаете числодробилки -- юзайте фортран, с++ так и не смог его подвинуть в науке
[20:56:50] <ada_ru> (I_vlxy_I) подвинуть - смог. и питон тоже смог
[20:56:53] <ada_ru> (I_vlxy_I) полностью заменить везде - нет
[20:57:18] <geniepro> I_vlxy_I) тут еще штука такая, что чапель мог тормозить именно своим stdout'ом.

на фоне операций с памятью вывод инфы уже такая мелочь, что не должно влиять больше, чем на доли процента
[20:58:04] <ada_ru> (I_vlxy_I) это может инвалидировать кэш полностью. и постоянно дергать системные вызовы.
[20:58:45] <geniepro> да там по-любому будут постоянные промахи кеша, особенно в распределённой на кластер версии