Паралелльное программирование

Модератор: Модераторы разделов

happy
Сообщения: 66
ОС: OpenSUSE 11.1

Паралелльное программирование

Сообщение happy »

Доброго времени суток!
Расскажите плз с чего начать выполнять задание:
Есть программа, написанная на С++ с использованием объектов.
Есть компьютер: 2 2х ядерных процессора.
ОС: Linux oSuSe 10.3

Вопрос:
  • Можно ли вручную распараллелить программу между 4мя ядрами?
    Можно ли вручную распараллелить программу между 2мя процессорами?
    Какие средства посоветуете для выполнения задачи?
    Посоветуйте литературу.
All You Need Is Love!!!
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Паралелльное программирование

Сообщение Voice »

Смотрите в сторону потоков и их синхронизации.
Потоки ядро уже само розпределит по разных ядрах/процессорах. Это не Ваша забота.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
ivze
Сообщения: 39
ОС: Ubuntu

Re: Паралелльное программирование

Сообщение ivze »

Маленький коммент.
Во всех POSIX - системах должна быть библиотека pthreads - для сосзания многопоточных процессов.
Для начала изучения пойдёт вот это : http://www.cs.nmsu.edu/~jcook/Tools/pthreads/pthreads.html.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Паралелльное программирование

Сообщение Uncle_Theodore »

happy писал(а):
29.02.2008 23:44
Доброго времени суток!
Расскажите плз с чего начать выполнять задание:
Есть программа, написанная на С++ с использованием объектов.

Лучше бы она была написана с использованием fork().
Есть компьютер: 2 2х ядерных процессора.
ОС: Linux oSuSe 10.3

Вопрос:
Можно ли вручную распараллелить программу между 4мя ядрами?

Можно.
Можно ли вручную распараллелить программу между 2мя процессорами?

Если очень нужно, то да.
Какие средства посоветуете для выполнения задачи?

http://www.novell.com/products/linuxpackag...util-linux.html
Посоветуйте литературу.

man taskset
Спасибо сказали:
DieS
Сообщения: 8

Re: Паралелльное программирование

Сообщение DieS »

становится понятно - код придется менять, или даже переписывать
а раз уж так, то стоит оглянутся в сторону более универсальных средств
MPI например розпаралелит ваши счисления не только на локальном процессоре, но и между несколькими машинами (т.н. кластер), при чем прозрачно

литературу не берусь советовать, так как непосредственно дела не имел
в универе когда проходили советовали начинать отсюда http://parallel.ru/tech/tech_dev/mpi.html
а в общем, если это вам подойдет то в сети примеров и документации достаточно

перед выбором компилятора посмотрите сюда http://www.intel.com/cd/software/products/.../278834.htm#hpo интересный подход (при условии что Intel C++ устроит)
Спасибо сказали:
Аватара пользователя
dey
Сообщения: 335
ОС: OpenSuse 11.1

Re: Паралелльное программирование

Сообщение dey »

happy писал(а):
29.02.2008 23:44
Какие средства посоветуете для выполнения задачи?

Я бы посоветовал MPI, Pthreads
Посоветуйте литературу.

Параллельное и распределенное программирование с использованием C++
(Parallel and Distributed Programming Using C++) .Авторы Камерон Хьюз, Трейси Хьюз
В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor's New Mind
Спасибо сказали:
happy
Сообщения: 66
ОС: OpenSUSE 11.1

Re: Паралелльное программирование

Сообщение happy »

Я бы посоветовал MPI, Pthreads


Где можно взять эти библиотеки и документацию к ним?
All You Need Is Love!!!
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Паралелльное программирование

Сообщение Uncle_Theodore »

happy писал(а):
01.03.2008 06:46
Я бы посоветовал MPI, Pthreads


Где можно взять эти библиотеки и документацию к ним?

http://www.yolinux.com/TUTORIALS/LinuxTuto...sixThreads.html
библиотеки -- у тебя в дистре. Но они тебе не помогут.
MPI -- http://www.developers.net/intelisdshowcase/view/2604
Но MPI -- это огромадная система, которая предназначена для кластеров. Она требует весьма существенного переписывания кода и разводить ее ради четырех ядер на одной машине смысла никакого не имеет.

Проще всего, если я правильно понял задачу, -- отфоркануть четыре процесса в твоей программе. Потом приписать каждый из них к отдельному ядру. Это тоже потребует переписывания кода, но не столь глобального. И только тогда у тебя будет возможность вручную распорядиться, какой процесс идет на какой CPU. Threads тебе такой возможности не дадут, ядро будет само решать, что куда отправить.

Если я понял задачу неправильно -- сформулируй ее четче.
Спасибо сказали:
Аватара пользователя
Clear_Mind
Сообщения: 241
Статус: Изредко заглядывающий
ОС: openSuSE 11.1

Re: Паралелльное программирование

Сообщение Clear_Mind »

Bombers launch with no recall + Minutes warning of the missile fall
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
Спасибо сказали:
Shade
Сообщения: 40
ОС: ArchLinux

Re: Паралелльное программирование

Сообщение Shade »

А что за задача, можно по-подробнее?
Например, для распараллеливания вычислительных задач хорошо подходит OpenMP, поддержка которого появилась в GCC, начиная с версии 4.2.
В программе расставляются специальные директивы, анализируя которые, компилятор САМ распараллеливает программу на потоки, т.е. не нужно явно использовать pthreads, fork и т.д.
Спасибо сказали:
happy
Сообщения: 66
ОС: OpenSUSE 11.1

Re: Паралелльное программирование

Сообщение happy »

Проще всего, если я правильно понял задачу, -- отфоркануть четыре процесса в твоей программе. Потом приписать каждый из них к отдельному ядру. Это тоже потребует переписывания кода, но не столь глобального. И только тогда у тебя будет возможность вручную распорядиться, какой процесс идет на какой CPU.

то есть делаем 4 процесса и потом просто их развешиваем по ядрам? я правильно понял?

А что за задача, можно по-подробнее?

Задача вычислительная. Много частиц летят в пространстве. Необходимо считать взаимодействие частиц друг с другом. Хочется использовать паралельные алгоритмы для оптимизации расчетов.
All You Need Is Love!!!
Спасибо сказали:
Shade
Сообщения: 40
ОС: ArchLinux

Re: Паралелльное программирование

Сообщение Shade »

Как раз должно легко получиться с OpenMP.
Тем более, что тут нужны потоки, а не процессы, т.к. данные о координатах и импульсах (или чего у вас там) удобнее хранить в общей памяти, а не передавать каким-либо образом между процессами. Наверное, внешний цикл для данного момента времени будет по частицам, тогда его то и следует распараллеливать. Либо распараллеливать ту часть, которая будет считать взаимодействие данной частицы с остальными.
"Развешивание" по ядрам/процессорам -- задача ОС. Как только у вас появится несколько вычислительных процессов/потоков, они распределятся по ядрам автоматически. При этом ядро linux должно быть собрано с поддержкой smp, что имеет место в большинстве современных дистрибутивов. Ничего особенного для распределения задач по ядрам одного многоядерного процессора делать не нужно, т.к. с точки зрения ОС два процессора по два ядра и один процессор с 4мя ядрами (или 4 одноядерных процессора) ничем не отличаются.
Я делал задачку (считались численно интегралы для набора точек) с OpenMP -- на двуядерной машине ускорение было в 1.95-1.97 раза, при этом в код программы было добавлено всего несколько директив.
Спасибо сказали: