Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2011, 13:21   #1
Anastasia.K
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 10
По умолчанию Параллельные вычисления, С++

Уважаемые форумчане!
У меня вопрос по параллельным вычислениям.

Код писать не надо, достаточно объяснить алгоритм словами.

Задача:
дана последовательность комплексных чисел длины N, нужно найти максимальное по модулю число (или числа), используя P потоков. Нужно выписать все элементы с максимальным по модулю значением и их позиции в векторе.
Сложность должна быть O( N/P+lg(P) )

Пишу в С++.

Мое решение:
последовательность пусть будет vector<double>.
я разбиваю этот вектор на части и посылаю каждому потоку по одной из частей (точнее позиции элементов), каждый поток находит максимальный по модулю элемент (или элементы) в своей части и запоминает их позиции в векторе. Далее используя эти же потоки, сравниваем данные, полученные каждым потоком. Например, первый поток обрабатывает результаты своей работы и второго потока ( например, если его максимальное значение больше, то про результаты второго забываем, если они равны, то объединяем результаты...), третий работает со своими результатами и результатами четвертого потока и.т.д, затем первый обрабатывает свои результаты и бывшего третьего, ну и т.д.

Что возвращают потоки? я бы написала структуру:

Код:
struct data{
  vector<int > index;   // тут сохраняем позиции элементов с макс. по модулю значением
  double max_val;  // а это само значение модуля
};
Вопрос: можно ли это все написать лучше?

Как бы вы решили эту задачу? Можно ли как-то оптимизировать решение, т.е. как-то лучше хранить результаты потоков, может быть лучше использовать другую структуру данных?

И ещё, какие есть хорошие книги по данной теме, по параллельным вычислениям и где можно найти хорошие примеры решения задач?

Заранее спасибо!

P.S. Я знаю про Google, мне хотелось бы узнать ваше мнение
Anastasia.K вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параллельные процессы 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