Я все время слышу о параллельном программировании. Не могли бы вы пролить свет на то, что это такое и как новые стандарты С ++ помогают делать то же самое?
Статьи: проверьте эти статьи, чтобы узнать о параллелизме 1. Бесплатный обед закончился 2. Избранные статьи от grassutter 3. Ссылка на pdf





Возможно, это видео поможет пролить свет на вас :-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
Параллелизм - это наличие нескольких потоков выполнения для данного процесса. На сегодняшний день C++ не поддерживает это напрямую. Однако существует несколько библиотек, которые связывают данную функцию с новым потоком выполнения. Стандарт Unix - это библиотека pthreads.
Стандарт Posix (не Unix)
Может ли кто-нибудь объяснить мне, как могут быть 2 спорных ответа: да, C++ - это параллельный язык (см. Выше), и нет, параллелизм - это другое (это)? Кто не прав?
Параллелизм - это когда ваш код выполняет несколько задач одновременно. Обычно это делается с помощью явных «потоков», но есть и другие возможности. Например, если вы используете в своем коде директивы OpenMP, то компилятор, поддерживающий OpenMP, автоматически сгенерирует для вас потоки.
Поток - это сокращение от «поток выполнения». В однопоточной программе C++ выполнение начинается с main (), а затем продолжается последовательно. В многопоточной программе первый поток начинается с основного, но приложение может запускать дополнительные потоки, которые запускаются с указанной пользователем функции. Затем они выполняются одновременно или параллельно с исходным потоком.
В C++ потоки 0x запускаются с использованием класса std::thread:
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
Новый стандарт C++ 0x также поддерживает:
std::atomic<>,std::mutex, std::recursive_mutex и др.)std::lock_guard<>, std::unique_lock<>)std::lock и std::try_lock позволяют управлять получением нескольких блокировок одновременно без риска возникновения взаимоблокировки.std::condition_variable, std::condition_variable_any)thread_local для объявления локальных данных потокаБолее подробный обзор новой библиотеки потоков C++ 0x я дал в своей статье на devx.com: Упрощенная многопоточность в C++ 0x
Я пишу о многопоточности и параллелизме в C++ на мой блог. Еще пишу книгу по теме: Параллелизм C++ в действии.
Можно ли что-нибудь добавить теперь, когда C++ 11 отсутствует? Я могу представить, что теперь мы можем использовать семантику перемещения?
Да, вы можете использовать семантику перемещения с std::thread и std::async.
Когда вы говорите «как новые стандарты C++ упрощают» параллельное программирование, я предполагаю, что вы говорите о скором (?) Выпуске стандарта C++ 09.
Новый стандарт в том виде, в каком он сейчас представлен в виде проекта, поддерживает следующие элементы, которые помогают при параллельном программировании:
Кто-нибудь еще написал хорошее резюме об этих функциях?
Я думаю, что они в значительной степени основаны на boost :: thread, поэтому между этой документацией и новым стандартом не должно быть большой разницы.
Мой немного другой подход, специфичный для будущих направлений парадигм программирования:
Параллелизм заключается в написании вашей программы таким образом, чтобы она могла выполнять несколько задач одновременно, если оборудование поддерживает это. В настоящее время большинство языков имеют довольно тяжелые и сложные механизмы, позволяющие программисту указать это (например, потоки с ручной синхронизацией, директивы препроцессора OpenMP и т. д.).
По мере улучшения оборудования оно будет улучшаться по горизонтали (больше ядер), а не по вертикали (более быстрое одно ядро). Это означает, что приложениям потребуется «скрытый параллелизм» для масштабирования с помощью «более быстрого» оборудования. Языки в настоящее время пытаются развиваться, чтобы наилучшим образом поддерживать это, чтобы быть лучшим языком для будущего развития.
В C++ 0x добавлена дополнительная встроенная поддержка «старых» методов параллелизма программирования. Различные поставщики компиляторов добавляют «новые» методы, которые абстрагируют модель потоков и позволяют во время выполнения принимать решения о количестве потоков и т. д. (На основе аппаратного обеспечения машины); для Microsoft, в частности, см. F#, среду выполнения параллелизма, параллельные расширения и т. д.
Надеюсь, это поможет.
C++ CSP2 - простой параллелизм для C++
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP основан на правильной параллельной парадигме, в отличие от потоков, блокировок и всех других вещей, которые добавляются в последнюю очередь.
(См. Occam-Pi для языка параллельного программирования (также на основе CSP))
Это лучшая статья для понимания параллельного программирования: Параллельное программирование
После прочтения вы получите полное представление о параллельном программировании и C++.
Вкратце, мы можем сказать, что параллельное программирование - это многозадачность. Когда программа блокируется, она может делать другие вещи. Обычно мы блокируемся во время ожидания сетевых подключений и операций ввода-вывода. Мы можем облегчить параллельное программирование, используя fork() и библиотеки потоков.
Отправленная вами ссылка возвращает ошибку 404.
Если параллельные вычисления для вас новичок, обязательно ознакомьтесь с некоторыми базовыми статьями, такими как en.wikipedia.org/wiki/Concurrent_programming.