Разница между OpenMP и threadprivate и частная
Я пытаюсь распараллелить программу на C с помощью OpenMP.
Я хотел бы узнать больше о:
- различия между threadprivate
1 ответов
наиболее важные различия, которые вы должны запомнить:
A
private
переменная локальна для региона и большую часть времени будет помещаться на стек. Время жизни конфиденциальности переменной - это время, определенное в предложении области данных. Каждый поток (включая основной поток) создает частную копию исходной переменной (новая переменная больше не связана с исходным хранилищем переменная.)A
threadprivate
переменная с другой стороны, скорее всего, будет помещена в кучу или локальное хранилище потока (это можно рассматривать как глобальную память, локальную для потока). Аthreadprivate
переменная сохраняется по регионам (в зависимости от некоторых ограничений). Основной поток использует исходную переменную, все остальные потоки делают частную копию исходной переменной (основная переменная по-прежнему хранение-связано с исходной переменной).
-
есть и более сложные различия:
переменные, определенные как
private
не определены для каждого потока при входе в конструкцию, и соответствующая общая переменная не определена при выходе из параллельной конструкции; начальное состояниеprivate
указатель не определен.Но данные в
threadprivate
общий блоки следует считать неопределенными при входе в первую параллельную область, если a предложение. Когда общий блок появляется вthreadprivate
директива, каждая копия потока инициализируется один раз до ее первого использования.
-
на OpenMP Технические Характеристики (раздел 2.14.2) на самом деле дают очень хорошее описание (а также более подробно)