Примеры задач для параллельных вычислений
сегодня используется множество парадигм и методов параллельного программирования. Программная транзакционная память, актеры, параллелизм общего состояния, пространства кортежей и многое, многое другое.
однако мне не хватает библиотеки интересных тестовых проблем для параллелизма. Одним из хорошо известных примеров является" проблема обеденных философов", которая не является ни достаточно сложной, ни мотивирующей, ни реалистичной. Тогда существует много параллельных алгоритмов (матричное умножение, рендеринг, общий вложенный параллелизм данных), которые просто требуют распределения работы, но не реального параллелизма с связью между потоками выполнения.
Итак, может ли кто-нибудь указать мне на некоторые интересные наборы проблем, требующих реального параллелизма в интерактивной, возможно, даже распределенной среде, которые достаточно просты для использования в качестве примеров парадигм параллелизма? В идеале я хочу найти набор проблем, которые будут служить "тестом лакмуса" для парадигм параллелизма (или для подчеркнуть их различия, так как каждая парадигма имеет свои сильные и слабые стороны).
любая помощь очень ценится :)
1 ответов
Я ранее рассматривал этот точный вопрос, предварительно предложив некоторые параллельные парадигмы программирования: p
вывод, который я сделал тогда, заключается в том, что такой набор тестов, похоже, действительно не существует независимо от языка. Хотя это может быть полезно для его существования, есть некоторые довольно веские причины, по которым это не так (насколько мне известно).
большая часть внимания в рамках параллельного программирования, как правило, на сведения параллелизм!--6-->, так что одна и та же операция применяется параллельно к различным частям одного и того же набора данных. Виды параллелизма на уровне задач (т. е. различные задачи выполняются параллельно, возможно, обмен данными), о которых вы говорите, на самом деле не очень много. Я думаю, это потому, что это сложно. Но я думаю, что это также сложно, потому что большинство проблем не поддаются такому параллелизму. Описание распределенной системы в термины примитивов параллелизма могут быть полезны, но эти системы, как правило, разделены таким образом, что существует протокол (письменный или подразумеваемый), модерирующий их связь. Люди, как правило, не думают о таких системах как явно "параллельных" ситуациях программирования, даже если они рассматриваются в правильном фрейме (т. е. рассматривают "клиент" и "сервер" как агенты, работающие параллельно с синхронизацией в некоторых точках).
единственные места, я думаю, вы могли бы найти некоторые источники вдохновения будут находиться в рамках отдельных реализаций. Erlang, Occam (и Occam-pi), Alice, CML, Concurrent Haskell и т. д., вероятно, будут иметь небольшие тестовые корпусы, но как проблемы, так и их реализации будут смещены в сторону реализации на определенном языке (потому что они, очевидно, реализуемы на этом языке!). Возможно, вы также можете посмотреть на сообщества, работающие над многопартийные типы сеансов, и различных конкременты процесс такие как pi-исчисление, CCS и CSP, чтобы увидеть, какие типы систем они используют в качестве примеров моделей. Идея стандартного языка-агностический набор задач для описания параллельных общение системы привлекательны, но несколько неуловимы на данный момент, я думаю.