0 / 0 / 0
Регистрация: 26.02.2018
Сообщений: 125
1

Вывести результаты обработки матрицы паралелльным способом, указав при выводе распределение итераций по потокам

01.04.2019, 15:23. Показов 2646. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В продолжении заголовка: .....для разных значений опции schedule.

Полностью задание: нужно написать программу, которая будет выполнять следующие действия:
1. Создать квадратные матрицы размером n*n, элементы которых будут заполняться рандомными числами, n задает кол-во строк и потоков, которые буду т выполнять параллельную область программы.
2. В каждой матрице посчитать кол-во нулей в каждой строке. Распределение итераций между потоками выполнить с помощью директивы for с использованием опции schedule. Для каждой из матриц использовать разные значения параметра type и размера блока chunk. Результаты обработки матриц записать в массивы С и D.
3.Вывести рез-ты обработки матриц. Сравнить рез-ты, полученные при разных значениях параметра type и размера блока – chunk.

Значения параметров type та chunk : (dynamic, 4) и (guided, 6).
Мой код:
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
#include <omp.h>
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <ctime>
#include <conio.h>
extern "C" double omp_get_wtime(void);
extern "C" int omp_get_thread_num(void);
 
extern "C" int omp_set_num_treads();
 
using namespace std;
 
int main()
{
 
    
    int i, j;
    int N = 5;
    int **A = new int *[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
    }
    int **B = new int *[N];
    for (int i = 0; i < N; i++)
    {
    B[i] = new int[N];
     }
    int *C = new int[N];
    int *D = new int[N];
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            A[i][j] = rand() % 5;
            //cout << A[i][j] << "\t";
 
        }
        cout << endl;
    }
        
    cout << endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            B[i][j] = rand() % 5;
            //cout << B[i][j] << "\t";
 
        }
        cout << endl;
    }
 
    cout << endl;
    omp_set_num_threads(4);
    double t1, t2;
    t1 = omp_get_wtime();
//#pragma omp parallel num_threads(10)
//#pragma omp parallel private (i)
#pragma omp for schedule (dynamic, 4)
    for (int i = 0; i < N; i++)
    {
        int k1 = 0;
        //int k2 = 0;
        for (int j = 0; j < N; j++)
        {
            if (A[i][j] == 0)
                k1++;
        }
        C[i] = k1;
        cout<< "Flow" << omp_get_thread_num<<" "<<"executed an iteration" << i << endl;
    }
    t2 = omp_get_wtime();
    cout << "Chas for (dynamic, 4)" << t2 - t1;
    cout << endl;
    double t3, t4;
    t3 = omp_get_wtime();
#pragma omp for schedule (guided, 6)
    for (int i = 0; i < N; i++)
    {
        
        int k2 = 0;
        for (int j = 0; j < N; j++)
        {
            
            if (B[i][j] == 0)
            k2++;
        }
        D[i] = k2;
        cout << "Flow" << omp_get_thread_num << " " << "executed an iteration" << i << endl;
        
    }
    t4 = omp_get_wtime();
    cout << "Chas for (guided, 6)" << t4 - t3;
 
    system("pause");
    return 0;
}
Проблема вот в чем: выдает ошибку error C3861: omp_set_num_threads: идентификатор не найден и предупреждение
двухэтапный поиск имен не поддерживается для C++/CLI, C++/CX или OpenMP. Используйте /Zc:twoPhase-

Поддержку OpenMP я подключила. В чём может быть проблема?

Добавлено через 4 часа 27 минут
А без этой директивы программа у меня вообще не распараллеливается в консольном приложении в Visual Studio 2017

Добавлено через 1 минуту
Вернее, если закомментировать эти строки
#pragma omp parallel num_threads(10)
#pragma omp parallel private (i)
и оставить эту omp_set_num_threads(4) распараллеливания не происходит.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2019, 15:23
Ответы с готовыми решениями:

Дана матрица целых чисел размером 4x3. Отсортировать каждую строку матрицы по убыванию. Вывести содержимое матрицы до обработки и после обработки
Дана матрица целых чисел размером 4x3. Отсортировать каждую строку матрицы по убыванию. Вывести...

Найти и вывести повторяющиеся элементы матрицы, указав их кратность.
Дана матрица целых чисел. Найти и вывести повторяющиеся элементы указав их кратность. program z1;...

написать программу обработки одноименного массива. Вывести исходный массив и результаты вычислений
Дан массив P(N) из N чисел. Вычислить среднее геометрическое значение тех элементов массива,...

Управление торговлей 10.3. Ошибка при выводе обработки на печать
Здравствуйте. Была поставлена задача изменить макет обработки вывода на печать ценника. Удалив...

1
1 / 1 / 0
Регистрация: 01.05.2017
Сообщений: 144
10.08.2019, 16:09 2
Dziuba, так в чём была проблема?
0
10.08.2019, 16:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2019, 16:09
Помогаю со студенческими работами здесь

На печать вывести входную матрицу и результаты обработки: вычислить сумму и количество нечетных элементов массива
Нужна помощь в написании программы: Дано матрицу A . Элементы матрицы нужно сгенерировать...

Блок-схема. произведение ненулевых элементов каждого столбца матрицы В(5,12). Полученные значения вывести, указав номера столбцов
var b:array of integer; a:array of integer; i,j:integer; begin randomize; for...

Разработать алгоритм, определяющий произведение ненулевых элементов каждого столбца матрицы В(5,12). Полученные значения вывести, указав номера столбц
Разработать алгоритм, определяющий произведение ненулевых элементов каждого столбца матрицы...

Вывести результаты преобразования матрицы
Дана матрица А а) получить сумму и количество четных элементов в интервале . б) сформировать...

Распределение одинаковых символов случайным способом по условию
Помогите пожалуйста, есть необходимость распределить по случайным ячейкам таблицы символ “x”. Если...

Найти корни полинома численными и графическим способом, сравнить результаты
Всем здрасте :) Начал изучать маткад, и столкнулся со следующей проблемой. Следуя по действиям...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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