LINUX.ORG.RU

[посоветуйте]Бакалаврская - параллельные вычисления

 


0

0

Есть человек (не я), которому нужно выбрать тему на балараврскую. Руководитель хочет параллельные вычисления. Посему вопрос: что из существующих алгоритмов можно распараллелить? В т.ч. что-либо из СПО.

★★★★★

Последнее исправление: Pavval (всего исправлений: 1)

автоматическое (на уровне компилятора) распараллеливание «выполнения программы» в чистых функциональных языках. если не ошибаюсь, об этом много говорят, мол чистое ФП позволяет проводить такое вот автоматическое распараллеливание, но реального воплощения этого мнения вроде как нет. хотя Parallel Haskell наверное =/ но тогда вопрос: почему это не в стандарте языка? какие проблемы? каким образом можно эти проблемы устранить?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

Не, плиз что-то попроще. Про ФП в этом плане я знаю. Не из компиляторов.

Pavval ★★★★★
() автор топика

можно посмотреть в сторону тех алгоритмов, которые реализуются в рамках MapReduce. Например, те, что перечислены в книжке Data Intensive Text Processing With MapReduce....

ott ★★★★★
()
Ответ на: комментарий от Pavval

Ниче смешного эти задачи, что я привел выше по ссылке решаются у нас в рамках магистерского диссера :) Ну естественно по отдельновыбраной узкой теме.

Zubchick
()
Ответ на: комментарий от Zubchick

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

Pavval ★★★★★
() автор топика

Интересная область - параллельное решение СЛАУ, например. Для бакалаврской будет достаточно сравнить несколько существующих подходов. Я сам хотел такое делать, даже статьи читал по теме, но научрук настоял на другой области.

amomymous ★★★
()
Ответ на: комментарий от Pavval

Нахрен тебе практического? Короче, откапываешь что-нибудь уже готовое по вычислительной геометрии, решенное в последние лет 10-15 и пытаешься распараллелить. Например, диаграмма Вороного для отрезков. Если сильно просто, то диаграмма Вороного для отрезков в 3-ех мерном пространстве.

Waterlaz ★★★★★
()

Пусть для начала почитает программы на http://shootout.alioth.debian.org/ для архитектур с количеством ядер > 1. Например для x8-64 и четырёх ядер там есть:

Классический пример на C++ с ручным распараллеливанием.

Пример на CL с использованием sb-thread.

На Haskell большая часть программ написанна с использованием forkIO, и ещё есть короткая программа в которой нет ни токена про параллельность, но которая паралелится именно автоматически именно компилятором.

quasimoto ★★★★
()
Ответ на: комментарий от Pavval

Ну вы спросили - «что из существующих алгоритмов можно распараллелить», вот там и ответ - почти любой алгоритм при правильном подходе :) (даже нахождение простых чисел - Роб Пайк читал одну лекцию, там был пример на эту тему).

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

Т.е. взять любой набор интересных тем - и попробовать разделить их по критериям «можно» параллелить, или «проблематично/не знаю». С первой группой и работать.

quasimoto ★★★★
()

В библиотеке SUNDIALS нет реализации векторов для OpenMP. Но есть советы, как это сделать (по аналогии с реализацией для MPI). Ну и в качестве исследовательской части можно сравнить масштабируемость задач с использованием полученной реализации.

oami ★★
()
Ответ на: комментарий от oami

Я заранее отвечу, что это вообще ничего не даст кроме ухудшения производительности. Применение openmp в лоб хорошо работает для таких алгоритмов, где каждый поток выполняет какую-то достаточно сложную работу. Например, очень хорошо на openmp параллелится генерация матрицы конечных элементов, ибо там надо считать интегралы.

Reset ★★★★★
()
Ответ на: комментарий от Reset

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

Поэтому, если система имеет достаточно большую размерность (и используются итерационные методы с заметным объемом вычислений для каждого потока), можно ожидать определенного прироста производительности и для OpenMP.

oami ★★
()
Ответ на: комментарий от oami

Есть конечно. Параллелятся хорошо только алгоритмы, которые входят в blas3 или используют blas3. Поэтому, если либа использует блочные алгоритмы, то сделать что-либо на openmp получится. Только зачем? Проще и гораздо эффективнее взять реализацию blas'а заточенную под свой проц и сделать в либе blas-backend.

Reset ★★★★★
()
Ответ на: комментарий от oami

acml и mkl, кстати, в blas3 используют openmp, но там еще идет жесточайшая оптимизация на asm'е. Я сколько не пытался так и не осилил догнать их по производительности на чистом Си. Ровно в 4 раза медленнее получается у меня dgemm, хотя я тоже делал жесточайшее задрачивание под размер кеша проца. А тупой «#pragma omp parallel for» на больших и малых размерностях не работает вообще.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Вот бакалавр прочтет это и подумает - нужно ли ему такое параллельное программирование?

Кстати, интересно (по поводу «в 4 раза медленнее») - если сравнивать результаты HPC с mkl +icc и, например, atlas+gcc, какая там ожидаемая разница в производительности?

oami ★★
()

Замятин обычно не навязывает темы. Можно с любой интерестной приходить и он будет за.

vertexua ★★★★★
()
Ответ на: комментарий от oami

У меня на q8400s производительность такая.
функция dgemm, размерость матрицы 4096x4096
atlas (gcc) 37gflops
acml (gcc) 35gflops
mkl (icc) 25glops

пик у процессора 42.56gflops

Reset ★★★★★
()
Ответ на: комментарий от oami

То что я руками писал достигало 10gflops (на 4х ядрах), при этом масштабировалось оно линейно. Никак руки не дойдут проверить на 8ми ядернике.

Reset ★★★★★
()
Ответ на: комментарий от oami

меня это тоже удивило, я думал атлас сольет закрытым реализациям

Reset ★★★★★
()

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

dizza ★★★★★
()

Я у Замятина пишу P2P Filesystem на базе FUSE. Java+Google Protobuf. Может на Scala еще, я еще не решил окончательно

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

> Я у Замятина пишу P2P Filesystem на базе FUSE. Java+Google Protobuf. Может на Scala еще, я еще не решил окончательно

эээ... ты уже пишешь, но ещё не решил на чём пишешь? это как? ленивое написание?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

Ну это как бы за первый месяц выбрать руководителя и тему.

vertexua ★★★★★
()

Думаю магистерскую работу писать по параллельным вычислениям. Тоже над темой думаю.. Единственое, что пока в голову пришло - распознавание образов. Какие еще варианты будут?

eirth
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.