У меня есть цикл 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)