Поточная парадигма? - PullRequest
0 голосов
/ 27 февраля 2009

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

Ответы [ 5 ]

2 голосов
/ 27 февраля 2009

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

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

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

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

0 голосов
/ 28 февраля 2009

Посмотрите на OpenMP для интересного варианта.

0 голосов
/ 27 февраля 2009

Относительно новая идея, которая мне нравится больше всего, - транзакционная память : избегайте проблем параллелизма, следя за тем, чтобы обновления всегда были атомарными.

0 голосов
/ 27 февраля 2009

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

Эта идея устарела и была распространена (среди прочего) сообществом микроядерных ОС для создания более надежных операционных систем. Интересно, что прототип ОС Singularity от Microsoft Research показывает, что традиционные адресные пространства даже не требуются при работе с этой моделью.

0 голосов
/ 27 февраля 2009

Я не совсем понимаю вопрос, но если вы начнете делать кодирование, используя CUDA , вы сможете по-другому взглянуть на многопоточность приложений.

Он отличается от общей техники многопоточности, такой как семафоры, мониторы и т. Д., Потому что у вас есть тысячи потоков одновременно. Таким образом, проблема параллелизма в CUDA заключается больше в разделении ваших данных и последующем смешивании кусков данных.

Просто небольшим примером полного переосмысления распространенной проблемы с последовательным интерфейсом является алгоритм SCAN . Это так же просто, как:

  • Учитывая SET {a, b, c, d, e}

Я хочу следующий набор:

{a, a + b, a + b + c, a + b + c + d, a + b + c + d + e}

Где символом «+» в данном случае является любой коммутативный оператор (не только плюс, вы также можете выполнять умножение).

Как это сделать параллельно? Это полное переосмысление проблемы, оно описано в этой статье .

Еще больше реализаций различных алгоритмов в CUDA можно найти на сайте NVIDIA

...