Параллельная триангуляция Делоне

Я пытаюсь распараллелить триангуляцию Гибаса Столфи Делоне с помощью openmp.

Здесь нужно распараллелить две вещи: mergesort(), которую я сделал, и divide(), где я застрял. Я испробовал все возможные подходы, но тщетно.

Используемый подход (разделяй и властвуй) в разделеть() такой же, как и в методе сортировки слиянием(), но применение той же техники распараллеливания (разделы omp) работает только для сортировки слиянием.

Я попробовал метод распараллеливания, показанный здесь, но даже он не работает. Я где-то читал о вложенном параллелизме, но не знаю, как его реализовать. Кто-нибудь может объяснить, как распараллеливается алгоритм «разделяй и властвуй»?

КОД: дважды вызывалась сортировка слиянием в основной функции и конструкции прикладных разделов. То же самое для функции разделения не работает

#pragma omp parallel
{
#pragma omp sections nowait
{
#pragma omp section
{
merge_sort(p_sorted, p_temp, 0, n/2);
}
#pragma omp section
{
merge_sort(p_sorted, p_temp, (n/2)+1, n-1);
}
}
}

person haxor    schedule 15.04.2012    source источник
comment
найти весь код:-pastebin.com/4nxbAts7   -  person haxor    schedule 29.04.2012


Ответы (1)


Мне удалось распараллелить вызовы CreateThread в Windows. Хитрость заключается в том, чтобы разделить точки на 2 ^ n буферов, обработать каждый буфер в отдельном потоке, а затем последовательно объединить соседние ребра до одного окончательного слияния.

У меня есть демонстрационная программа для создания случайных данных, триангуляции и отображения результатов (для небольших случаев). Не похоже, чтобы этот сайт позволял мне скачать ZIP-файл программы и инструмента отображения. Если вы можете предложить сайт для загрузки или предоставить адрес электронной почты, я отправлю его вам.

person Handy    schedule 17.05.2012
comment
напишите мне на getanshub4u[AT]gmail[dot]com - person haxor; 16.10.2012