Показать сообщение отдельно
  #1  
Старый 09.07.2013, 01:37
cadavar cadavar вне форума
Прохожий
 
Регистрация: 09.07.2013
Сообщения: 5
Версия Delphi: xe5
Репутация: 10
Вопрос Распараллеливание задачи

О задаче:

имеется функция состоящая из 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 ядра, а не одно), и чтобы четвертый блок дождавшись их выполнил преобразования и выдал необходимый результат.


Я никогда не работал с мульти-тредингом, область для меня совсем новая. Поэтому пожалуйста объясните подробно как разрешить данную проблему. Если нужно я приведу сам пример. Или выберите подходящий пример на Ваше усмотрение. Мне главное понять суть распараллеливания.

Читал хелпы мануалы и прочее. Везде про треды рассказывается довольно мутно и непонятно на каких-то нудных примерах.



Спасибо.
Ответить с цитированием