Многопоточность с ростом числа ядер
От: Кодёнок  
Дата: 18.11.08 09:28
Оценка: 6 (1)
Я правильно понимаю, что любой многопоточный код с ростом числа ядер достигнет числа, когда прирост остановится совсем, а при дальшейнем превышении — начнется замедление назад? Оцениваю так:

ВремяВыполнения = X + Y + Z = ВремяПараллелящегосяКода/ЧислоЯдер + ВремяПодМьютексами + ПереключениеКонтекстов*ЧислоЯдер

С ростом числа ядер, время X падает, Y — остается постоянным, а Z — растет.

Функция f(x) = a/x + b + cx при увеличении x рано или поздно начинает расти независимо от соотношения [положительных] констант a, b, c.
При соотношениях 0.98/x + 0.01 + 0.01*x где-то на сотне штук время сравнивается с одноядерником и неограниченно растет.
Может быть похуже, 0.88/x + 0.1 + 0.02*x — уже на 34.

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

Интуитивно я согласен — для каждой задачи есть свой оптимум исполнителей, два человека забьют два гвоздя в 2 раза быстрее, чем один, но если это будут делать 16 человек — получится только замедление.

Выходит, идеально распараллеленый софт — не тот, который загрузит все ядра, а тот, который оценит нужное ему число и загрузит только их?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.