Параллельные алгоритмы O (log p) - PullRequest
0 голосов
/ 03 сентября 2011

Во-первых, это не для каких-либо домашних заданий, это просто алгоритм общего типа. В курсе параллельных вычислений, который я беру, у меня возникают проблемы с тем, чтобы обернуть голову вокруг стиля алгоритма, который имеет время выполнения O (что-то + ... log p). Например, мы рассмотрели алгоритмы сокращения последовательности: O (n / p + log p), где p = #procs, а n - размер проблемы. Бревно база 2.

Проблема, с которой я столкнулся, заключается в идее log (p). С одной стороны, я привык везде видеть log (n), сводя задачи к двум подзадачам размера n / 2 и т. Д. Вторая - просто идея иметь ступенчатую сложность алгоритма как log (p). Потому что это будет означать, что для проблемы фиксированного размера, если я увеличу количество процессоров, то я увеличу количество шагов в алгоритме? Я всегда думал о ступенчатой ​​сложности алгоритма как о неотъемлемом последовательном аспекте алгоритма и, следовательно, увеличение или уменьшение числа процессоров не должно иметь никакого влияния на это. Это плохой способ думать об этом?

Полагаю, что было бы полезно использовать псевдокод алгоритмов, в которых время выполнения log (p) находится где-то в них.

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

Рассмотрим возможность вычисления суммы n чисел. Каждому процессору могут быть назначены номера n / p, но как сложить результаты от отдельных процессоров? Вы можете передать все p-результаты одному процессору для времени выполнения O (n / p + p), но вы можете быстрее объединить суммы в древовидной форме.

0 голосов
/ 03 сентября 2011

Я думаю, что O (n / p + log (p)) имеет смысл, потому что n / p + log (p) уменьшается при увеличении переменной p, поэтому время работы уменьшается по мере добавления процессоров и эта граница имеет смысл; в противном случае время выполнения журнала (p) вряд ли будет естественным, поскольку оно уменьшается по отношению к числу процессоров.

...