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

С++ под Linux

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

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

26.10.2016, 11:35. Просмотров 585. Ответов 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
0
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2016, 11:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для OpenMP С++ (C++ Linux):

Параллельная программа для метода холецкого с помощью openMp и mpi - C++
Товарищи,помогите пожалуйста с параллельным программированием: надо написать параллельную программу для метода холецкого с помощью openMp...

Синхронизация в OpenMP - C++ Linux
начал разбираться с многопоточным программированием на С++. В данный момент пытаюсь вкурить OpenMP. Параллелю метод Гаусса для решения...

OpenMP распараллеливание цикла - C++
Привет кодеры! Нужна ваша помощь. У меня есть код который нужно распараллелить и тем самым получить выигрыш по времени выполнения. Для...

Как добиться ускорения OpenMP C++ - C++
Доброго времени суток. Я новичок в параллельном программировании. Передо мной поставили задачу расспараллелить с помощью OpenMP решение...

Остановка всех потоков OpenMP - C++ Linux
Всем привет, уважаемые форумчане! Хочу у вас спросить о такой проблеме: &quot;Как остановить выполнение потоков в OpenMP?&quot; Вопрос казался бы...

Расчет пары чисел OpenMP Linux - C++ Linux
кто может помочь?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Loafer
8 / 3 / 2
Регистрация: 03.11.2016
Сообщений: 13
Записей в блоге: 8
03.11.2016, 17:42 #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;
}
0
Evg
Эксперт CАвтор FAQ
17809 / 6019 / 388
Регистрация: 30.03.2009
Сообщений: 16,535
Записей в блоге: 26
03.11.2016, 19:42 #3
http://www.cyberforum.ru/blogs/18334/blog2965.html
1
Dgaizer
41 / 41 / 1
Регистрация: 25.03.2014
Сообщений: 361
19.11.2016, 12:15  [ТС] #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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 12:15
Привет! Вот еще темы с ответами:

Как скомпилировать программу с технологиями openmp? - C++ Linux
Доброго времени суток. ОС: Ubuntu 14.04 Пробовал сделать так: g++ -o cyber -lgomp cyber.c Успеха не добился. Попробовал написать...

C++ OpenMP Определенный интеграл - метод Симпсона - C++
Ребят, имею следующее задание. В С++ не мастер, но я никак не могу понять, как реализовать этот интеграл с OpenMP, может кто-нибудь сможет...

Перемножения матриц с OpenMP дольше чем... - C++
Здравствуйте! Написал 2 программы перемножения матриц, одну с использованием OpenMP, другую - просто. 2 матрицы 1000х1000 с...

Программа для МК - C++
Доброго времен суток участники форума CyberForum.RU. Есть задача &quot;микроконтроллер подключен к пк через usb, в программе вводится...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.11.2016, 12:15
Ответ Создать тему
Опции темы

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