Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201

Open mp

09.11.2019, 12:43. Показов 4061. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru