Void main()
{ Int i, n; int num_threads=4; // количество нитей int a[10], b[10], c[10]; // целочисленные массивы for(i=0; i<10; i++) // инициализация элементов массивов { a[i]=i+1; b[i]=i+1; printf("a[%d]=%d b[%d]=%d\n",i,a[i],i,b[i]); } printf("\n RESULT \n"); omp_set_num_threads(num_threads); // функция OpenMP, устанавливает // количество нитей параллельной области // вход в параллельную область, порождение установленного числа нитей, #pragma omp parallel for private(i) for(i=0; i<10; i++) { n=omp_get_thread_num(); // функция OpenMP, возвращает номер нити c[i]=a[i]+b[i]; printf("n=%d c[%d]=%d\n",n,i,c[i]); } }
Технология программирования OpenMP. Конструкции разделения работ Конструкция разделения работ распределяет выполнение операторов среди группы нитей. Директивы разделения работ не порождают новые нити и не выполняют синхронизацию при входе в конструкцию разделения работ. OpenMP определяет три конструкции разделения работ: Оператор for Оператор sections Оператор single
Оператор for Оператор for определяет итерационную конструкцию для некоторой области данных, в которой итерации соответствующего цикла будут выполняться параллельно. Итерации цикла for распределяются среди уже существующих нитей. Синтаксис конструкции for: #pragma omp for [оператор [ оператор]... ]
|