правильное использование функции interal и openmp

У меня есть цикл for, который вызывает внутренняя функция:

some variables
for(int i=0; i< 10000000; i++)
    func(variables)

По сути, func получает ссылку на некоторый массив A и вставляет значения в A [i] - поэтому я уверен , что каждый вызов func на самом деле пытается вставить значение в другое place в A, а все остальные входные переменные остаются такими же, как были до цикла for. Итак, func является потокобезопасным.

Могу ли я безопасно изменить код на

some variables
#pragma omp parallel for
for(int i=0; i< 10000000; i++)
    func(variables)

Насколько я понимаю из руководств по openmp, этого недостаточно - поскольку библиотеки openmp не будут знать, что переменные, переданные func, действительно поточно-ориентированы, и так что это приведет к попыткам выполнить синхронизацию, которая замедлит работу, и мне нужно будет объявить переменные частными и т. д. Но на самом деле, когда вы пытаетесь использовать приведенный выше код, кажется, что он действительно работает быстрее и параллельно - это как ожидалось? Я просто хотел убедиться, что что-то не упускаю.

Объявление функции:

 func(int i, int client_num, const vector<int>& vec)
5
задан dan12345 2 November 2011 в 16:44
поделиться