[08:25:53] <ada_ru> (nordwnd) С Новым Годом!
[13:08:32] <ada_ru> (I_vlxy_I) отвечает (nordwnd) на <С Новым Годом!>
Год++
[13:09:15] <ada_ru> (I_vlxy_I) Year := @ + 1;
[13:15:24] <ada_ru> (I_vlxy_I) В метро всё ещё 2018 https://www.ada-ru.org/files/bot/x19.jpg
[13:16:45] <ada_ru> (Максим) 13 месяц просто
[13:17:40] <ada_ru> (I_vlxy_I) Надёжно! Интересно, сколько в нем дней?
[13:18:15] <ada_ru> (ScienteGenue) Это реклама как не надо писать. Было бы на аде с типом месяц 1..12, всё сложилось бы иначе!
[13:18:44] <ada_ru> (Борис) отвечает (I_vlxy_I) на <Надёжно! Интересно, …>
Как минимум, 32.
[13:19:45] <ada_ru> (I_vlxy_I) отвечает (Борис) на <Как минимум, 32.>
Ну, кстати да. Тип SET как раз на 32 элемента. Вот в нем зарубки и ставить.
[13:21:56] <ada_ru> (I_vlxy_I) И месяцев тогда тоже 32 в году!
[13:22:06] <ada_ru> (I_vlxy_I) А может и 16
[13:22:39] <ada_ru> (Борис) и в неделе должно быть 8 дней
[13:23:06] <ada_ru> (I_vlxy_I) Угу. Идеально!
[13:51:06] <ada_ru> (nitrocerber) Прост главе метро не принесли подснежников)
[14:00:40] <ada_ru> (I_vlxy_I) https://scontent.fhel6-1.fna.fbcdn.net/v/t1.0-9/49119158_1973716916057664_127525404448653312_n.jpg?_nc_cat=1&_nc_ht=scontent.fhel6-1.fna&oh=c9464bafc69a1504fb0dbc6466724135&oe=5CD822B4
[14:05:45] <ada_ru> (Борис) Поздравляем вас с наступающим 2019 годом! https://www.ada-ru.org/files/bot/x20.jpg
[17:05:24] <ada_ru> (t91x0) картинка https://www.ada-ru.org/files/bot/x21.jpg
[17:05:32] <ada_ru> (t91x0) Здесь вроде был кто-то из Барнаула
[17:35:52] <ada_ru> (coopht) Каждый из нас немножко из Барнаула
[17:44:37] <ada_ru> (nitrocerber) я там ток проездом был. аэропорт чистенький. и едальни на трассах безумно дешёвые и оч вкусные
[17:54:55] <ada_ru> (I_vlxy_I) А кто-нибудь в make with ada участвует?
[18:33:28] <ada_ru> (FROL256) Коллеги, сориентируйте меня пожалуйста в одном вопросе, я немного потерялся )
[18:33:35] <ada_ru> (FROL256) Суть такова: запускаю параллельно 8 задач.
Все они что-то считают и складывают числа в двумерный массив при помощи операции +=.
[18:33:42] <ada_ru> (FROL256) То есть у них один общий аккумулятор-двумерный-массив.
[18:33:49] <ada_ru> (FROL256) Рассчёт долгий, то есть складывают они не часто и вероятность коллизий не очень большая.
[18:33:56] <ada_ru> (FROL256) Как бы вы посоветовали реализовать блокировку.
[18:34:07] <ada_ru> (FROL256) 1) Сделать тип массива защищённым --- ИМХО не очень удобно, т.к. я не смогу напрямую обращаться к элементам массива в коде, придётся делать специальную процедуру, реализующую "+=", чтение и запись.
2) GNAT.Task_Lock.Lock/GNAT.Task_Lock.Unlock --- сделал пока через них, но меня смущает использование пакета GNAT. Не то чтобы я прямо переживал, но выглядит непереносимо.
3) Использование pragma Atomic_Components --- этот вариант мне больше всего нравится. Думаю перейти на него. Смущает что прагма, а не средство языка, но может и ладно.
4) Импортировать системные атомики --- это лучше всего в плане производительности, но мне в данной задаче не нужно. Не хочется тащить лишнюю "внешнею" функцилнальность.
[18:34:09] <ada_ru> (FROL256) Спс! )
[18:37:42] <ada_ru> (FROL256) ага, вообще отлично
[18:37:45] <ada_ru> (FROL256) atomic access to component of 'AccumBuff'; cannot be guaranteed atomic access to component of "AccumBuff" cannot be guaranteed
[18:38:06] <ada_ru> (FROL256) третье почему-то не работает
[18:39:15] <ada_ru> (FROL256) м.б. потому что массив структур ...
[18:42:30] <ada_ru> (I_vlxy_I) Массив структур не всегда хорошая идея с точки зрения производительности
[18:43:09] <ada_ru> (FROL256) это да, но там 3 флота в структуре
[18:43:12] <ada_ru> (FROL256) сойдёт
[18:43:39] <ada_ru> (FROL256) разбивать на 3 массива совсем неудобно в данном случае )
[18:44:21] <ada_ru> (FROL256) и прибавляются всегда все 3 компоненты
[18:50:40] <ada_ru> (t91x0) отвечает (FROL256) на <и прибавляются всегд…>
Так а куда идёт запись? В одну конкретную ячейку массива?
[18:52:20] <ada_ru> (Максим) А нарезать массив акамулятор по задачам чтобы вообще не блокировать не выйдет?
[18:54:04] <ada_ru> (FROL256) в одну заранее неизвестную. нарезать не выйдет да
[18:54:18] <ada_ru> (FROL256) в случайные ячейки вклад идёт
[18:54:37] <ada_ru> (t91x0) отвечает (FROL256) на <в одну заранее неизв…>
Сделать кучу мониторов блокировки на каждую строку массива
[18:54:40] <ada_ru> (Максим) Атомарность не поможет если += записывать как a(j) := a(j) + x;
[18:54:59] <ada_ru> (FROL256) хм, да, логично, спс
[18:55:37] <ada_ru> (FROL256) значит остаётся только 1,2 и 4 варианты
[18:55:59] <ada_ru> (FROL256) одна блокировка на весь массив норм, т.к. нечасто они пишут
[18:56:08] <ada_ru> (FROL256) по строчкам ИМХО излишне
[18:56:14] <ada_ru> (Максим) Сделать каждой задаче свой аккамулятор, а потом их все сложить...
[18:56:18] <ada_ru> (FROL256) да
[18:56:21] <ada_ru> (FROL256) так было
[18:56:29] <ada_ru> (FROL256) но это жрёт в 8 раз больше памяти
[18:56:39] <ada_ru> (FROL256) а массив может быть большой
[18:56:54] <ada_ru> (FROL256) поэтому я переделал в итоге )
[18:57:24] <ada_ru> (t91x0) А откуда берётся каждое очередное значение для сложения? Из этого же массива вычисляется?
[18:57:40] <ada_ru> (FROL256) вычисляется некоторой функцией, довольно долго
[18:57:53] <ada_ru> (FROL256) и прибавляется к старому значению в той же ячейке
[18:57:57] <ada_ru> (t91x0) На основе данных в массиве вычисляется?
[18:58:00] <ada_ru> (FROL256) нет
[18:58:03] <ada_ru> (FROL256) независимо
[18:58:17] <ada_ru> (FROL256) Монте-Карло игтегратор это
[18:58:53] <ada_ru> (t91x0) А нельзя ли это разбить на нечто вроде очереди, consumer-producers, где один consumer - сумматор, и 8 producer'ов - вычислителей.
[18:59:59] <ada_ru> (FROL256) я только вот что прочитал в книжке Гавва что так делать не тру и поэтомуц были придуманы защищённые типы ... ну в принципе то можно, но это всё как-то сложно выглядит
[19:00:37] <ada_ru> (FROL256) я бы не хотел усложнять если можно обойтись простой блокировкой тем более что на перф это ен влияет
[19:00:41] <ada_ru> (FROL256) потому что вычисленяи долгие
[19:01:23] <ada_ru> (t91x0) Можно ради интереса (сомнительного, правда), написать это же самое на Chapel'е
[19:03:05] <ada_ru> (Максим) Ну если скорость не поджимает, то протектед самое переносимое
[19:05:19] <ada_ru> (FROL256) понял, спс!
[20:53:40] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <Как бы вы посоветова…>
Жаль, что не Rust
[20:54:58] <ada_ru> (Максим) С растом в другой канал 😊
[20:55:16] <ada_ru> (username_is_not_avalaible) Просто для Rust есть rayon
[21:12:14] <ada_ru> (I_vlxy_I) Гопоязык :-)
[21:13:06] <ada_ru> (username_is_not_avalaible) docs.rs/rayon