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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
RJ
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 55
#1

Параллельный код решения системы - C++

27.02.2013, 01:35. Просмотров 2092. Ответов 10
Метки нет (Все метки)

Доброго вечера, мастера нулей и единиц!

Преподаватель дал задание - сам не разберусь никак. Может кто чего подскажет или поможет.

Задание: написать параллельный код решения системы линейных уравнений методом Гаусса.

С параллельными кодами и вычислениями вообще первый раз сталкиваюсь и как чего делать - не знаю. А сделать сказал до 14-00 четверга (28 февраля). Вот и не знаю че делать(((

И еще - я так понял задание для С++, но если что можно и на другом языке. Вот как-то так.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2013, 01:35     Параллельный код решения системы
Посмотрите здесь:

C++ Пример кода для решения системы уравнений
метод Ньютона для решения системы нелинейных уравнений C++
C++ Составить программу решения системы уравнений
на системы счисления. подскажите идею решения C++
C++ Параллельный запуск процессов с помощью fork(). Проверить код
Помогите исправить программу решения системы уравнений C++
Написать программу для решения системы двух уравнений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kill100
 Аватар для Kill100
360 / 249 / 33
Регистрация: 11.12.2010
Сообщений: 1,072
Завершенные тесты: 1
27.02.2013, 01:49     Параллельный код решения системы #2
С помощью какой технологии параллелить?
Open MP? MPI? MFC? Win32 API?
Тут тебе могут по разному распараллелить. И не факт что как надо
Пары посещал? Какую технологию учили?
RJ
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 55
27.02.2013, 20:21  [ТС]     Параллельный код решения системы #3
Цитата Сообщение от Kill100 Посмотреть сообщение
С помощью какой технологии параллелить?
Open MP? MPI? MFC? Win32 API?
Тут тебе могут по разному распараллелить. И не факт что как надо
Пары посещал? Какую технологию учили?
Да посещал пары. Хоть и не все

Получается с помощью технологии MPI.

Добавлено через 18 часов 23 минуты
Народ! НУ давайте помогайте, пожалуйста. Я Вас прошу)))) А то съедят меня завтра)))
Kill100
 Аватар для Kill100
360 / 249 / 33
Регистрация: 11.12.2010
Сообщений: 1,072
Завершенные тесты: 1
27.02.2013, 22:58     Параллельный код решения системы #4
Тут мало знатоков MPI . По другим технолигиям, я бы помог. Но эту самому трудно осилить. Дебагинг неудобный.
RJ
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 55
27.02.2013, 23:21  [ТС]     Параллельный код решения системы #5
Цитата Сообщение от Kill100 Посмотреть сообщение
Тут мало знатоков MPI . По другим технолигиям, я бы помог. Но эту самому трудно осилить. Дебагинг неудобный.
А с Open MP как дела обстоят у тебя? Может на этой технологии? НУ или хоть на какой))) НА любой уже сойдет)))
Kill100
 Аватар для Kill100
360 / 249 / 33
Регистрация: 11.12.2010
Сообщений: 1,072
Завершенные тесты: 1
28.02.2013, 17:12     Параллельный код решения системы #6
OMP знаю. Собственно что то похожее вышло.
В студии в настройках проекта>C/C++>Язык>Поддержка Open MP включи /openmp
Если компилятор другой например gcc то
Код
g++ -lrt -fopenmp -O0 main.cpp -o main
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
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
using namespace std;
 
int main() 
{
    setlocale(LC_ALL,"Russian");
    int n=0;
    printf("Введите количество неизвестных\n");
    cin>>n;
    printf("Задайте матрицу коэффициентов\n");
    double ** A=new double*[n];
    //double ** L=new double*[n];
    for(int i=0;i<n;i++){
        A[i]=new double[n];
        //L[i]=new double[n];
        for(int j=0;j<n;j++){
            cin>>A[i][j];
        }
    }
    printf("Введите вектор свободных членов\n");
    double * B=new double[n];
    for(int i=0;i<n;i++){
        cin>>B[i];
    }
    //метод Гаусса
    //получаем верхнетреугольную матрицу
 
    for(int i=0;i<n-1;i++){
        omp_set_nested(1);
#pragma omp parallel num_threads(n-i-1) firstprivate(i)
        {
            int tid=omp_get_thread_num();
            int j=tid+i+1;
            double fix=A[j][i]/A[i][i];
            B[j]=B[j]-B[i]*fix;
#pragma omp parallel num_threads(n-i)
            {
                int k=omp_get_thread_num();
                k=k+i;
                A[j][k]=A[j][k]-A[i][k]*fix;
            }
        }
 
    }
    //вывод преобразованной расширенной матрицы
    printf("Матрица U\n");
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%f ",A[i][j]);
        }
        printf("  | %f \n",B[i]);
 
    }
    //определяем и выводим вектор решений
    double * X=new double[n];
#pragma omp parallel num_threads(n/2) firstprivate(n) shared(count,X,A,B)
    {
#pragma omp for schedule(static,1)
        for(int i=n-1;i>=0;i--){
            X[i]=B[i];
 
            for(int j=n-1;j>i;j--){
 
                X[i]=X[i]-A[i][j]*X[j];
            }
#pragma omp critical
            X[i]=X[i]/A[i][i];
            printf("%f\n",X[i]);
        }
 
    }
    system("pause");
    return 0;
}
RJ
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 55
01.03.2013, 23:20  [ТС]     Параллельный код решения системы #7
Цитата Сообщение от Kill100 Посмотреть сообщение
OMP знаю. Собственно что то похожее вышло.
В студии в настройках проекта>C/C++>Язык>Поддержка Open MP включи /openmp
Если компилятор другой например gcc то
Код
g++ -lrt -fopenmp -O0 main.cpp -o main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
using namespace std;
 
int main() 
{
    setlocale(LC_ALL,"Russian");
..........................................................
    }
    system("pause");
    return 0;
}
Спасибо огромнейшее. Попробую в понедельник в довесок сдать.
А в четверг ему сдавал на Фортране и OpenMP. Ну вроде принял и то хорошо. Еще с этим вариантом разберусь и попробую сдать.
Kill100
 Аватар для Kill100
360 / 249 / 33
Регистрация: 11.12.2010
Сообщений: 1,072
Завершенные тесты: 1
02.03.2013, 00:44     Параллельный код решения системы #8
Цитата Сообщение от RJ Посмотреть сообщение
Спасибо огромнейшее. Попробую в понедельник в довесок сдать.
А в четверг ему сдавал на Фортране и OpenMP. Ну вроде принял и то хорошо. Еще с этим вариантом разберусь и попробую сдать.
Ну я как успел так и написал. Просто самому проект пришлось писать.
RJ
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 55
02.03.2013, 01:23  [ТС]     Параллельный код решения системы #9
Цитата Сообщение от Kill100 Посмотреть сообщение
Ну я как успел так и написал. Просто самому проект пришлось писать.
Нет я же ничего не предъявляю)))) Я наоборот очень благодарен. Хорошо что есть люди которым не западло помочь другому человеку.

Весьма благодарен.

Кстати у меня ругается на
C++
1
2
#include <stdafx.h>
#include <omp.h>
Вот так вот(((

Компилятор DevCpp

Добавлено через 16 минут
Цитата Сообщение от Kill100 Посмотреть сообщение
Ну я как успел так и написал. Просто самому проект пришлось писать.
Если конкретно говорит нет у меня таких файлов. Мож их де докачать?

Вот пишет такое:
4 C:\Users\Æåêà\Desktop\1\main.cpp stdafx.h: No such file or directory.
9 C:\Users\Æåêà\Desktop\1\main.cpp omp.h: No such file or directory.
Kill100
 Аватар для Kill100
360 / 249 / 33
Регистрация: 11.12.2010
Сообщений: 1,072
Завершенные тесты: 1
02.03.2013, 01:28     Параллельный код решения системы #10
Цитата Сообщение от RJ Посмотреть сообщение
Нет я же ничего не предъявляю)))) Я наоборот очень благодарен. Хорошо что есть люди которым не западло помочь другому человеку.

Весьма благодарен.

Кстати у меня ругается на
C++
1
2
#include <stdafx.h>
#include <omp.h>
Вот так вот(((

Компилятор DevCpp
DevCpp - это не компилятор а среда разработки. А компилятор MinGW. Причём нативно OMP не поддерживает.
Так что используй gcc, visual c++, или intel composer компиляторы. В среде DevCpp можно указать какой использовать.
stdafx.h можеш на него забить а можеш перекопировать из него includы сам в свой проект.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
 
 
 
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
Добавлено через 4 минуты
Но походу если Visual studio еще не используете, то скорее всего надо было писать на Win32 API. (что громоздко и сложно)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2013, 01:46     Параллельный код решения системы
Еще ссылки по теме:

Метод хорд для решения системы нелинейных уравнений C++
Написать код для решения системы тригонометрического неравенства с двумя неизвестными C++
C++ Написать код для решения системы тригонометрического неравенства с двумя неизвестными
C++ Нужна программа для решения системы математических уравнений
Написать программу для решения системы нелинейных уравнений C++

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

Или воспользуйтесь поиском по форуму:
RJ
1 / 1 / 0
Регистрация: 10.05.2012
Сообщений: 55
02.03.2013, 01:46  [ТС]     Параллельный код решения системы #11
Цитата Сообщение от Kill100 Посмотреть сообщение
DevCpp - это не компилятор а среда разработки. А компилятор MinGW. Причём нативно OMP не поддерживает.
НУ да.... вот протормозил ппц.

Цитата Сообщение от Kill100 Посмотреть сообщение
Но походу если Visual studio еще не используете, то скорее всего надо было писать на Win32 API. (что громоздко и сложно)
Печальбеда...... =(


Цитата Сообщение от Kill100 Посмотреть сообщение
Так что используй gcc, visual c++, или intel composer компиляторы. В среде DevCpp можно указать какой использовать.
stdafx.h можеш на него забить а можеш перекопировать из него includы сам в свой проект.
Ясненько. Попробуем теперь запилить на intel composer. Посмотрю что выйдет. =)
Yandex
Объявления
02.03.2013, 01:46     Параллельный код решения системы
Ответ Создать тему
Опции темы

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