|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.10.2011, 13:21 | #1 |
Пользователь
Регистрация: 31.10.2009
Сообщений: 10
|
Параллельные вычисления, С++
Уважаемые форумчане!
У меня вопрос по параллельным вычислениям. Код писать не надо, достаточно объяснить алгоритм словами. Задача: дана последовательность комплексных чисел длины N, нужно найти максимальное по модулю число (или числа), используя P потоков. Нужно выписать все элементы с максимальным по модулю значением и их позиции в векторе. Сложность должна быть O( N/P+lg(P) ) Пишу в С++. Мое решение: последовательность пусть будет vector<double>. я разбиваю этот вектор на части и посылаю каждому потоку по одной из частей (точнее позиции элементов), каждый поток находит максимальный по модулю элемент (или элементы) в своей части и запоминает их позиции в векторе. Далее используя эти же потоки, сравниваем данные, полученные каждым потоком. Например, первый поток обрабатывает результаты своей работы и второго потока ( например, если его максимальное значение больше, то про результаты второго забываем, если они равны, то объединяем результаты...), третий работает со своими результатами и результатами четвертого потока и.т.д, затем первый обрабатывает свои результаты и бывшего третьего, ну и т.д. Что возвращают потоки? я бы написала структуру: Код:
Как бы вы решили эту задачу? Можно ли как-то оптимизировать решение, т.е. как-то лучше хранить результаты потоков, может быть лучше использовать другую структуру данных? И ещё, какие есть хорошие книги по данной теме, по параллельным вычислениям и где можно найти хорошие примеры решения задач? Заранее спасибо! P.S. Я знаю про Google, мне хотелось бы узнать ваше мнение |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Параллельные процессы | Sonny01 | Помощь студентам | 1 | 03.10.2011 17:18 |
параллельные потоки | Алма | Помощь студентам | 6 | 23.01.2011 22:09 |
Параллельные вычислений | Иллидан | Общие вопросы C/C++ | 1 | 22.11.2010 13:07 |
Параллельные обращения к mysql | sunnmas | БД в Delphi | 1 | 12.10.2009 22:07 |
Параллельные вычисления. работа с MPI | elpilasgsm | Общие вопросы C/C++ | 1 | 27.07.2009 14:54 |