Код для теста (у моего процессора 6 ядер, вы можете заменить omp_set_num_threads (12) на omp_set_num_threads (4), если у вас не так много ядер:
#include <stdio.h>
#include <omp.h>
#include<time.h>
int main()
{
int A;
omp_set_num_threads(12);
clock_t begin, end;
begin = clock();
#pragma omp parallel for firstprivate(A) lastprivate(A)
for (int i = 0; i < 1000000000; i++)
{
A = i;
int num = omp_get_thread_num();
//printf("Thread %i got %d\n", num, A);
}
end = clock();
printf("At the end, A will be: %i\n", A);
printf("Time: %f", (double)(end - begin) / CLOCKS_PER_SEC);
return 0;
}
Результат останется прежним, если Я удаляю firstprivate(A)
, использую lastprivate(A)
только для этого l oop, поэтому мне любопытно, могу ли я использовать только lastprivate(A)
вместо firstprivate(A) lastprivate(A)
в любых случаях.
Среда:
Windows 10 + Visual Studio 2019, C