|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
(Форварднул с другого топика) Давайте я предложу искусственную синтетическую постановку. И вы увидете как ее невозможно просто сделать идеальной без цифр. Даны две матрицы вещественных чисел. A и B. Одинаковой размерности. Их надо перемножить. По правилам матриц. Тоесть первая стока матрицы A уможается почленно на столбец матрицы B. И вектор суммируется. Результат записывается в элемент матрицы С. И так далее для всех комбинаций строки А и столбца B. Шаблон кода на сях. Код: plaintext 1. 2. 3. 4. 5. 6.
Это - классика параллелизма. И ее часто приводят в качестве тестовой задачи чтобы показать как может быть проста постановка и какая может быть сложная реализация если глубоко копнуть. ==== Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру с кешом. Какие будут предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:21 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonсамый первый камень - это как распараллелить. Самый простейший путь - распределением столбцов B между потоками. maytonОсобенно с учотом того что доступ к матрице Б идет неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру с кешом. Сделать алгоритм "кэш-дружелюбным" это отдельная задача, к многопоточности отношения не имеющая. Решается предварительным транспонированием В. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:23 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Архитектура зеленых потоков Каждая таска берет себе кусочек из каждой из матриц и бегает по матрице последовательно Возможно потребуется транспонирование ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:24 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Хорошая идея с транспонированием. Но с какого размера матриц? 10х10 надо транспонировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:25 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру с кешом. смотрю ты тоже не фанат ставить задачу чётко и ясно что значит "неблагоприятным образом"? а "неудачная игра с кешом" - какие предпосылки? Я предлагал изолировать матрицы A и B (если в них могут писать), путём копирования их внутрь перемножающей ф-и, которая возвращает C. Это должно быть быстрее (и надёжнее), чем блокировать/разблокировать каждый столб/строку в живой матрице (либо обе матрицы целиком), куда могут записать в соседний столб, а потом записать в посчитанный столб... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:28 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Правда не понимаешь? Ну вот в цикле обхода матрицы B мы несколько раз обходим ее "по столбцам". Матрица - любого размера. Может быть 100х100. 1000х1000. Неважно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:34 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton10х10 надо транспонировать? 10x10 не надо даже распараллеливать. И 100х100 тоже не надо. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:38 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov mayton10х10 надо транспонировать? 10x10 не надо даже распараллеливать. И 100х100 тоже не надо. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:39 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
А когда надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:41 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton Правда не понимаешь? Ну вот в цикле обхода матрицы B мы несколько раз обходим ее "по столбцам". Матрица - любого размера. Может быть 100х100. 1000х1000. Неважно. понятно, что любого размера. Но легче от этого не станет, если ты её всю заблокируешь на время перемножения. Она просто будет дольше ни для кого недоступна. А насчёт "несколько раз" - возможно есть смысл все столбы сложить в один контейнер - последовательно, а строки - в другой. Поскольку известен размер столба, это не будет проблемой. Я не занимался матрицами, как-то не приходилось, так - мысли вслух... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:42 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:43 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
maytonА когда надо? Когда скорости однопоточного перемножения реально не хватает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:49 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Спасибо. Данный пост является просто примером к родительскому топику. Примером того что мы не сможем обсудить сферический лок в вакууме без дополнительных сведений. Быть может без примера того как много потоков будут хотеть получить этот лок. И без описания типичного железа. Что это? Серверный Xeon с 4-головами и 24 тредами? Или просто ней-то ноутбучик? И без понимания полезной работы мы тоже не придумаем ничего. Вот если-бы зайчик сказал что в каждом контейнере лежит например счетчик. Или JSon документ. Или матрица чисел и мы что-то с ней будем делать - вот тогда и пойдут более полезные предложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 15:52 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton И без понимания полезной работы мы тоже не придумаем ничего. Вот если-бы зайчик сказал что в каждом контейнере лежит например счетчик. Или JSon документ. Или матрица чисел и мы что-то с ней будем делать - вот тогда и пойдут более полезные предложения. да говорил я, что что угодно может лежать - от int, до string соот-но, есть контейнеры с цифрами, есть с документами (строками), есть и матрицы, и что угодно но достаточно хотя бы цифры и строки рассмотреть На самом деле сабж уже перерос в более глобальную проблему - как вообще закрыть вопрос о многопоточной конкурентной работе с контейнерами? Многопоточно не получается. Слишком много костылей и геморроя. Причём бывалые утверждают, что даже корутины не спасут... даже при том, что их выбрал гугл... Предложил многопроцессорно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 16:10 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчикНа самом деле сабж уже перерос в более глобальную проблему - как вообще закрыть вопрос о многопоточной конкурентной работе с контейнерами? Лучший способ - полным её избеганием. Простейший способ - полной её сериализацией. Остальные способы - только если эти два обломались по каким-то причинам. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 16:14 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov бабушкин зайчикНа самом деле сабж уже перерос в более глобальную проблему - как вообще закрыть вопрос о многопоточной конкурентной работе с контейнерами? Лучший способ - полным её избеганием. однопоточно? Dimitry Sibiryakov Простейший способ - полной её сериализацией. авторСериализация (в программировании) — процесс перевода структуры данных в последовательность байтов. а это как тут применить? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 16:16 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчикоднопоточно? Да. Другие потоки могут заниматься совсем другими задачами. бабушкин зайчика это как тут применить? Никак. Гугли другие значения этого слова. Похожие на "строгая очерёдность". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 16:18 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton, 1) i-я колонка матрицы C зависит от всей матрицы A и от i-й колонки матрицы B. Как бы если бы матрица A состояла из столбцов, каждый есть результат умножения матрицы на столбец. Сколько есть потоков (n), столько и считают каждый свою колонку, после чего берут колонку на n больше если она есть и так далее. 2) i-я строка матрицы C зависит от i-й строки матрицы A и от всей матрицы B. Как если бы матрица A состояла из строк, каждая есть результат умножения строки на матрицу. Далее с потоками по аналогии. С распараллеливанием-то просто, вопрос с кешированием матрицы. Скорее всего лучше отдать предпочтение строчному варианту. В обоих случаях надо дергать какую-то одну из матриц целиком, но во втором случае можем отрабатывать построчно хотя бы матрицы C и A. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 16:44 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Мы можем множить матрицы "слоями". Это естественным образом вытекает из самой формулы умножения. Но какого размера брать слой? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 16:47 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton И без понимания полезной работы мы тоже не придумаем ничего. Вот если-бы зайчик сказал что в каждом контейнере лежит например счетчик. Или JSon документ. Или матрица чисел и мы что-то с ней будем делать - вот тогда и пойдут более полезные предложения. да говорил я, что что угодно может лежать - от int, до string Давай еще поговорим про жесткий синхронизм и спрведливость доступа. Допустим внутри контейнера лежит string в котором - XML документ. И работают с ним 10 Threads. Они - периодически захватывают контейнер и что-то добавляют в документ. Возможно - обновляют. Поскольку операция работы с XML-документом сложная и комплексная - его надо парсить и сериализовать - то я вангую что время работы с документом будет порядка нескольких милисекунд. Например 20 мс. За эти 20 мс прочие 9 потоков могут встать в ожидание. Актуальный вопрос - кто первый получит доступ? Технически - любой. Это не зависит от того кто кто раньше встал в монитор. Грубо говоря у данного mutex нет fairness. Это ставит от меня следующий вопрос. Мы в задании заявили строгую синхронность. Это - правда. By design. Но вот в чем штука. Зачем нам требования строгой синхронности если у нас все равно нет справедливости в дележе этого контейнера. Это вопрос - более философский чем технический. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 17:02 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
mayton, задача хорошо параллелится когда она матрешка, например, делимая пополам. Например, представляя большую матрицу в блочном виде, параллели, в первую очередь, можно натравливать на вычисление произведений блоков. Стоит ли параллелить сумматор - это отдельный вопрос, наверно можно и его. В таком взгляде ответ на вопрос "когда пришла пора параллелить", вероятно, может звучать так: не раньше чем появился смысл в переходе к поблочному умножению ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 17:04 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Да. Другие потоки могут заниматься совсем другими задачами. Параллелить нужно не доступ к одному ресурсу. А множить единицы работы. А чтобы кинуть 500 землекопов на одну яму много ума не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 17:15 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov бабушкин зайчикоднопоточно? Да. Другие потоки могут заниматься совсем другими задачами. Так ты никуда не деваешь многопоточку. Один запрос пишет в контейнер, а второй/третий/десятый запрос из него читает. Какие другие задачи? Всё по-честному - 2 разных задачи. Получается нужна блокировка. И где тут однопоточка? "Множить единицы задач" - КАК, когда речь о контейнерах? Выдать одному потоку 1 контейнер? Dimitry Sibiryakov бабушкин зайчика это как тут применить? Никак. Гугли другие значения этого слова. Похожие на "строгая очерёдность". ничего я не нашёл, в т.ч. и по "многопоточная сериализация" там всё про обычную сериализацию. Загадочная "сериализация многопоточной конкурентной работы с контейнерами"... если это mutex-блокировка, почему так и не назвать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 17:33 |
|
Ускорить умножение квадратных матриц (продолжение темы с mutex)
|
|||
---|---|---|---|
#18+
Есть concurrency. И есть параллелизм . Вот задача умножения матриц - это про параллелизм. Это - хоршо. Это - good. А задача где много потоков сталкиваются в попытке обновить 1 поле - это concurrency. Concurrency - плохо. От нее избавляются обычно. Как? Пересмотром постановки задачи обычно. Просто если мы уже докатились до ситуации что 10 или 100 потоков обновляют текстовое поле - что-то у нас уже не в порядке. Поэтому я вот сопротивляюсь самой изначальной идее. Я ищу причины. В том примере что я привел. У нес есть 10 потоков и некий кумулятивный документ в контейнере мютекса. Если логика позволяет то мы должны были создать 10 потоков и 10 локальных документов. А по завершению работы всех - спокойно смёржить все 10 документов в 1. Разумеется если логика позволяет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 17:56 |
|
|
Start [/forum/topic.php?fid=57&msg=40107424&tid=2017148]: |
0ms |
get settings: |
17ms |
get forum list: |
16ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
48ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
526ms |
get tp. blocked users: |
0ms |
others: | 299ms |
total: | 914ms |
0 / 0 |