Автоматическое распараллеливание (было "Что почитать...")
От: remark Россия http://www.1024cores.net/
Дата: 16.04.08 07:59
Оценка: 10 (4)
Здравствуйте, Michael7, Вы писали:

M>Я бы отдельно выделил важную тему ленивых (отложенных) вычислений (lazy evolution).


M>Познакомиться с концепцией можно, например по этой статье на русском языке:

M> Джонатан Бартлет, — Ленивое программирование и ленивые вычисления

M>Тема важная, потому что это путь к написанию автоматически распараллеливаемого кода, что до некоторой степени освещено, например в этой статье: An operational semantics for parallel lazy evaluation



Меня в этом вопросе интересовала реализация этого дела и организация ран-тайм системы поддержки. Поэтому со своей стороны могу дать ссылки, касающиеся именно реализации:
Lazy Threads: Compiler and Runtime Structures for Fine-Grained Parallel Programming:
http://www.eecs.berkeley.edu/Pubs/TechRpts/1997/CSD-97-975.pdf

Cilk: An Efficient Multithreaded Runtime System:
http://supertech.csail.mit.edu/papers/cilkjpdc96.pdf


По поводу "автоматически распараллеливаемого кода". Это, конечно, очень громко сказано. Параллельные диалекты Lisp (QLisp, Multilisp etc) существуют с начала 80-ых годов, однако никакого "автоматического распараллеливания" нет и по сей день.

Непосредственно "автоматическое распараллеливание" сейчас есть только для *очень* ограниченного круга задач. Например, компилятор успешно выделяет "цикл" (легко), и успешно понимает, что все итерации независимы (сложно, в общем случае — невыполнимо), тогда компилятор может сгенерировать "параллельный" код. Очевидно, что полагаться на это в промышленной разработке *нельзя*, это не более, чем "игрушка".

"Псевдо-автоматическое распараллеливание" возможно, когда пользователь явно указывает в программе "потенциальный" параллелизм, а компилятор/ран-тайм заставляют его реально выполняться параллельно. К этому типу относятся все эти lazy-вычисления, futures, активные объекты и т.д. Но фактически тут вся работа остаётся на программисте. У компилятора тут маленькая задача. У компилятора тут, как ни странно, задача даже больше не "сделать" параллелизм, а "подавить" параллелизм.

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

Так же такие области, как game-dev, где требуется 100% отдача от железа, не полагаются на автоматическое распараллеливание. Т.к. тут не устраивает ситуация, что "компилятор наверное что-то как-то распараллелит".

No silver bullet!



21.04.08 17:30: Ветка выделена из темы Автоматическое распараллеливание
Автор: remark
Дата: 14.04.08
— Хитрик Денис

1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.