powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ускорить умножение квадратных матриц (продолжение темы с mutex)
25 сообщений из 165, страница 1 из 7
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107415
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Форварднул с другого топика)

Давайте я предложу искусственную синтетическую постановку.

И вы увидете как ее невозможно просто сделать идеальной без цифр.

Даны две матрицы вещественных чисел. A и B. Одинаковой размерности. Их надо перемножить. По правилам
матриц. Тоесть первая стока матрицы A уможается почленно на столбец матрицы B. И вектор суммируется.
Результат записывается в элемент матрицы С. И так далее для всех комбинаций строки А и столбца B.

Шаблон кода на сях.

Код: plaintext
1.
2.
3.
4.
5.
6.
double *A = ....
double *B = ....

double *C; // result will be here

// multiply




Это - классика параллелизма. И ее часто приводят в качестве тестовой задачи чтобы показать как может
быть проста постановка и какая может быть сложная реализация если глубоко копнуть.


====

Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет
неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру
с кешом.

Какие будут предложения?
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107420
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonсамый первый камень - это как распараллелить.

Самый простейший путь - распределением столбцов B между потоками.

maytonОсобенно с учотом того что доступ к матрице Б идет
неблагоприятным образом. Вертикальное сканирование double элементов - создает
крайне неудачную игру с кешом.

Сделать алгоритм "кэш-дружелюбным" это отдельная задача, к многопоточности
отношения не имеющая. Решается предварительным транспонированием В.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107422
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Архитектура зеленых потоков

Каждая таска берет себе кусочек из каждой из матриц и бегает по матрице последовательно

Возможно потребуется транспонирование
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107424
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошая идея с транспонированием. Но с какого размера матриц? 10х10 надо транспонировать?
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107428
mayton
Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру с кешом.

смотрю ты тоже не фанат ставить задачу чётко и ясно
что значит "неблагоприятным образом"?
а "неудачная игра с кешом" - какие предпосылки?

Я предлагал изолировать матрицы A и B (если в них могут писать), путём копирования их внутрь перемножающей ф-и, которая возвращает C.
Это должно быть быстрее (и надёжнее), чем блокировать/разблокировать каждый столб/строку в живой матрице (либо обе матрицы целиком), куда могут записать в соседний столб, а потом записать в посчитанный столб...
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда не понимаешь? Ну вот в цикле обхода матрицы B мы несколько раз обходим ее "по столбцам".
Матрица - любого размера. Может быть 100х100. 1000х1000. Неважно.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107433
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton10х10 надо транспонировать?

10x10 не надо даже распараллеливать. И 100х100 тоже не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107434
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

mayton10х10 надо транспонировать?

10x10 не надо даже распараллеливать. И 100х100 тоже не надо.


+1
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107435
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А когда надо?
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107437
mayton
Правда не понимаешь? Ну вот в цикле обхода матрицы B мы несколько раз обходим ее "по столбцам".
Матрица - любого размера. Может быть 100х100. 1000х1000. Неважно.

понятно, что любого размера. Но легче от этого не станет, если ты её всю заблокируешь на время перемножения. Она просто будет дольше ни для кого недоступна.

А насчёт "несколько раз" - возможно есть смысл все столбы сложить в один контейнер - последовательно, а строки - в другой.
Поскольку известен размер столба, это не будет проблемой.
Я не занимался матрицами, как-то не приходилось, так - мысли вслух...
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107439
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

вот аналогичная задача с исходниками и тестами
https://habr.com/ru/post/508004/
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107442
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА когда надо?

Когда скорости однопоточного перемножения реально не хватает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Данный пост является просто примером к родительскому топику. Примером того что
мы не сможем обсудить сферический лок в вакууме без дополнительных сведений. Быть может
без примера того как много потоков будут хотеть получить этот лок. И без описания типичного
железа. Что это? Серверный Xeon с 4-головами и 24 тредами? Или просто ней-то ноутбучик?

И без понимания полезной работы мы тоже не придумаем ничего. Вот если-бы зайчик
сказал что в каждом контейнере лежит например счетчик. Или JSon документ. Или матрица
чисел и мы что-то с ней будем делать - вот тогда и пойдут более полезные предложения.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107455
mayton
И без понимания полезной работы мы тоже не придумаем ничего. Вот если-бы зайчик
сказал что в каждом контейнере лежит например счетчик. Или JSon документ. Или матрица чисел и мы что-то с ней будем делать - вот тогда и пойдут более полезные предложения.

да говорил я, что что угодно может лежать - от int, до string
соот-но, есть контейнеры с цифрами, есть с документами (строками), есть и матрицы, и что угодно
но достаточно хотя бы цифры и строки рассмотреть

На самом деле сабж уже перерос в более глобальную проблему - как вообще закрыть вопрос о многопоточной конкурентной работе с контейнерами?
Многопоточно не получается. Слишком много костылей и геморроя. Причём бывалые утверждают, что даже корутины не спасут... даже при том, что их выбрал гугл...
Предложил многопроцессорно.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107460
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикНа самом деле сабж уже перерос в более глобальную проблему - как вообще закрыть
вопрос о многопоточной конкурентной работе с контейнерами?

Лучший способ - полным её избеганием.
Простейший способ - полной её сериализацией.

Остальные способы - только если эти два обломались по каким-то причинам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107461
Dimitry Sibiryakov
бабушкин зайчикНа самом деле сабж уже перерос в более глобальную проблему - как вообще закрыть
вопрос о многопоточной конкурентной работе с контейнерами?

Лучший способ - полным её избеганием.
однопоточно?
Dimitry Sibiryakov
Простейший способ - полной её сериализацией.

авторСериализация (в программировании) — процесс перевода структуры данных в последовательность байтов.
а это как тут применить?
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107463
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикоднопоточно?

Да. Другие потоки могут заниматься совсем другими задачами.

бабушкин зайчика это как тут применить?

Никак. Гугли другие значения этого слова. Похожие на "строгая очерёдность".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107470
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
1) i-я колонка матрицы C зависит от всей матрицы A и от i-й колонки матрицы B. Как бы если бы матрица A состояла из столбцов, каждый есть результат умножения матрицы на столбец.
Сколько есть потоков (n), столько и считают каждый свою колонку, после чего берут колонку на n больше если она есть и так далее.

2) i-я строка матрицы C зависит от i-й строки матрицы A и от всей матрицы B. Как если бы матрица A состояла из строк, каждая есть результат умножения строки на матрицу. Далее с потоками по аналогии.

С распараллеливанием-то просто, вопрос с кешированием матрицы. Скорее всего лучше отдать предпочтение строчному варианту.
В обоих случаях надо дергать какую-то одну из матриц целиком, но во втором случае можем отрабатывать построчно хотя бы матрицы C и A.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107471
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы можем множить матрицы "слоями". Это естественным образом вытекает из самой формулы умножения.
Но какого размера брать слой?
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107478
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
mayton
И без понимания полезной работы мы тоже не придумаем ничего. Вот если-бы зайчик
сказал что в каждом контейнере лежит например счетчик. Или JSon документ. Или матрица чисел и мы что-то с ней будем делать - вот тогда и пойдут более полезные предложения.

да говорил я, что что угодно может лежать - от int, до string

Давай еще поговорим про жесткий синхронизм и спрведливость доступа.
Допустим внутри контейнера лежит string в котором - XML документ.
И работают с ним 10 Threads. Они - периодически захватывают контейнер
и что-то добавляют в документ. Возможно - обновляют.

Поскольку операция работы с XML-документом сложная и комплексная - его надо
парсить и сериализовать - то я вангую что время работы с документом будет порядка
нескольких милисекунд. Например 20 мс.

За эти 20 мс прочие 9 потоков могут встать в ожидание. Актуальный вопрос - кто первый получит
доступ? Технически - любой. Это не зависит от того кто кто раньше встал в монитор. Грубо говоря
у данного mutex нет fairness. Это ставит от меня следующий вопрос.

Мы в задании заявили строгую синхронность. Это - правда. By design. Но вот в чем штука.
Зачем нам требования строгой синхронности если у нас все равно нет справедливости в дележе
этого контейнера.

Это вопрос - более философский чем технический.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107479
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

задача хорошо параллелится когда она матрешка, например, делимая пополам.
Например, представляя большую матрицу в блочном виде, параллели, в первую очередь,
можно натравливать на вычисление произведений блоков.
Стоит ли параллелить сумматор - это отдельный вопрос, наверно можно и его.

В таком взгляде ответ на вопрос "когда пришла пора параллелить", вероятно, может звучать так:
не раньше чем появился смысл в переходе к поблочному умножению
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107482
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Да. Другие потоки могут заниматься совсем другими задачами.
+1
Параллелить нужно не доступ к одному ресурсу. А множить единицы работы.
А чтобы кинуть 500 землекопов на одну яму много ума не надо.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107487
Dimitry Sibiryakov
бабушкин зайчикоднопоточно?

Да. Другие потоки могут заниматься совсем другими задачами.
Так ты никуда не деваешь многопоточку. Один запрос пишет в контейнер, а второй/третий/десятый запрос из него читает.
Какие другие задачи? Всё по-честному - 2 разных задачи.
Получается нужна блокировка. И где тут однопоточка?

"Множить единицы задач" - КАК, когда речь о контейнерах? Выдать одному потоку 1 контейнер?

Dimitry Sibiryakov
бабушкин зайчика это как тут применить?

Никак. Гугли другие значения этого слова. Похожие на "строгая очерёдность".
ничего я не нашёл, в т.ч. и по "многопоточная сериализация"
там всё про обычную сериализацию.
Загадочная "сериализация многопоточной конкурентной работы с контейнерами"...
если это mutex-блокировка, почему так и не назвать?
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть concurrency. И есть параллелизм . Вот задача умножения матриц - это про параллелизм.
Это - хоршо. Это - good. А задача где много потоков сталкиваются в попытке обновить 1 поле
- это concurrency.

Concurrency - плохо. От нее избавляются обычно. Как? Пересмотром постановки задачи обычно.
Просто если мы уже докатились до ситуации что 10 или 100 потоков обновляют текстовое поле - что-то
у нас уже не в порядке. Поэтому я вот сопротивляюсь самой изначальной идее. Я ищу причины.

В том примере что я привел. У нес есть 10 потоков и некий кумулятивный документ в контейнере мютекса. Если логика позволяет
то мы должны были создать 10 потоков и 10 локальных документов. А по завершению работы всех - спокойно
смёржить все 10 документов в 1. Разумеется если логика позволяет.
...
Рейтинг: 0 / 0
Ускорить умножение квадратных матриц (продолжение темы с mutex)
    #40107505
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
"Множить единицы задач" - КАК, когда речь о контейнерах? Выдать одному потоку 1 контейнер?
неужели в ВУЗЕ не учат словам
Ресурс и Работа?
...
Рейтинг: 0 / 0
25 сообщений из 165, страница 1 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ускорить умножение квадратных матриц (продолжение темы с mutex)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]