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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму елементов первого столбца квадратной матрицы и заменить ею елементы главной диагонали http://www.cyberforum.ru/cpp-beginners/thread911237.html
1)Найти сумму елементов первого столбца квадратной матрицы и заменить ею елементы главной диагонали.Оформить в виде функцыи..
C++ Сравнение текстового файла и "строки" есть текстовый файл. и есть строка точнее строки char str1 = "bzxaz"; char str2 = "serxz"; char str3 = "nmcxz"; char str4 = "utrcm"; http://www.cyberforum.ru/cpp-beginners/thread911231.html
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...
C++ Иерархические структуры. Есть программа, которая добавляет, удаляет, показывает людей, которых мы вводим. Нужно изменить ее так, чтобы она высвечивала
Иерархические структуры. Есть программа, которая добавляет, удаляет, показывает людей, которых мы вводим. Нужно изменить ее так, чтобы она высвечивала только студентов и профессоров. # include "stdafx.h" # include <stdlib.h> # include <string.h> # include <stdio.h>
C++ Работа со строками. Проблема с решением задачи "Быстрый поезд" http://www.cyberforum.ru/cpp-beginners/thread911218.html
Здравствуйте. Проблема с решением задачи "Быстрый поезд" (компилятор в системе - VS2010). Между двумя крупнейшими городами нашей страны Санкт-Петербургом и Москвой ежедневно совершают рейсы n поездов. Для каждого поезда известно его время отправления из Санкт-Петербурга и время прибытия в Москву. Найдите самый быстрый поезд и его скорость в предположении, что длина железной дороги между...
C++ чтение из файла, где ошибка вроде все правильно... #include <iostream> #include <fstream> #include <string> #include <conio.h> using namespace std; void main() подробнее

Показать сообщение отдельно
v1tar
0 / 0 / 0
Регистрация: 10.10.2011
Сообщений: 8
25.06.2013, 06:38     Распараллеливание циклов
Возникли трудности с освоением 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 минуты
вверх
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru