Показать сообщение отдельно
  #1  
Старый 31.01.2016, 19:29
Delphinaut Delphinaut вне форума
Прохожий
 
Регистрация: 28.01.2016
Сообщения: 11
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию Бинарные деревья и многопоточность

Имеется алгоритм, который строит бинарное дерево. Требуется распараллелить алгоритм построения. Самый очевидный вариант - строить левое и правое поддеревья в двух разных потоках. Потом объединить поддеревья после того, как оба потока завершат работу (WaitForMultipleObjects).

Но можно же строить и в четыре потока: левое (1) и правое (2) поддеревья левого поддерева, левое (3) и правое (4) поддеревья правого поддерева. И т.д.

Задача. Определить оптимальное кол-во потоков, при котором бинарное дерево строится за наименьшее кол-во времени на 2-х, 4-х и 8-ми ядерных процессорах. Написать рекурсивный алгоритм создания потоков.

Т.е. первоначально имеется один поток (главный), которой создаёт два дочерних потока для построения левого и правого поддеревьев. Затем дочерние потоки поступают точно так же и т.д.
Ответить с цитированием