Разница между OpenMP и threadprivate и частная

Я пытаюсь распараллелить программу на C с помощью OpenMP.

Я хотел бы узнать больше о:

  1. различия между threadprivate

1 ответов


наиболее важные различия, которые вы должны запомнить:

  • A private переменная локальна для региона и большую часть времени будет помещаться на стек. Время жизни конфиденциальности переменной - это время, определенное в предложении области данных. Каждый поток (включая основной поток) создает частную копию исходной переменной (новая переменная больше не связана с исходным хранилищем переменная.)

  • A threadprivate переменная с другой стороны, скорее всего, будет помещена в кучу или локальное хранилище потока (это можно рассматривать как глобальную память, локальную для потока). А threadprivate переменная сохраняется по регионам (в зависимости от некоторых ограничений). Основной поток использует исходную переменную, все остальные потоки делают частную копию исходной переменной (основная переменная по-прежнему хранение-связано с исходной переменной).


  • есть и более сложные различия:

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

    • Но данные в threadprivate общий блоки следует считать неопределенными при входе в первую параллельную область, если a предложение. Когда общий блок появляется в threadprivate директива, каждая копия потока инициализируется один раз до ее первого использования.

  • на OpenMP Технические Характеристики (раздел 2.14.2) на самом деле дают очень хорошее описание (а также более подробно)