🗊Презентация Примеры использования OpenMP. Вычисление определенного интеграла

Нажмите для полного просмотра!
Примеры использования OpenMP. Вычисление определенного интеграла, слайд №1Примеры использования OpenMP. Вычисление определенного интеграла, слайд №2Примеры использования OpenMP. Вычисление определенного интеграла, слайд №3Примеры использования OpenMP. Вычисление определенного интеграла, слайд №4Примеры использования OpenMP. Вычисление определенного интеграла, слайд №5Примеры использования OpenMP. Вычисление определенного интеграла, слайд №6Примеры использования OpenMP. Вычисление определенного интеграла, слайд №7Примеры использования OpenMP. Вычисление определенного интеграла, слайд №8Примеры использования OpenMP. Вычисление определенного интеграла, слайд №9Примеры использования OpenMP. Вычисление определенного интеграла, слайд №10Примеры использования OpenMP. Вычисление определенного интеграла, слайд №11Примеры использования OpenMP. Вычисление определенного интеграла, слайд №12Примеры использования OpenMP. Вычисление определенного интеграла, слайд №13Примеры использования OpenMP. Вычисление определенного интеграла, слайд №14Примеры использования OpenMP. Вычисление определенного интеграла, слайд №15Примеры использования OpenMP. Вычисление определенного интеграла, слайд №16Примеры использования OpenMP. Вычисление определенного интеграла, слайд №17Примеры использования OpenMP. Вычисление определенного интеграла, слайд №18Примеры использования OpenMP. Вычисление определенного интеграла, слайд №19Примеры использования OpenMP. Вычисление определенного интеграла, слайд №20Примеры использования OpenMP. Вычисление определенного интеграла, слайд №21Примеры использования OpenMP. Вычисление определенного интеграла, слайд №22Примеры использования OpenMP. Вычисление определенного интеграла, слайд №23Примеры использования OpenMP. Вычисление определенного интеграла, слайд №24Примеры использования OpenMP. Вычисление определенного интеграла, слайд №25Примеры использования OpenMP. Вычисление определенного интеграла, слайд №26Примеры использования OpenMP. Вычисление определенного интеграла, слайд №27Примеры использования OpenMP. Вычисление определенного интеграла, слайд №28Примеры использования OpenMP. Вычисление определенного интеграла, слайд №29Примеры использования OpenMP. Вычисление определенного интеграла, слайд №30

Содержание

Вы можете ознакомиться и скачать презентацию на тему Примеры использования OpenMP. Вычисление определенного интеграла. Доклад-сообщение содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Примеры использования OpenMP
Описание слайда:
Примеры использования OpenMP

Слайд 2





 Вычисление определенного интеграла
Описание слайда:
Вычисление определенного интеграла

Слайд 3





Метод прямоугольников
Описание слайда:
Метод прямоугольников

Слайд 4





Последовательность выполнения
Последовательная версия. 
Базовая реализация алгоритма интегрирования 
Эффект применения компилятора 
Использование предварительных вычислений сложных функций
Алгоритмическая оптимизация
Параллельная версия. 
Варианты распараллеливание базового алгоритма
Распараллеливание оптимизированного алгоритма
Описание слайда:
Последовательность выполнения Последовательная версия. Базовая реализация алгоритма интегрирования Эффект применения компилятора Использование предварительных вычислений сложных функций Алгоритмическая оптимизация Параллельная версия. Варианты распараллеливание базового алгоритма Распараллеливание оптимизированного алгоритма

Слайд 5





Базовый алгоритм
Должен содержать код, несколько раз запускающий тестируемую реализацию алгоритма вычислений.
Должен вычислять минимальное, максимальное и среднее времена ее работы.
Должен представлять результаты вычислений.
Параметры вычислений задаются в программе.
Провести анализ использования разных режимов компиляции.
Описание слайда:
Базовый алгоритм Должен содержать код, несколько раз запускающий тестируемую реализацию алгоритма вычислений. Должен вычислять минимальное, максимальное и среднее времена ее работы. Должен представлять результаты вычислений. Параметры вычислений задаются в программе. Провести анализ использования разных режимов компиляции.

Слайд 6





Распараллеливание базового алгоритма
Геометрическая декомпозиция данных (разделение данных на части и применение к ним одного и того же алгоритма).
Локализация данных.
Анализ результатов (гонка данных).
Описание слайда:
Распараллеливание базового алгоритма Геометрическая декомпозиция данных (разделение данных на части и применение к ним одного и того же алгоритма). Локализация данных. Анализ результатов (гонка данных).

Слайд 7





Геометрическая декомпозиция данных
По столбцам
По строкам
Блочно
Описание слайда:
Геометрическая декомпозиция данных По столбцам По строкам Блочно

Слайд 8





Оптимизация базового алгоритма
Предварительное вычисление сложных математических функций (sin, cos, exp и др.).
Алгоритмическая оптимизация (исключение многократного вычисления одних и тех же данных, предварительные расчеты). 
Буферизация.
Описание слайда:
Оптимизация базового алгоритма Предварительное вычисление сложных математических функций (sin, cos, exp и др.). Алгоритмическая оптимизация (исключение многократного вычисления одних и тех же данных, предварительные расчеты). Буферизация.

Слайд 9





Распараллеливание оптимизированного алгоритма
Распараллеливание с учетом уже полученных результатов:
В данной задаче наилучшие результаты дает распараллеливание с разделением сетки интегрирования по столбцам (внешний цикл).
Распараллелить основные вычислительные циклы.
Описание слайда:
Распараллеливание оптимизированного алгоритма Распараллеливание с учетом уже полученных результатов: В данной задаче наилучшие результаты дает распараллеливание с разделением сетки интегрирования по столбцам (внешний цикл). Распараллелить основные вычислительные циклы.

Слайд 10





 Пример выполнения вычислений
Описание слайда:
Пример выполнения вычислений

Слайд 11





Структура программы
Описание слайда:
Структура программы

Слайд 12





 Пример выполнения вычислений
Базовый алгоритм
Описание слайда:
Пример выполнения вычислений Базовый алгоритм

Слайд 13





Основная программа
int main ()  { 
int i; 
double time,  res, min_time, max_time, avg_time;
int numbExp = 10;
min_time = max_time = avg_time = experiment(&res); 
for(i = 0; i < numbExp - 1; i ++) {
 time = experiment(&res); 
avg_time += time; 
if(max_time < time) max_time = time; 
if(min_time > time) min_time = time; } 
printf(“Интеграл равен: %lf; \n", res); 
printf(«Время выполнения: %lf; %lf; %lf \n", 
         avg_time / numbExp, min_time, max_time); 
return 0; 
}
Описание слайда:
Основная программа int main () { int i; double time, res, min_time, max_time, avg_time; int numbExp = 10; min_time = max_time = avg_time = experiment(&res); for(i = 0; i < numbExp - 1; i ++) { time = experiment(&res); avg_time += time; if(max_time < time) max_time = time; if(min_time > time) min_time = time; } printf(“Интеграл равен: %lf; \n", res); printf(«Время выполнения: %lf; %lf; %lf \n", avg_time / numbExp, min_time, max_time); return 0; }

Слайд 14





Функция experiment
double experiment(double *res) 
{ 
double stime, ftime; 
double a1 =  0.0 ; 
double a1 = a2 = 0.0 ; 
double b1 =   16.0; 
double  b2 =  16.0; 
double h = 0.001; 
stime = omp_get_wtime( ); 
integral(a1, b1, a2, b2, h, res); 
ftime = omp_get_wtime( );
 return (ftime - stime);
}
Описание слайда:
Функция experiment double experiment(double *res) { double stime, ftime; double a1 = 0.0 ; double a1 = a2 = 0.0 ; double b1 = 16.0; double b2 = 16.0; double h = 0.001; stime = omp_get_wtime( ); integral(a1, b1, a2, b2, h, res); ftime = omp_get_wtime( ); return (ftime - stime); }

Слайд 15





Функция integral
void integral(const double a1, const double b1,
const double a2, const double b2, const double h,
double *res){
int i, j, n1, n2;          double sum,  x, y; 
n1 = (int)((b1 - a1) / h); n2 = (int)((b2 - a2) / h);
sum = 0.0;
for( i = 0; i < n1; i++) {
       for(j = 0; j < n2; j++) {
           x = a1 + i * h + h / 2;
           y = a2 + j * h + h / 2;
sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h;             }         }   
  *res = sum;
}
Описание слайда:
Функция integral void integral(const double a1, const double b1, const double a2, const double b2, const double h, double *res){ int i, j, n1, n2; double sum, x, y; n1 = (int)((b1 - a1) / h); n2 = (int)((b2 - a2) / h); sum = 0.0; for( i = 0; i < n1; i++) { for(j = 0; j < n2; j++) { x = a1 + i * h + h / 2; y = a2 + j * h + h / 2; sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } } *res = sum; }

Слайд 16





 Пример выполнения вычислений
Базовый алгоритм - распараллеливание
Описание слайда:
Пример выполнения вычислений Базовый алгоритм - распараллеливание

Слайд 17





Распараллеливание по столбцам
#pragma omp parallel for 
for(i = 0; i < n1; i++) 
  { 
       for(j = 0; j < n2; j++) 
        { 
           x = a1 + i * h + h / 2; 
           y = a2 + j * h + h / 2;
sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * 
                  (b2 - a2))) * h * h; 
         } 
   }
Описание слайда:
Распараллеливание по столбцам #pragma omp parallel for for(i = 0; i < n1; i++) { for(j = 0; j < n2; j++) { x = a1 + i * h + h / 2; y = a2 + j * h + h / 2; sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } }

Слайд 18





Распараллеливание по столбцам с учетом data race
#pragma omp parallel for private (x, y, j) 
                                                    reduction(+: sum)
for(i = 0; i < n1; i++) 
  { 
       for(j = 0; j < n2; j++) 
        { 
           x = a1 + i * h + h / 2; 
           y = a2 + j * h + h / 2;
sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * 
                   (b2 - a2))) * h * h; 
         } 
   }
Описание слайда:
Распараллеливание по столбцам с учетом data race #pragma omp parallel for private (x, y, j) reduction(+: sum) for(i = 0; i < n1; i++) { for(j = 0; j < n2; j++) { x = a1 + i * h + h / 2; y = a2 + j * h + h / 2; sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } }

Слайд 19





Распараллеливание по строкам
for(i = 0; i < n1; i++) 
  { 
#pragma omp parallel for private (x, y) 
                                                     reduction(+: sum) 
       for(j = 0; j < n2; j++) 
        { 
           x = a1 + i * h + h / 2; 
           y = a2 + j * h + h / 2;
sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * 
                   (b2 - a2))) * h * h; 
         } 
   }
Описание слайда:
Распараллеливание по строкам for(i = 0; i < n1; i++) { #pragma omp parallel for private (x, y) reduction(+: sum) for(j = 0; j < n2; j++) { x = a1 + i * h + h / 2; y = a2 + j * h + h / 2; sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } }

Слайд 20





Блочное разделение данных 
omp_set_nested(true);
#pragma omp parallel for
for (i = 0; i < n1; i++)
{
#pragma omp parallel for private (x, y) 
                                          reduction(+: sum) 
    for(j = 0; j < n2; j++) 
    {
      x = a1 + i * h + h / 2;
       y = a2 + j * h + h / 2; 
sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) /  
                 ((b1 - a1) * (b2 - a2))) * h * h; 
     } 
}
Описание слайда:
Блочное разделение данных omp_set_nested(true); #pragma omp parallel for for (i = 0; i < n1; i++) { #pragma omp parallel for private (x, y) reduction(+: sum) for(j = 0; j < n2; j++) { x = a1 + i * h + h / 2; y = a2 + j * h + h / 2; sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } }

Слайд 21





Результаты вычислений
Описание слайда:
Результаты вычислений

Слайд 22





Влияние параметров распараллеливания циклов
Описание слайда:
Влияние параметров распараллеливания циклов

Слайд 23





 Пример выполнения вычислений
Оптимизированный алгоритм – 
распараллеливание
Описание слайда:
Пример выполнения вычислений Оптимизированный алгоритм – распараллеливание

Слайд 24





Использование предварительных вычислений сложных функций 
void integral(const double a1, const double b1,
const double a2, const double b2, const double h, double *res) {  int i, j, n1, n2;    double sum, x, y, *sinx, *cosy;   n1 = (int)((b1 - a1) / h);  
 n2 = (int)((b2 - a2) / h); sum = 0.0; 
sinx = new double [n1];  cosy = new double [n2];
 for(i = 0; i < n1; i++) 
{ x = a1 + i * h + h / 2; sinx[i] = sin(x * PI); }
for(j = 0; j < n2; j++) 
{ y = a2 + j * h + h / 2; cosy[j] = cos(y * PI); }
for(i = 0; i < n1; i++) 
{ for(j = 0; j < n2; j++) {sum += ((exp(sinx[i] * cosy[j]) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } }      *res = sum;
 delete [] sinx; delete [] cosy; }
Описание слайда:
Использование предварительных вычислений сложных функций void integral(const double a1, const double b1, const double a2, const double b2, const double h, double *res) { int i, j, n1, n2; double sum, x, y, *sinx, *cosy; n1 = (int)((b1 - a1) / h); n2 = (int)((b2 - a2) / h); sum = 0.0; sinx = new double [n1]; cosy = new double [n2]; for(i = 0; i < n1; i++) { x = a1 + i * h + h / 2; sinx[i] = sin(x * PI); } for(j = 0; j < n2; j++) { y = a2 + j * h + h / 2; cosy[j] = cos(y * PI); } for(i = 0; i < n1; i++) { for(j = 0; j < n2; j++) {sum += ((exp(sinx[i] * cosy[j]) + 1) / ((b1 - a1) * (b2 - a2))) * h * h; } } *res = sum; delete [] sinx; delete [] cosy; }

Слайд 25





Результаты вычислений
Описание слайда:
Результаты вычислений

Слайд 26





Загрузка ядер процессора
Описание слайда:
Загрузка ядер процессора

Слайд 27





 Пример выполнения вычислений
Вычисление интеграла методом Монте-Карло
Описание слайда:
Пример выполнения вычислений Вычисление интеграла методом Монте-Карло

Слайд 28





Метод Монте-Карло
Описание слайда:
Метод Монте-Карло

Слайд 29





Функция  integral
void integral(const double a1, const double b1, const double a2, const double b2, const double h, double *res)   {
int n=0;  double sum,  x, y, f;   
for(long int i=1;i<= nMax;i++)   {     x=abs((double)(rand()%((int)(b1 - a1)*Mrand))) /Mrand; 
y=abs((double)(rand()% ((int)(b2 - a2)*Mrand)))/Mrand;
f=abs((double)(rand()% ((int)(Fmax*Mrand))))/Mrand;
   if(func(x+a1, y+a2, a1, b1, a2, b2) <= f)  n++;    }
   sum=(b1 - a1)*(b2 - a2)*(Fmax)*n/nMax;
*res = sum;
}
Описание слайда:
Функция integral void integral(const double a1, const double b1, const double a2, const double b2, const double h, double *res) { int n=0; double sum, x, y, f; for(long int i=1;i<= nMax;i++) { x=abs((double)(rand()%((int)(b1 - a1)*Mrand))) /Mrand; y=abs((double)(rand()% ((int)(b2 - a2)*Mrand)))/Mrand; f=abs((double)(rand()% ((int)(Fmax*Mrand))))/Mrand; if(func(x+a1, y+a2, a1, b1, a2, b2) <= f) n++; } sum=(b1 - a1)*(b2 - a2)*(Fmax)*n/nMax; *res = sum; }

Слайд 30





Вычисление значений функции
#define nMax 1000000
#define Mrand 10000
#define Fmax 0.015
double func(double x, double y, const double a1, const double b1, const double a2, const double b2)
{
return  (exp(sin(x * PI) * cos(y * PI)) + 1)/ ((b1 - a1) * (b2 - a2));
}
Описание слайда:
Вычисление значений функции #define nMax 1000000 #define Mrand 10000 #define Fmax 0.015 double func(double x, double y, const double a1, const double b1, const double a2, const double b2) { return (exp(sin(x * PI) * cos(y * PI)) + 1)/ ((b1 - a1) * (b2 - a2)); }



Похожие презентации
Mypresentation.ru
Загрузить презентацию