Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Распараллеливание программ. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
101
          

Доказательство              


             
  
Доказательство   

         
102
   
      
                
  
                
103
2. ОСНОВНЫЕ СРЕДСТВА ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ
ИСПОЛЬЗОВАНИЕ OpenMP
                           
                       
 π           
static long num_steps = 100000; double step; void main () { int i; double x, pi, sum = 0.0; step = 1.0/(double) num_steps; #pragma omp parallel for private(i,x) shared(sum) \ reduction(+:sum) for (i=1;i<= num_steps; i++){ x = (i-0.5)*step; sum += 4.0/(1.0+x*x);
}
pi = step * sum;
}
104
Основные понятия
       
Исходной программой Директивой OpenMP
            
Программой OpenMP 
Структурной областью
        структурным блоком
   

    
 
              
          
105
           
                

      
    
                 
Дополнительно каждая нить может иметь своё временное представление памяти. Это временное представление не является необходимой частью мо­дели памяти OpenMP, но учитывает наличие в современных вычислительных системах регистров процессора, кэшей различных уровней и других структур, позволяющих нити кэшировать переменные и избегать лишних обращений к памяти.
                            
106
 
               

              #pragma omp

   _OPENMP   
ДИРЕКТИВЫ OpenMP API



#pragma omp parallel [clause[ [, ]clause] ...] structured-block
                   
        
#include <omp.h>
107
void subdomain(float *x, int istart, int ipoints)
{
int i; for (i = 0; i < ipoints; i++) x[istart+i] = 123.456;
}
void sub(float *x, int npoints)
{
int iam, nt, ipts, istart; #pragma omp parallel default(shared) \ private(iam,nt,ipts,istart)
{
iam = omp_get_thread_num(); nt = omp_get_num_threads(); ipts = npoints / nt; /* size of partition */ istart = iam * ipts; /* starting array index */ if (iam == nt-1) /* last thread may do more */ ipts = npoints - istart; subdomain(x, istart, ipts);
} }
int main()
{
float array[10000]; sub(array, 10000); return 0;
}
   



         
#pragma omp for [clause[[,] clause] ... ] for-loop
  
108
 
#include <math.h> void a8(int n, int m, float *a, float *b, float *y,
float *z)
{
int i; #pragma omp parallel
{
#pragma omp for nowait for (i=1; i<n; i++)
b[i] = (a[i] + a[i-1]) / 2.0;
#pragma omp for nowait for (i=0; i<m; i++) y[i] = sqrt(z[i]);
} }

  
#pragma omp sections [clause[[,] clause] ...]
{ [#pragma omp section]
structured-block [#pragma omp section structured-block ]
... }

               

#pragma omp single [clause[[,] clause] ...] structured-block

       
109
 
SUBROUTINE A11_1(AA, BB, CC, DD, EE, FF, N)
INTEGER N REAL AA(N,N), BB(N,N), CC(N,N), DD(N,N) !$OMP PARALLEL !$OMP WORKSHARE AA = BB CC = AA + DD !$OMP END WORKSHARE !$OMP END PARALLEL
END SUBROUTINE A11_1


   
#pragma omp master structured-block

          
#pragma omp critical [(name)] structured-block

         
#pragma omp barrier
110

      
#pragma omp atomic
expression-stmt

      
#pragma omp flush [(list)]

        
omp_test_lock, omp_set_nest_lock, omp_unset_nest_lock и omp_test_nest_lock
omp_set_lock, omp_unset_lock,
  

  
#pragma omp ordered
structured-block
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]