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

Open mp

09.11.2019, 12:43. Показов 4150. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru