Форум программистов, компьютерный форум CyberForum.ru

С++ под Linux

Войти
Регистрация
Восстановить пароль
 
Dgaizer
41 / 41 / 1
Регистрация: 25.03.2014
Сообщений: 352
#1

Программа для OpenMP С++ - C++ Linux

26.10.2016, 11:35. Просмотров 556. Ответов 3

Друзья как распараллелить программу на 8 ядер потоков (threads)
впервые столкнулся с опенмпи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <sys/time.h>
#include <math.h>
#include <stdio.h>
int main(){
int n = 1000000000;
double iv; //время выполнения программы;
struct timeval st, et;
gettimeofday(&st, NULL); //замеряем начальное время
//вычисляем n сложений
int summ = 0;
for (int i=0;i<n;i++)
{
summ++;
}
gettimeofday(&et, NULL); //замеряем конечное время
//рассчитываем время выполнения программы
iv = (et.tv_sec * 1.0e6 + et.tv_usec) - (st.tv_sec * 1.0e6 + st.tv_usec);
printf("msec: %f, sec: %f\n", iv, iv / 1e6);
return 0;
}

И потом сделать прогу тоже с параллел вычислениями для:
Вычисления значения функции f(x) на отрезке [1,N+1] с шагом h=N/P , где N – 13
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2016, 11:35     Программа для OpenMP С++
Посмотрите здесь:

C++ Linux Программа для контроля количества UNIX-приложений.
C++ Linux Программа для передачи кодов с клавы и мышм по сети на другие компы
Расчет пары чисел OpenMP Linux C++ Linux
C++ Linux Какой редактор c++ выбрать, если программа для компиляции требует cmake . make
Синхронизация в OpenMP C++ Linux
C++ Linux Как скомпилировать программу с технологиями openmp?
C++ Linux Остановка всех потоков OpenMP

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Loafer
8 / 3 / 2
Регистрация: 03.11.2016
Сообщений: 13
Записей в блоге: 3
03.11.2016, 17:42     Программа для OpenMP С++ #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <math.h>
#include <omp.h>
#include <stdio.h>
 
int main()
{
  int n = 1000000000;
  double iv; // Время выполнения программы;
  int summ = 0;
  double begin = omp_get_wtime(); // Замеряем начальное время
  #pragma omp parallel for reduction(+ : summ)
  for (int i = 0; i < n; i++) {
    summ++;
  }
  double end = omp_get_wtime(); // Замеряем конечное время
  // Рассчитываем время выполнения программы
  iv = end - begin;
  printf("sum = %d, sec: %f\n", summ, iv);
  return 0;
}
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
03.11.2016, 19:42     Программа для OpenMP С++ #3
http://www.cyberforum.ru/blogs/18334/blog2965.html
Dgaizer
41 / 41 / 1
Регистрация: 25.03.2014
Сообщений: 352
19.11.2016, 12:15  [ТС]     Программа для OpenMP С++ #4
Evg, Скажите как сделать я так понимаю у меня не правильно вот считается функция что выше показана. Но как разделить ее выполнение на потоки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
#include <omp.h>
#include <iostream>
#include <time.h>
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int n = 130000, i;
    int x = 13;
    double y = 0;
    double iv; //время выполнения программы;
    clock_t st, et;
    st = clock();
    omp_set_num_threads(4);
#pragma omp parallel  private (i,x) shared (n) 
    {
        int id = omp_get_thread_num();
        int numt = omp_get_num_threads();
        for (i = id + 1; i <= n; i = i + numt)
        {
            y = abs(pow(x, 2) - pow(x, 3)) - (7 * x / (pow(x, 3) - (15 * x)));
 
        }
    }
    et = clock(); //замеряем конечное время
    iv = (double)(et - st) / CLOCKS_PER_SEC;
    printf("time is %f\n", iv);
    
    printf("Y", y);
    system("pause");
    return 0;
}
Yandex
Объявления
19.11.2016, 12:15     Программа для OpenMP С++
Ответ Создать тему
Опции темы

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru