Я пытаюсь распараллелить программу на C с помощью OpenMP.
Я хотел бы узнать больше о:
- Различия между директивой threadprivate и частным и
- В каких случаях мы должны использовать любой из них.
Насколько я знаю, разница - это глобальная область с threadprivate и сохраненным значением в параллельных регионах. В нескольких примерах я нашел несколько примеров: если часть кода содержит некоторые глобальные/статические переменные, которые должны быть приватизированы, эти переменные включаются в список threadprivate, а их начальные значения копируются в частные копии, используя copyin.
Однако существует ли какое-либо правило, которое запрещает нам использовать предложение private для работы с глобальными/статическими переменными? возможно, какие-либо подробности реализации?
Я не мог найти никакого объяснения в спецификации OpenMP3.0.