Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Просто небольшой пример полного переосмысления распространенной серийной проблемы — это СКАНИРОВАНИЕ алгоритм.Это так же просто, как:

  • Учитывая набор {a,b,c,d,e}

Мне нужен следующий набор:

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

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

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

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

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

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

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

Взгляните на OpenMP за интересный вариант.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top