Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Параллельное программирование  (Прочитано 1074 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MichailQwerty

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Параллельное программирование
« : 04 Апреля 2012, 03:38:35 »
Все доброго времени суток!
В общем проблема у меня такая: Необходимо написать программу по перемножению матриц применив параллельное программирование.
Не могу ни как найти ни одной дельно статьи или книжки на это тему. Посоветуйте что и где почитать?
А и да, с Ubuntu сталкиваюсь впервые, ни черта не знаю, но пока нравиться :). Поэтому в помощи очень нуждаюсь...

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Параллельное программирование
« Ответ #1 : 04 Апреля 2012, 04:51:04 »
В общем проблема у меня такая: Необходимо написать программу по перемножению матриц применив параллельное программирование.
Не могу ни как найти ни одной дельно статьи или книжки на это тему. Посоветуйте что и где почитать?
Что такое параллельное программирование?
Ваше перемножение можно сделать "параллельно":
1. используя потоки pthread_t ... это достаточно просто;
2. если сильно извратиться, можно это изобрести и на параллельных процессах, на fork();
3. можно это сделать на многих-многих (48 и более) процессорах GPU на видеоадаптерах NVIDIA в технологии CUDA.
Какая вам нужна параллельность?

Способы 1 и 2 - это больше для упражнения + несложно.
Способ 3 - объяснять долго ... см.: http://rus-linux.net/forum/viewtopic.php?f=18&t=1530


Оффлайн MichailQwerty

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Re: Параллельное программирование
« Ответ #2 : 04 Апреля 2012, 05:40:42 »
Параллельно, значит каждую операцию умножения значения в строке и в столбце надо максимально раскидать на разные процессоры(ядра).
Официально тема работы называется "Исследование влияния псевдопараллелизма на производительность". И т.к.псевдо, то реализовать нужно первым или вторым способом.И видимо все таки вторым :), т.к. в итоге лучший результат должен получаться если порождать процессы равные количеству ядер процессора.
« Последнее редактирование: 04 Апреля 2012, 05:47:23 от MichailQwerty »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Параллельное программирование
« Ответ #4 : 05 Апреля 2012, 03:27:31 »
Официально тема работы называется "Исследование влияния псевдопараллелизма на производительность". И т.к.псевдо, то реализовать нужно первым или вторым способом.И видимо все таки вторым :), т.к. в итоге лучший результат должен получаться если порождать процессы равные количеству ядер процессора.
1. лучший результат получится (не должен получаться, а получится ;)) если порождать не процессы, а потоки ... т.е. всё-таки способ 1.
2. в этой задаче порождать потоки (процессы) равные количеству ядер процессора - бессмысленно, потому как число ядер - 2, ну 4, ну 8... а число потоков должно быть равно рангу матриц: 50, 100, 1000 (на малых матрицах распараллеливание не улучшит, а ухудшит производительность)
3. число потоков должно быть максимально возможным, а уж диспетчироваться по процессорам - это они уже будут сами.

Оффлайн MichailQwerty

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Re: Параллельное программирование
« Ответ #5 : 06 Апреля 2012, 03:55:25 »
Ребят, ну может кто нибудь скинет ссылку где все основательно будет описано. Ну реально не могу толкового найти, везде разрозненная информация, непонятные обрывки...:(

Пользователь решил продолжить мысль 06 Апреля 2012, 06:44:47:
Официально тема работы называется "Исследование влияния псевдопараллелизма на производительность". И т.к.псевдо, то реализовать нужно первым или вторым способом.И видимо все таки вторым :), т.к. в итоге лучший результат должен получаться если порождать процессы равные количеству ядер процессора.
1. лучший результат получится (не должен получаться, а получится ;)) если порождать не процессы, а потоки ... т.е. всё-таки способ 1.
2. в этой задаче порождать потоки (процессы) равные количеству ядер процессора - бессмысленно, потому как число ядер - 2, ну 4, ну 8... а число потоков должно быть равно рангу матриц: 50, 100, 1000 (на малых матрицах распараллеливание не улучшит, а ухудшит производительность)
3. число потоков должно быть максимально возможным, а уж диспетчироваться по процессорам - это они уже будут сами.


А если так. Есть 2 ядра и матрица 10 на 10. И распараллелить все это дела на 2-а процесса (на каждое ядро), а у каждого процесса уже по 50 потоков?
Мне кажется что так как более "ровно" получиться...или мне ити дальше читать теорию?))
« Последнее редактирование: 06 Апреля 2012, 06:44:47 от MichailQwerty »

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Параллельное программирование
« Ответ #6 : 06 Апреля 2012, 11:52:20 »
Ребят, ну может кто нибудь скинет ссылку где все основательно будет описано. Ну реально не могу толкового найти, везде разрозненная информация, непонятные обрывки...:(
Вот мной изданная книжка:
http://www.books.ru/books/qnxunix-anatomiya-parallelizma-357604/?show=1

Там же в отзывах написал кто-то:
Цитировать
хорошая книга - на русском аналогов не видел


Вот здесь на Flibusta можете её скачать:
http://www.flibusta.net/b/129432

Пользователь решил продолжить мысль 06 Апреля 2012, 12:00:34:
А если так. Есть 2 ядра и матрица 10 на 10. И распараллелить все это дела на 2-а процесса (на каждое ядро), а у каждого процесса уже по 50 потоков?
Мне кажется что так как более "ровно" получиться...или мне ити дальше читать теорию?))

Нет, не так ;)
Не нужно вам делить на 2 процесса (да и это намного сложнее: я такое напишу, а вы вряд ли - процессам ещё взаимодействовать при этом надо средствами IPC).

Всё заметно проще:
Делаете 10 потоков, динамически в цикле (причём вот то 10 - это просто переменная, параметр цикла), выполняя в цикле pthread_create, и эти 10 потоков будут сами, оптимальным образом раскладываться на то число процессоров (ядер), которое будет на текущем компьютере.

P.S. заметьте, что кроме ядер у вас на компьютере может быть дополнительно и  Hyper Threading, и пусть система сама решает: можно на эти гипер-триэды раскладвать ваши потоки или нет. 

P.P.S. в книжке, которую я вам показал, есть прямо готовые примеры кода, делающие то, что я на пальцах описал.
« Последнее редактирование: 06 Апреля 2012, 12:00:34 от Olej »

 

Страница сгенерирована за 0.07 секунд. Запросов: 25.