|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчикТак ты никуда не деваешь многопоточку. Один запрос пишет в контейнер, а второй/третий/десятый запрос из него читает. Зачем? Контейнер тут не нужен. Паттерн Producer-consumer делается на очереди со строго очерёдным доступом к ней ровно на операцию добавления/выборки элемента, которая размером в пару ассемблерных команд. Мутекс и эвент - более чем достаточно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
бабушкин зайчикКакие другие задачи? Ты не поверишь, но настоящие приложения делают гораздо больше вещей одновременно, чем это делает студенческая лаба. Один поток принимает пакеты из сети, у него свои объекты, к которым больше никто не лезет. Пачка потоков обрабатывает принятые первым запросы, выбирая их из вышеописанной очереди и у каждого из них свои личные объекты, нужные им для работы. Ещё один-два потока осуществляют фоновую работу по расписанию и они опять же замкнуты в себе. Число объектов с общим доступом минимально и разводить их читателей с писателями не имеет смысла, простого мутекса хватает. бабушкин зайчикесли это mutex-блокировка, почему так и не назвать? Потому что термин "mutex-блокировка" был выдуман тобой и никто больше его не знает. Зато многие в курсе TIL "serializable", который был назван как раз в честь сериализации доступа к данным. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:04 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton Concurrency - плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:04 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton, т.е. предлагаешь разбить контейнер на X контейнеров, и с каждым работать отдельным потоком? А куда и как их мержить потом - не понял? В каждом запросе чтоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:06 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton, т.е. предлагаешь разбить контейнер на X контейнеров, и с каждым работать отдельным потоком? А куда и как их мержить потом - не понял? В каждом запросе чтоли? Ну смотри. Если у тебя контейнер содержит финансовую величину. Объем выручки за день. А все потоки - считают кассовую ленту за день. То зачем тебе конкурировать в рил-тайме когда можно спокойно в каждом потоке посчитать свой кассовый аппарат а потом просуммировать итог. Я просто сумму в качестве примера привел. Разумеется пример с кассой - тоже сферический. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:09 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton, Конечно. Можно на стол поставить один казанок на семью. А можно каждому по тарелке. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:11 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Зачем? Контейнер тут не нужен. Паттерн Producer-consumer делается на очереди со строго очерёдным доступом к ней ровно на операцию добавления/выборки элемента, которая размером в пару ассемблерных команд. Затем, что элементы в контейнере находятся. Producer/Consumer отправляет объект в специальную коллекцию, которая основана на BlockingQueue. А потом раздаёт их желающим... Ну и как туда заслать ячейки из контейнера? Да так, чтобы в них ничего не записало параллельно? Ежели туда слать ссылку на весь контейнер, то это тоже не решает проблему чтения ячейки во время записи. Dimitry Sibiryakov Потому что термин "mutex-блокировка" был выдуман тобой и никто больше его не знает. Зато многие в курсе TIL "serializable", который был назван как раз в честь сериализации доступа к данным. Любому скажи mutex и он поймёт, что речь о блокировках. Не надо ля-ля. А вот то что ты "блокировку записи во время чтения" не можешь "уровнем изоляции" назвать - это проблема. Да они вообще из БД, зачем они тут, где mutex обсуждают?! Dimitry Sibiryakov Число объектов с общим доступом минимально и разводить их читателей с писателями не имеет смысла, простого мутекса хватает. т.е. всё-таки 1 поток = 1 контейнер и на каждую операцию r/w блокировка?? Dimitry Sibiryakov Ты не поверишь, но настоящие приложения делают гораздо больше вещей одновременно, чем это делает студенческая лаба тебе 40 то есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:55 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton бабушкин зайчик mayton, т.е. предлагаешь разбить контейнер на X контейнеров, и с каждым работать отдельным потоком? А куда и как их мержить потом - не понял? В каждом запросе чтоли? Ну смотри. Если у тебя контейнер содержит финансовую величину. Объем выручки за день. А все потоки - считают кассовую ленту за день. То зачем тебе конкурировать в рил-тайме когда можно спокойно в каждом потоке посчитать свой кассовый аппарат а потом просуммировать итог. Я просто сумму в качестве примера привел. Разумеется пример с кассой - тоже сферический. да это простейший пример, который пойди найди ещё в реальном мире каждый кассовый аппарат живёт своей жизнью и никак не взаимодействует с другими а вот контейнеры постоянно друг с другом пересекаются, и читать надо из разных, и писать надо в разные... приходит запрос - прочитай отсюда и оттуда, запиши сюда и туда... а потом ещё агрегировать данные из них в одном общем месте ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 18:59 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton, а что просто, для начала, нормальный алгоритм не поискать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 19:05 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчик а вот контейнеры постоянно друг с другом пересекаются, и читать надо из разных, и писать надо в разные... приходит запрос - прочитай отсюда и оттуда, запиши сюда и туда... а потом ещё агрегировать данные из них в одном общем месте Вот капец я вообще не понимаю почему они обязательно пересекаются? Кто это решил? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 19:13 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчик т.е. всё-таки 1 поток = 1 контейнер и на каждую операцию r/w блокировка?? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 19:20 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчик контейнеры постоянно друг с другом пересекаются, и читать надо из разных, и писать надо в разные... приходит запрос - прочитай отсюда и оттуда, запиши сюда и туда... а потом ещё агрегировать данные из них в одном общем месте ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 19:21 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton Но какого размера брать слой? В современных условиях можно просто не выёживаться. Для начала. А то получится как со скоростью xxhash, которая может превышать скорость чтения из памяти. Но там автор честно указывает, что "данные такого размера находятся в процессорном кэше". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 19:46 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton бабушкин зайчик а вот контейнеры постоянно друг с другом пересекаются, и читать надо из разных, и писать надо в разные... приходит запрос - прочитай отсюда и оттуда, запиши сюда и туда... а потом ещё агрегировать данные из них в одном общем месте Вот капец я вообще не понимаю почему они обязательно пересекаются? Кто это решил? ну на чтение они пересекаются, когда надо показать данные из разных контейнеров на одном экране, например если прошла встреча с клиентом, то надо поставить отметку в контейнер встреч затем поставить отметку в контейнер клиентов по итогу встречи ещё поставить отметку в контейнер логов т.е. они будут все заблокированы... А значит в агрегации данных кто-то будет ждать... и в клиентах будут ждать, и в логах ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 20:04 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Встречи. Клиенты. Ты оперируешь временнЫми интервалами которые в миллион раз превышают то что мы тут обсуждаем? Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 20:14 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
да это просто пример контейнеров в разы больше, чем эти 3 а запросов может быть много тысячи в секунду, десятки тысяч и при этом, как я уже говорил, можно искусственно создать нагрузку на запись ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 20:19 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчикну на чтение они пересекаются, когда надо показать данные из разных контейнеров на одном экране, например Не надо. Контейнер для отображения на экране целиком и безраздельно принадлежит потоку, обрабатывающему GUI и сообщения о том, что "прошла встреча" и "выставлена оценка", которые, по его меркам, приходят в час по капле. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 20:23 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Подкину немножко. Для перемножения больших матриц по-хорошему надо использовать алгоритм Штрассена . ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 20:44 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру с кешом. Какие будут предложения? Транспонировать Б и поменять местами X и Y при определении координат элемента. PS Нас же не смущает что координаты точек экрана идут из верхнего левого угла вниз, а в алгебре/геометрии - вверх. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 20:50 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dima T mayton Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру с кешом. Какие будут предложения? Транспонировать Б и поменять местами X и Y при определении координат элемента. PS Нас же не смущает что координаты точек экрана идут из верхнего левого угла вниз, а в алгебре/геометрии - вверх. +1 да. Это первый шаг. Линеаризировать доступ. И как справедливо заметил Василий... чортовы кеши. Надо укладывать хотя-бы 1 слой умножений в L2. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 21:27 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Вот фрагмент спеки железа актуального на 2018 год (это мой AMD). Код: plaintext 1. 2. 3. 4. 5. 6.
512 килобайт L2 - это примерно соответсвует вектору double длиной 64 тыщи элементов. И еще надо заложить минимум 3 слоя. А.B.C. Тоесть поделить на 3. Подровнять под кеш-линии и округлить правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 21:36 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 21:58 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton, тут ещё вопрос, стоит ли перебирать грубой силой грузить 30 ядер алгоритмом O(N^3) или быстрее будет на одном проце посчитать O(N^log2(7)) как бы с ростом N непонятно кто выиграет ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 22:07 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Это такая-себе софистическая задачка. Она идёт тестовым учебным примером в tutorials по OpenMP. Ее также упоминает Грегори Эндрюс в своей книге по параллелизму. Нужно ли выкинуть брутфорс и взять другой алгоритм? Я не знаю. Собсно матричное умножение это не основная тема топика. Я просто хотел баб-зайчику показать как глубоко можно углубиться в задачу и где параллелизм полезен и где лишняя коннкуренция вредна. Я не против всяких Штрассенов. Просто это уже плоскость математики а я там не силён. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 22:21 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
хм, если у интелов кэш измеряется в мегабайтах, значит ли это, что они nodoubt лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 22:27 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp бабушкин зайчик контейнеры постоянно друг с другом пересекаются, и читать надо из разных, и писать надо в разные... приходит запрос - прочитай отсюда и оттуда, запиши сюда и туда... а потом ещё агрегировать данные из них в одном общем месте такого сорта "субд" в конце 90х - середине 2000-х уже один раз не взлетели. Пока не видно никаких причин, по которым они могли бы попытаться взлететь повторно. Для этого есть существенное основание - субд вообще с другого конца начинаются. Не только не с "контейнеров", но даже и не с "объектов", по крайней мере в оо-смысле. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 22:37 |
|
|
Start [/forum/topic.php?fid=57&msg=40107560&tid=2017148]: |
0ms |
get settings: |
16ms |
get forum list: |
9ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
50ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
566ms |
get tp. blocked users: |
0ms |
others: | 312ms |
total: | 959ms |
0 / 0 |