Re: Несколько потоков - быстрее вычичсление?
От: stump http://stump-workshop.blogspot.com/
Дата: 23.05.08 10:07
Оценка: +3 -2
Здравствуйте, den123, Вы писали:

D>Здравствуйте!


D>Среда — Windows, на машине выполняется много приложений. Можно ли ускорить вычисление некоторого алгоритма, если рзбить вычисление на несколько потоков? Каждый поток выполняет свою часть вычислений, это допускается алгоритмом.

Прямой зависимости больше потоков — быстрее вычисление не существует. Все зависит от множества условий. Вы можете получить выигрыш в производительности если:
— алгоритм хорошо распараллеливается (одному потоку не надо ждать результатов расчета в другом потоке)
— паралельные потоки не конкурируют за доступ к одному и тому же ресурсу (диск, порт, сеть, графическая подсистема, соединение с БД, и наконец процессор)
— аппаратная платформа поддерживает паралельное исполнение (это частный случай предыдущего пункта, когда ресурс — процессор)
— накладные расходы на обеспечение параллельного исполнения не велики по сравнению с общим временем расчета.
А теперь оцените по этим критериям свою задачу.
Например, распараллеливание чисто расчетного алгоритма, который не взаимодействует ни с графической подсистемой ни с диском, на однопроцессорной системе приведет к снижению производительности.
Если же можно отделить расчеты от графического вывода, графический вывод от работы с диском или сетью, и разнести это по разным потокам, то это даст прирост производительности даже на однопроцессорной системе. Просто за счет уменьшения простоев при работе с ресурсами.
Или например, распараллеливание алгоритма поэлементного сложения двух массивов в 1000 элементов каждый на тысячу потоков. Производительность упадет на несколько порядков по сравнению с выполнением в одном потоке, за счет накладных расходов на распараллеливание.
Понедельник начинается в субботу
многопоточность
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.