0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201

Open mp

09.11.2019, 12:43. Показов 4083. Ответов 30

Студворк — интернет-сервис помощи студентам
Здравствуйте,помогите разобраться с Open mp,как мне фиксировать вычисление каждого потока числа пи в выводе,хочу разбить на несколько массивов и посчитать и увидеть скорость вычисления каждого потока
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
#include <iostream>
#include <cmath>
#include "omp.h"
#include "conio.h"
#include <iomanip>
#include <chrono>
using namespace std;
 
const int n = 1000;//число элементов в сумме ряда
//ряд Лейбница :
 
int main(int i)
{
    
    auto begin = std::chrono::steady_clock::now();
    double a[n];
    double Pi = 0;
            for (int i = 0; i < n; i++)
            {
                a[i] = pow(-1, i) / (2 * i + 1);
            }
        
 
        
            for (int i = 0; i < n; i++)
            {
                Pi += 4 * a[i];
            }
            cout << setprecision(50) << Pi << std::endl;
    auto end = std::chrono::steady_clock::now();
    auto elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);
    cout << "The time: " << elapsed_ms.count() << " ms\n";
    _getch();
    return i;
}
int mainp(void)
{
    int i, sum;
 
    sum = 0;
 
#pragma omp parallel for reduction(+:sum)
    for (i = 0; i < 4; i++)
        sum += main(i);
 
    printf("sum=%d\n", sum);
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2019, 12:43
Ответы с готовыми решениями:

[ILINK32 Error] Fatal: Could not open .\Debug\Win32\Variant_1.ilf (project already open in IDE?)
Fatal: Could not open .\Debug\Win32\Variant_1.ilf (project already open in IDE?) на русском Fatal: Не удалось открыть \ Debug \...

Error: EMFILE: too many open files, open
Добрый день, подскажите плииз! Поймал ошибку &quot;Error: EMFILE: too many open files, open&quot; Чем это может грозить и как с этим бороться?...

Запутался между open и opener. Как отправить данные из opener в open
Открываю в родители новое окно через open var openWindow = open(&quot;up_img.php&quot;,&quot;up_img&quot;,&quot;width=600,height=430&quot;); В...

30
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
12.11.2019, 14:06  [ТС]
Студворк — интернет-сервис помощи студентам
а та программа старая для 4 потоков?а то запутался

Добавлено через 1 минуту
а старая программа для 4 потоков,запутался просто
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.11.2019, 14:52
Цитата Сообщение от Shamchik Посмотреть сообщение
а старая программа для 4 потоков,запутался просто
По-умолчанию openmp запускает по одному потоку на процессор/ядро

Добавлено через 7 секунд
Цитата Сообщение от Shamchik Посмотреть сообщение
а старая программа для 4 потоков,запутался просто
По-умолчанию openmp запускает по одному потоку на процессор/ядро
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
12.11.2019, 15:16  [ТС]
2.51 к 2.14 разница выходит 1.17289719626 ,20 тестов провел,может мой только на бумажке 4 ядерный, проверю завтра на стационарной машине в университете
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.11.2019, 15:19
Цитата Сообщение от Shamchik Посмотреть сообщение
2.51 к 2.14 разница выходит 1.17289719626 ,20 тестов провел,может мой только на бумажке 4 ядерный, проверю завтра на стационарной машине в университете
Покажи код
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
12.11.2019, 15:22  [ТС]
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
#include <fstream>
#include <cmath>
#include "omp.h"
#include "conio.h"
#include <iomanip>
#include <chrono>
using namespace std;
 
static constexpr int N = 100'000'000;
 
double calc_pi()
{
    double pi = 4.0;
    #pragma omp parallel for reduction(+: pi)
    
        for (int i = 1; i < N; ++i)
            pi += (i & 0x01 ? -4.0 : 4.0) / (2.0 * i + 1.0);
    
    return pi;
}
 
int main() {
    clock_t start, end;
    ofstream fout;
    fout.open("20.txt");
    start = clock();
    double pi = calc_pi();
 
    end = clock();
 
    fout << setprecision(50) << pi << " \t";
    double duration_sec = double(end - start) / CLOCKS_PER_SEC;
    fout << duration_sec << " \n";
    fout.close();
 
}
Добавлено через 1 минуту
либо на 16 знаков надо брать,по привычке поставил 50
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.11.2019, 15:30
Цитата Сообщение от Shamchik Посмотреть сообщение
2.51 к 2.14 разница выходит 1.17289719626 ,20 тестов провел,может мой только на бумажке 4 ядерный, проверю завтра на стационарной машине в университете
Компилятор, похоже, оптимизирует этот цикл, когда без openmp. Поставь формулу pi += 4.0 * pow(-1, i) / (2.0 * i + 1.0);
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
12.11.2019, 15:32  [ТС]
попробую,только я оптимизацию всю отключал,чтобы секунды лучше видны
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.11.2019, 15:33
Цитата Сообщение от Shamchik Посмотреть сообщение
попробую,только я оптимизацию всю отключал,чтобы секунды лучше видны
Лучше включи
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
12.11.2019, 16:18  [ТС]
оптимизацию включил,строчку меняю,начинает просто работать не останавливаясь,менял static constexpr int N = 100'000'000;
на const int,до этого были с этим проблемы и без апострофов также грузит

Добавлено через 34 минуты
при включенной оптимизации,у многопоточного чаще уходит за 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
#include <fstream>
#include <cmath>
#include "omp.h"
#include "conio.h"
#include <iomanip>
#include <chrono>
using namespace std;
 
static constexpr int N = 100'000'000;
 
double calc_pi()
{
    double sum = 0;
    double pi = 4.0;
#pragma omp parallel 
    {
#pragma omp for 
    for (int i = 1; i < N; ++i)
        pi += (i & 0x01 ? -4.0 : 4.0) / (2.0 * i + 1.0);
#pragma omp atomic
    sum += pi;
    return sum;
}
}
 
int main() {
    clock_t start, end;
    ofstream fout;
    fout.open("10.txt");
    start = clock();
    double sum = calc_pi();
 
    end = clock();
 
    fout << setprecision(16) << sum << " \t";
    double duration_sec = double(end - start) / CLOCKS_PER_SEC;
    fout << duration_sec << " \n";
    fout.close();
 
}
попробовал это,немного получше результат выходит при расчете у меня при 10 проверок
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
14.11.2019, 12:25  [ТС]
Просто не подключил дома open mp и в итоге плохо так работал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
14.11.2019, 12:52
Цитата Сообщение от Shamchik Посмотреть сообщение
Просто не подключил дома open mp и в итоге плохо так работал
Да есть там такая беда. Нужно добавить что-то типа, чтоб проверялось
C++
1
2
3
#ifndef _OPENMP
static_assert(false, "openmp support required");
#endif
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2019, 12:52

Open MP
Компилятор выдает ошибки: **********/KNT59iR *.pro file QT -= gui CONFIG += c++11 console CONFIG -= app_bundle # The...

DB is not open
Делаю форму входа\регистрации, все верно прописал и должно работать, но пишет что база не открыта... Не знаю как решить эту проблему, может...

Open CV
Господа кто может сталкивался с данной библиотекой , можете просвитить или ссылочку где почитать . мне вообщем нужно прочитать на картинки...

Open GL
Доброе время суток. Совсем недавно начал изучать open gl и столкнулся проблемой. Я построил шестиугольник, задал перспективу и камеру...

Open mp
Здравствуйте, кто может помочь в написании программы на языке с++ с использованием технологии open mp.Задание скину на почту.


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

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

Новые блоги и статьи
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru