powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Распараллеливание
5 сообщений из 5, страница 1 из 1
Распараллеливание
    #39233521
mihaaa19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. В университете задали распараллелить вычисление интеграла 16*exp(x)/((2+x*x)*(2+x*x)) на [0, 2] . Я написал программу(код ниже), но преподаватель посоветовал измерить время выполнения и для сравнения создать 4 потока, в которых будут выполняться вычисления отдельно для каждого отрезка [0, 0.5], [0.5, 1], [1, 1.5], [1.5, 2]. Подскажите, пожалуйста, как это реализовать?
Код: plaintext
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.
#include <QCoreApplication>
#include <iostream>
#include <omp.h>
#include <QtMath>
using namespace std;
int main()
{
    const double h = 0.0005;//шаг
    const int N = 4000;//число отрезков сетки
    double res = 0;
#pragma omp parallel for reduction(+: res)
        for(int i=0;i<N;i++)
        {
            double x = i*h;
            res+=16*exp(x)/((2+x*x)*(2+x*x));
        }
            res*=h;
        cout<<res<<endl;
        cout<<"OpenMP testing.."<<endl;

#if defined(_OPENMP)
   cout<<"OpenMP is done"<<endl;
#endif
    return 0;
}
...
Рейтинг: 0 / 0
Распараллеливание
    #39233544
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное хитрый препод знает что для данной задачи ручное управление параллелизмом (4 камня на борту)
удобне автоматических форк-джойн директив. Или просто хочет чтоб ты решил задачу по другому. Если тема
конечно не OpenMP.
...
Рейтинг: 0 / 0
Распараллеливание
    #39233821
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---mayton,

например можно еше так - перемножение матриц

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
template<typename T>
void ParMatrixMult1(int size, T** m1, T** m2, T** result)
{
    using namespace Concurrency;
    for (int i = 0; i < size; i++) {
        parallel_for(0, size, 1, [&](int j) {
            result[i][j] = 0;
            for (int k = 0; k < size; k++) {
                result[i][j] += m1[i][k] * m2[k][j];
            }
        });
    }
}
...
Рейтинг: 0 / 0
Распараллеливание
    #39234217
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mihaaa19,
так вроде бы есть все, не?
проблема в чем, omp не работает?
...
Рейтинг: 0 / 0
Распараллеливание
    #39234231
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik---mayton,

например можно еше так - перемножение матриц

Можно через векторизацию IMHO. Но старый ментор зудит
дескыть ... 4 потока вынь да положь... А ежели прагма омп
то поясни где и как этим управлять. Рычаги хде? Хде рычаги?

Вот как-то так имхо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Распараллеливание
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]