Когда я пишу этот код:
int i = 0;
int total = 0;
#pragma omp parallel
{
int iID = omp_get_thread_num();
printf("1.I am Thread %d\n", omp_get_thread_num());
#pragma omp for
for (i = 0; i < 20000; i++)
{
total += i;
int iID = omp_get_thread_num();
printf("2.I am Thread %d\n", omp_get_thread_num());
}
}
std::cout << "OpenMP total:" << total<< std::endl;
, я получаю правильный результат. Но у меня есть вопрос. В for l oop разве не требуется #pragma omp atomic
, чтобы убедиться, что «total» вычисляется правильно?