Загрузка...
     

Параллельное программирование - лабораторные работы

16.11.10, 13:34
Автор dbimatov

Каждый сдает 3 лабораторные работы.

Договоритесь друг с другом кто какую делает так, чтобы задачи не повторялись.

 

ЛАБОРАТОРНЫЕ РАБОТЫ

ПО КУРСУ «ПАРАЛЛЕЛЬНОЕ И РАСПРЕДЕЛЕННОЕ ПРОГРАММИРОВАНИЕ»

 

1.  СИНХРОНИЗАЦИЯ ПОТОКОВ 

ЯЗЫКИ: С++, С#

1.1.  Задача обедающих философов.

За круглым столом сидят N философов. Между соседями лежит по вилке (всего N штук). Философ – это поток, который поочередно делает 2 действия: думает (функция think()) и ест (eat()). Чтобы поесть необходимо ложки (одна слева, одна справа).

Необходимо запрограммировать поведение потоков-философов так, чтобы они работали по возможности параллельно, не возникало тупиков, не возникало дискриминации (кто-то не может поесть очень долгое время). Функции think(), eat() могут занимать существенно разное время (для простоты, можно сделать там сортировку массива с случайной – каждый раз заново вычисляемой длиной).

1.2.  Задача «читатели-писатели»

N потоков «писателей» и M потоков-«читателей» обмениваются данными (сообщениями – фиксированной длины) через сравнительно небольшой буфер размером K сообщений. Для простоты – сообщение может быть одним целым числом.

int prepare_data() – подготовка данных «писателем» - возвращает сообщение (целое число).

void process_data(int data) – обработка данных «читателем».

Предполагается, что Prepare_data() и process_data() занимает значительное время, а процесс записи-чтения в буфер – сравнитеьлно небольшое.

Необходимо запрограммировать поведение потоков читателей-писателей, так чтобы они работали максимально параллельно (чтобы несколько читателей и писателей параллельно подготавливали и обрабатывали данные).

1.3.  Задача «спящий парикмахер»

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

Запрограммировать повдение такой системы (поток парикмахер, N-потоков клиентов, которые «приходят» в парикмахерскую время от времени).

1.4.Команда потоков

Реализовать управление команды из N «рабочих» потоков и одного управляющего потока. Каждый рабочий поток может выполнять два задания taskOne(int x), taskTwo(int x). Выполнение каждого задания может занять существенно различное время, в зависимости от параметра x.

Управляющий поток генерирует набор независимых заданий размером K (состоящих из заданий taskOne(), taskTwo() со случайными параметрами) и выполняет их с помощью команды рабочих потоков за минимальное время.

 

2. OpenMP

ЯЗЫКИ: С/С++

2.1. Найти максимальный и минимальный элемент в массиве

2.2. Найти сумму элементов в массиве

2.3. Найти скалярное произведение двух векторов a и b длины N.

X = a[0]*b[0]+a[1]*b[1]+…+a[N]*b[N]

2.4.Линейный фильтр «размытие».

Дан исходный вектор a. На выходе получаем вектор b. b[i] = (a[i] + a[i+1] + … a[i+k])/k. Здесь k – параметр фильтра.

 

3. MPI

ЯЗЫКИ: С/C++

Сдается на кластере Cyberia.

Для удобства разработки и отладки дома можно использовать реализацию MPI в виде библиотеки MPICH2.

3.1. Сортировка массива

3.2. Умножение матрицы на вектор

3.3. Умножение матрицы на матрицу

3.4. Задача коммивояжера (полный перебор).

Комментарии

  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта

Щукова,
1.3 (парикмахеры)
2.4,(линейный фильтр)
3.3 (матрица на матрицу)

йа беру философов, сумму элементов и коммивояжера

1.2. Задача «читатели-писатели»
2.3. Найти скалярное произведение двух векторов a и b длины N.
3.2. Умножение матрицы на вектор

Войдите, чтобы оставить комментарий