Распараллеливание задачи
О задаче:
имеется функция состоящая из 4 блоков:
блок 1
вычисляются элементы (с первого по N) для одномерного массива, по некой формуле
блок 2
вычисляются элементы (с N+1 по N+M) по другой формуле
блок 3
вычисляются элементы (с N+M+1 по N+M+K) по третьей формуле
блок 4
результат функции который вычислит сумму всех элементов (от 1 до N+M+K) для массива
_____________
Сама задача решена и программа работает правильно, однако это очень длительный (многочасовой) процесс. Мне хотелось сократить время выполения задачи, так как блоки 1, 2 и 3 абсолютно паралелльны и никак не зависят друг от друга. И только четвертый блок, т.е. сам результ зависит от них. Эта программа грузит только одно ядро. Хочется разбросать задачу на три ядра или треда.
_____________
Вопрос: Как сделать так, чтобы блоки 1, 2 и 3 в этой функции прогонялись паралелльно (грузя 3 ядра, а не одно), и чтобы четвертый блок дождавшись их выполнил преобразования и выдал необходимый результат.
Я никогда не работал с мульти-тредингом, область для меня совсем новая. Поэтому пожалуйста объясните подробно как разрешить данную проблему. Если нужно я приведу сам пример. Или выберите подходящий пример на Ваше усмотрение. Мне главное понять суть распараллеливания.
Читал хелпы мануалы и прочее. Везде про треды рассказывается довольно мутно и непонятно на каких-то нудных примерах.
Спасибо.
|