10.02.2015 15:17, Михаил Монашёв пишет:
Здравствуйте, Анатолий.
3) Программы в которых несколько потоков делают одну работу просто
сложнее, чем там где туже работу делает один поток, хотя бы из-за
необходимости синхронизации.
Пример: перемножение матрицы.
А какая нужна синхронизация при перемножении матриц? У каждого
процесса свой кусок одной из перемножаемых матриц и по этому куску он
бегает. Т.е. данные заранее поделены на равные части и не надо ничего
синхронизировать.
1) Для того, чтобы дождаться когда все потоки закончат работу
2) В реальной задаче еще данные можно загрузить/выгрузить а это тоже
можно делать параллельно
3) Нужно разбить на подзадачи чтобы числа не попадали на одну страницу
кэша у разных процов(иначе кэш сбрасывается и core duo становиться i486)
4) Если разбить на слишком больше куски, то какие-то процессы начинают
простаивать
5) А если слишком маленькие, то теряется время на переключение задач.
6) Матриц может быть несколько и нужно считать в определенном порядке.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org