Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти сумму елементов первого столбца квадратной матрицы и заменить ею елементы главной диагонали https://www.cyberforum.ru/ cpp-beginners/ thread911237.html
1)Найти сумму елементов первого столбца квадратной матрицы и заменить ею елементы главной диагонали.Оформить в виде функцыи..
Сравнение текстового файла и "строки" C++
есть текстовый файл. и есть строка точнее строки char str1 = "bzxaz"; char str2 = "serxz"; char str3 = "nmcxz"; char str4 = "utrcm";
C++ Значения выводятся и бегут, как исправить? по одно заданию нужно выбрать одну из функций найти ее минимум и максимум.. кажется все напсала в коде что нужно, в решение выводится и цифры по нему все время бегут #include<stdio.h>//vvod-vivod dannih #include <conio.h> // opisanie fynkcij vvoda-vivoda s konsoli(dlja getch()) #include <math.h> // opisanie matemati4eskix fynkcij (dlja sin) #include<stdlib.h>// fynkcija... https://www.cyberforum.ru/ cpp-beginners/ thread911230.html C++ Иерархические структуры. Есть программа, которая добавляет, удаляет, показывает людей, которых мы вводим. Нужно изменить ее так, чтобы она высвечивала Иерархические структуры. Есть программа, которая добавляет, удаляет, показывает людей, которых мы вводим. Нужно изменить ее так, чтобы она высвечивала только студентов и профессоров. # include "stdafx.h" # include <stdlib.h> # include <string.h> # include <stdio.h> https://www.cyberforum.ru/ cpp-beginners/ thread911228.html
C++ Работа со строками. Проблема с решением задачи "Быстрый поезд"
Здравствуйте. Проблема с решением задачи "Быстрый поезд" (компилятор в системе - VS2010). Между двумя крупнейшими городами нашей страны Санкт-Петербургом и Москвой ежедневно совершают рейсы n поездов. Для каждого поезда известно его время отправления из Санкт-Петербурга и время прибытия в Москву. Найдите самый быстрый поезд и его скорость в предположении, что длина железной дороги между...
C++ чтение из файла, где ошибка вроде все правильно... #include <iostream> #include <fstream> #include <string> #include <conio.h> using namespace std; void main() https://www.cyberforum.ru/ cpp-beginners/ thread911216.html
C++ Вывод содержимого при работе с файлом Есть программа для работы с файлом. #include "stdafx.h" #include <iostream> using namespace std; struct infa { char fio; int nomer, vozrast, rost,ves; https://www.cyberforum.ru/ cpp-beginners/ thread911208.html C++ Помогите найти ошибку в приведенном листинге
#include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <conio.h> using namespace std; void main() { setlocale(0,"russian")
C++ СЛОВА (не все предложение) отобразить зеркально и записать строкой во второй файл https://www.cyberforum.ru/ cpp-beginners/ thread911181.html
Задача следующая: Имеется файл со строкой. Нужно СЛОВА (не все предложение) отобразить зеркально и записать строкой во второй файл. Как развернуть всю строку char (не используя файл я знаю), а как описано выше не могу придумать.
C++ В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность https://www.cyberforum.ru/ cpp-beginners/ thread911173.html
Имеется задача. В массив Х(N), N≤20, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность. Пожалуйста помогите решить!
C++ Найти и сохранить в строке те слова текста, которые образованы неубывающей последовательностью символов
Дана строка. Словом текста считается любая последовательность цифр; между соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова текста, которые образованы неубывающей последовательностью символов. Все остальные слова удалить. Вот нужно написать такую программу, я очень долго пытался сам сделать, но не получается :( Как я понял, суть в...
C++ Триангуляция многоугольника https://www.cyberforum.ru/ cpp-beginners/ thread911161.html
Добрый вечер. Ни у кого случайно нет алгоритма для триангуляции ПРОИЗВОЛЬНОГО многоугольника? Многоугольник задан количеством вершин и точками вершин в порядке обхода против часовой стрелки.
0 / 0 / 0
Регистрация: 10.10.2011
Сообщений: 8
0

Распараллеливание циклов - C++ - Ответ 4767175

25.06.2013, 06:38. Показов 2360. Ответов 1
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Возникли трудности с освоением OpenMP
Непонимаю, почему если закоментировать вот этот фрагмент кода, то программа работает вы разы быстрее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//from
#pragma omp parallel for schedule(dynamic, pieces)
        for (int i = 0; i < size; i++)
            for (int j = 0; j < size; j++)
                temp[i][j] = matrix[i][j];
 
 
#pragma omp parallel for schedule(dynamic, pieces)
        for (int i = 1; i < size - 1; i++) {
            for (int j = 1; j < size - 1; j++) {
                temp[i][j] = Change(matrix, size, i, j);
            }
        }
 
//to

код программы целиком:
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <stdio.h>
#include <cstdlib>
#include <omp.h>
#include <time.h>
 
void PrintM(int **&matrix, int size, int i);
clock_t Run(int **&matrix, int size);
int Change(int **&matrix, int size, int i, int j);
 
int value = 1000;
 
bool more = true;
 
int _tmain(int argc, _TCHAR* argv[]) {
    int size;
 
 
    if (more) {
        size = 1000;
    }
    else {
        size = 5;
    }
 
    int **matrix = new int*[size];
 
    for (int i = 0; i < size; i++)
        matrix[i] = new int[size];
 
    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
            matrix[i][j] = 0;
 
    for (int i = 0; i <size; i++)
    {
        matrix[i][0] = value;
        matrix[i][size - 1] = value;
        matrix[0][i] = value;
        matrix[size - 1][i] = value;
    }
 
    clock_t start = clock();
    clock_t end = Run(matrix, size);
 
    printf("%.4f\n", ((double) end - start) / ((double) CLOCKS_PER_SEC));
    getchar();
 
 
}
 
void PrintM(int **&matrix, int size, int i) {
    system("\f");
    printf("\n\nIteration: %d\n", i);
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
    
}
 
clock_t Run(int **&matrix, int size) {
    int **temp = new int*[size];
 
    for (int i = 0; i < size; i++)
        temp[i] = new int[size];
 
    double time = 0;
 
    int pieces;
 
    if (more)
        pieces = 25;
    else
        pieces = 2;
 
    int i = 0;
 
    int end = 100;
 
    if (more)
        end = 1000;
    
    while (i < end) {
//from
#pragma omp parallel for schedule(dynamic, pieces)
        for (int i = 0; i < size; i++)
            for (int j = 0; j < size; j++)
                temp[i][j] = matrix[i][j];
 
 
#pragma omp parallel for schedule(dynamic, pieces)
        for (int i = 1; i < size - 1; i++) {
            for (int j = 1; j < size - 1; j++) {
                temp[i][j] = Change(matrix, size, i, j);
            }
        }
 
//to
 
#pragma omp parallel for schedule(dynamic, pieces)
        for (int i = 0; i < size; i++)
            for (int j = 0; j < size; j++)
                matrix[i][j] = temp[i][j];
 
 
        if (!more)
            PrintM(matrix, size, i);
 
        i++;
    }
 
    for (int i = 0; i < size; ++i)
        delete [] temp[i];
    
    delete [] temp;
    temp = NULL;
 
    printf("end!\n");
    return clock();
}
 
int Change(int **&matrix, int size, int i, int j) {
    int neighs = 0;
 
    neighs += matrix[i - 1][j];
    neighs += matrix[i + 1][j];
    neighs += matrix[i][j - 1];
    neighs += matrix[i][j + 1];
 
    neighs /= 4;
    
    return neighs;
}


Добавлено через 6 часов 34 минуты
вверх

Вернуться к обсуждению:
Распараллеливание циклов C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2013, 06:38
Готовые ответы и решения:

Распараллеливание циклов
Доброго времени суток. Возникла необходимость распараллелить один численный алгоритм средствами...

Распараллеливание циклов
Есть такой цикл std::list&lt;int&gt;::iterator iter; std::list&lt;int&gt;_paramsFFT; for(iter =...

Распараллеливание циклов с использованием OpenMP C++
Доброго времени суток. (Нужен совет, так как разбираюсь с omp почти 3 дня и не хватает знанний) ...

Распараллеливание циклов с ипользованием OpenMP
Есть проблема , получился парадокс - время роботы программы с распараллеливанием дольше на 1 сек...

1
25.06.2013, 06:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2013, 06:38
Помогаю со студенческими работами здесь

OpenIM - не работает распараллеливание циклов
void Multiplication(int a, int b) { int c; int i; int j; int count(0); ...

распараллеливание
Скажите, кто-нибудь занимался распараллеливанием в си++? В моих попытках что-либо распараллелить...

Распараллеливание
Всем добрый вечер. Если кто знает подскажите,мне надо распараллелить перемножение...

Распараллеливание программы
Пишу брутер и встал вопрос о добавление многопоточности. Вот у меня есть функция: std::string...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru