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

распараллеливание - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание массива из строк http://www.cyberforum.ru/cpp-beginners/thread863682.html
В общем есть файл-словарик, в нем строки типа: popov-valera petrov-vasily ivanov-grisha Программа должна считывать этот словарик переводя в массив типа char для дальнейшего использования. #include <iostream> #include <cstdlib> #include <fstream> using namespace std;
C++ Указатель на метод класса! Ответьте пожалуйста на такой вопрос:Возможна ли такая ситуация и как ее реализовать правильно? Мне надо использовать функцию(void glutDisplayFunc(void (*func)(void))) и передать в качестве параметра указатель на функцию,которая является членом моего класса.При попытке сделать так: typedef void (glutPaint::*ptr)(); ptr p=&glutPaint::DrawSq; glutPaint pt; glutDisplayFunc((pt.*p)());... http://www.cyberforum.ru/cpp-beginners/thread863643.html
ошибка C++
при выводе данный на экран цифра "4" выдает непонятную таблицу из "левых" цифр, что не так не пойму. #include <fstream.h> #include <stdlib.h> #include <conio.h> #include <iomanip.h> class Diski { struct DISK { char name,format;
C++ Программа для выполнения указанных операций над матрицами
в общем нужна помощ написать прогу которая выполныет действия над матрицами 1)Сложение 2)Вычитание 3)Возведение в степень 4)Транспанирование 5)Замена строки 6)Проверка равенства 7)добавление нового столбца 8)Умножение в общем препод <censored> до ввода типа сделать поточный и как это сделать я не знаю...и вывод матрицы чтобы было не так:
C++ Определитель матрицы, разложением по произвольной строке http://www.cyberforum.ru/cpp-beginners/thread863631.html
Здравствуйте. Помогите передать этот код. Здесь считается определитель матрицы, путем разложения, но первой строке, а мне нужно по произвольной. #include <stdio.h> #include <stdlib.h> #include <locale.h> bool notInEx(int *lot, int v, int l){ for(int i = 0; i < l; i++) if(v == lot) return false; return true; }
C++ Символьные функции: getchar(),putchar(),gets(),puts() Есть программный код под такую постановку задачи: Задан массив. «Фамилия_стаж работы_зарплата». Преобразовать массив так: стаж работы увеличить на год, если он станет равен 10, то зарплату увеличить в 2 раза, если 15 – в 3 раза. #include "iostream.h" #include "windows.h" #define N 5 int main() { struct { подробнее

Показать сообщение отдельно
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.05.2013, 00:07     распараллеливание
разные алгоритмы параллелятся с разной эффективностью. Тут смотреть как оно все масштабируется, что,
что там со всякими кеш промахами, какова нагрузка на шину данных и прочее.
Вот пример тестиков немного разных циклов, запущенных в ДЕБАГЕ 12 студии (в релизе совсем другие цифры, т.к. код другой и распараллелилось соответственно по другому):


Max threads = 8

###################################
Test1:
serial time = 0.00319136
parallel time = 0.0707065
serial/parallel = 0.0451353

###################################
Test2:
serial time = 3.358
parallel time = 1.0248
serial/parallel = 3.27672

###################################
Test3:
serial time = 2.45181
parallel time = 0.722106
serial/parallel = 3.39536

Press any key to continue . . .


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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <omp.h>
 
#include <vector>
#include <iostream>
 
 
class TimeMeasurement
{
public:
  TimeMeasurement()
    : m_begin(omp_get_wtime())
  {
  }
 
  void Reset()
  {
    m_begin = omp_get_wtime();
  }
 
  double Elapsed() const
  {
    return omp_get_wtime() - m_begin;
  }
 
private:
  double m_begin;
};
 
 
typedef std::vector< std::vector<int> > Matrix;
 
Matrix CreateMatrix(unsigned w, unsigned h)
{
  return Matrix(h, std::vector<int>(w, 0));
}
 
 
void Test1()
{
  const unsigned side = 100;
  Matrix a = CreateMatrix(side, side);
  Matrix b = CreateMatrix(side, side);
  Matrix c = CreateMatrix(side, side);
 
  TimeMeasurement timeMeasurement;
 
 
  timeMeasurement.Reset();
 
  for (unsigned i = 0; i < side; ++i)
  {
    for (unsigned j = 0; j < side; ++j)
    {
      c[i][j] += a[i][j] * b[i][j];
    }
  }
 
  const double serialTime = timeMeasurement.Elapsed();
 
 
  timeMeasurement.Reset();
 
 
  #pragma omp parallel for
  for (int i = 0; i < side; ++i)
  {
    for (unsigned j = 0; j < side; ++j)
    {
      c[i][j] = a[i][j] * b[i][j];
    }
  }
 
  const double parallelTime = timeMeasurement.Elapsed();
 
  std::cout << "###################################" << std::endl;
  std::cout << "Test1:" << std::endl;
  std::cout << "serial   time   = " << serialTime << std::endl;
  std::cout << "parallel time   = " << parallelTime << std::endl;
  if (parallelTime > 0.0000001)
  {
    std::cout << "serial/parallel = " << serialTime / parallelTime << std::endl;
  }
  std::cout << std::endl;
}
 
void Test2()
{
  const unsigned side = 100;
  Matrix a = CreateMatrix(side, side);
  Matrix b = CreateMatrix(side, side);
  Matrix c = CreateMatrix(side, side);
 
  TimeMeasurement timeMeasurement;
 
 
  timeMeasurement.Reset();
 
  for (unsigned i = 0; i < side; ++i)
  {
    for (unsigned j = 0; j < side; ++j)
    {
      for (int k = 0; k < 1000; ++k)
      {
        c[i][j] = a[i][j] * b[i][j];
      }
    }
  }
 
  const double serialTime = timeMeasurement.Elapsed();
 
 
  timeMeasurement.Reset();
 
 
  #pragma omp parallel for
  for (int i = 0; i < side; ++i)
  {
    for (unsigned j = 0; j < side; ++j)
    {
      for (int k = 0; k < 1000; ++k)
      {
        c[i][j] = a[i][j] * b[i][j];
      }
    }
  }
 
  const double parallelTime = timeMeasurement.Elapsed();
 
  std::cout << "###################################" << std::endl;
  std::cout << "Test2:" << std::endl;
  std::cout << "serial   time   = " << serialTime << std::endl;
  std::cout << "parallel time   = " << parallelTime << std::endl;
  if (parallelTime > 0.0000001)
  {
    std::cout << "serial/parallel = " << serialTime / parallelTime << std::endl;
  }
  std::cout << std::endl;
}
 
void Test3()
{
  const unsigned side = 100;
  Matrix a = CreateMatrix(side, side);
  Matrix b = CreateMatrix(side, side);
  Matrix c = CreateMatrix(side, side);
 
  TimeMeasurement timeMeasurement;
 
 
  timeMeasurement.Reset();
 
  for (unsigned i = 0; i < side; ++i)
  {
    for (unsigned j = 0; j < side; ++j)
    {
      const int aa = a[i][j];
      const int bb = b[i][j];
      int cc = 0;
      for (int k = 0; k < 100000; ++k)
      {
        cc += aa * bb;
      }
      c[i][j] = cc;
    }
  }
 
  const double serialTime = timeMeasurement.Elapsed();
 
 
  timeMeasurement.Reset();
 
 
  #pragma omp parallel for
  for (int i = 0; i < side; ++i)
  {
    for (unsigned j = 0; j < side; ++j)
    {
      const int aa = a[i][j];
      const int bb = b[i][j];
      int cc = 0;
      for (int k = 0; k < 100000; ++k)
      {
        cc += aa * bb;
      }
      c[i][j] = cc;
    }
  }
 
  const double parallelTime = timeMeasurement.Elapsed();
 
  std::cout << "###################################" << std::endl;
  std::cout << "Test3:" << std::endl;
  std::cout << "serial   time   = " << serialTime << std::endl;
  std::cout << "parallel time   = " << parallelTime << std::endl;
  if (parallelTime > 0.0000001)
  {
    std::cout << "serial/parallel = " << serialTime / parallelTime << std::endl;
  }
  std::cout << std::endl;
}
 
int main()
{
  std::cout << "Max threads = " << omp_get_max_threads() << std::endl << std::endl;
  Test1();
  Test2();
  Test3();
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru