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

Распараллеливание циклов с ипользованием OpenMP - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Библиотека для xml парсинга http://www.cyberforum.ru/cpp-beginners/thread668562.html
Доброго времени суток. У меня появилась необходимость чтения xml из потока (файлы будут находится на другой машине). Библиотеки, которые я знаю, вроде, поддерживают только полную загрузку документа xml, а уже после этого его считывания. Подскажите, пожалуйста, какую-нибудь библиотеку, если она есть, которая бы удовлетворяла моим потребностям, желательно с лицензией MIT или ей подобной. ...
C++ sizeof Подскажите пожалуйста что делаю не так? в базовом классе gameElement, имеется матрица указателей на базовый класс: gameElement* arr; есть класс наследник: wall. В конструкторе класса wall имеются такие строчки: wall::wall(void) { wallCharacteristics.movementOpportunity = false; arr = new wall; http://www.cyberforum.ru/cpp-beginners/thread668553.html
C++ Создание на C++ программы с MySQL
Всем привет! Слышал что на этом форуме могут помочь написать программку. Задача: 1) Программа определяет разрядность и копирует ключ реестра. 2) Запускает файл другой программы и перед запуском возвращает ключ если тот сменился и делает POST запрос в б.д. (MySQL) Сразу говорю я чайник :) Есть вознаграждение за помощь. Мой скайп: trali-vali-pasatigi
Не компилируется программа вывода текста на экран C++
Только начал изучать С++ по книге Шилдта и вот первая же программа не компилируется в VS 2010: /*Программа №1 - Перваяя С++-программа. Введите эту программу, затем скомпилируйте её и выполните */ #include <iostream> using namespace std; // main() - начало выполнения программы. int main() {
C++ Найти приближенное значение определенного интеграла по методу прямоугольников с точностью e=10^-3 http://www.cyberforum.ru/cpp-beginners/thread668486.html
Помогите с решение задачи, суть проблемы в том, что не знаю как сделать точность значения. Так же помогите со 2-м кодом. 1-й код: #include "stdafx.h" #include <iostream> #include <math.h> #include <Windows.h> using namespace std;
C++ Defines the entry point for the console application #include "stdafx.h" #include <iostream> using namespace std; int Prime(unsigned long a) { unsigned long i; if (a == 2) return 1; if (a == 0 || a == 1 || a % 2 == 0) подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
27.02.2014, 23:27     Распараллеливание циклов с ипользованием OpenMP
все зависит от скорости операций, которые паралеллятся.
в вашем случае операции достаточно простые и больше времени тратится на
распаралелливание и управление тем, что происходит.
когда итерации цикла становятся тяжелее, то разница будет в пользу распаралелленного кода.
вот примерчик такой попробуйте у себя позапускать:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
 
using namespace std;
 
class TimeReport
{
  const std::string m_title;
  const double m_startTime;
 
public:
  TimeReport(const std::string& title)
    : m_title(title)
    , m_startTime(omp_get_wtime())
  {
  }
 
  ~TimeReport()
  {
    const double endTime = omp_get_wtime();
    std::cout << m_title << " : " << endTime - m_startTime << std::endl;
  }
 
private:
  TimeReport(const TimeReport&);
  TimeReport& operator = (const TimeReport&);
};
 
 
void LongFunction()
{
  const int iterations = 1000;
  for (int i = 0; i < iterations; ++i)
  {
    for (int j = 0; j < iterations / 10; ++j)
    {
      const double x = 1. / (i + 1);
      const double y = 1. / (j + i);
      const double z = (sin(x) * sin(y));
      if (z > 1000)
      {
        break;
      }
    }
  }
}
 
void ShortFunction()
{
  // just empty function
}
 
 
int main()
{
  const int iterations = 1000;
 
  {
    TimeReport timeReport("Long parallel ");
    #pragma omp parallel for
    for (int i = 0; i < iterations; ++i)
    {
      LongFunction();
    }
  }
 
  {
    TimeReport timeReport("Long serial   ");
    for (int i = 0; i < iterations; ++i)
    {
      LongFunction();
    }
  }
 
  {
    TimeReport timeReport("Short parallel");
    #pragma omp parallel for
    for (int i = 0; i < iterations; ++i)
    {
      ShortFunction();
    }
  }
 
  {
    TimeReport timeReport("Short serial  ");
    for (int i = 0; i < iterations; ++i)
    {
      ShortFunction();
    }
  }
 
  return 0;
}
у меня на одном из запусков выдает:
Long parallel : 1.50833
Long serial : 6.86634
Short parallel : 0.00240066
Short serial : 2.4542e-005

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