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

С++ OpenMP Код работает не совсем адекватно! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Предложить эффективный алгоритм умножения числа на дробь в длинной арифметике http://www.cyberforum.ru/cpp/thread1592976.html
Нам дано длинное натуральное число, представленное в виде динамического массива: 1) разряды числа записываются от старшего к младшему; 2) нули до первого значащего элемента не изменяют число (т.е. массивы 52957172582 и 00052957172582 представляют одно и то же число). Также нам даны числитель и *знаменатель несократимой обыкновенной дроби. Задача: предложить эффективный алгоритм...
C++ Программа,выводящая список запущенных процессов в порядке присвоенного им ID (по убыванию) Нужна программа с++, выводящая список запущенных процессов в порядке присвоенного им ID (по убыванию) http://www.cyberforum.ru/cpp/thread1592917.html
C++ Программирование Winlogon (создание своего варианта входа в windows)
Добрый вечер, такое вопрос: как создать свой вариант входа в систему windows, т.е. свой winlogon вход будет осуществляться по RFID карте, хочу написать приложение, которое при входе в систему считывает карту, подключается к БД (будет сервер авторизации в локальной сети), получает разрешение на запуск системы. Искал про userinit.exe, winlogon.exe, не могу понять, как своему приложению...
C++ С вставкой подпрограммы асемблера C++
Добрый день. Есть задание написать программу используя ввод и вывод С++, а расчеты выполнить с помощью ассемблера. Решил начать с малого и рассчитать часть программы. Y=MAX(A,A+B) Вводим А и В В регистр 0 заносим А в регистр 1 заносим А+В вызываем подпрограмму МАХ. сравниваем р0 и р1 регистры выполняем переход если р0-р1 больше нуля. меняем регистры местами (нужное число будет лежать в...
C++ Сканирование и ввод капчи http://www.cyberforum.ru/cpp/thread1591322.html
Нужна программа, которая способна считывать и вводить капчу в определенное поле. Капча всегда в одном формате, одним шрифтом. Возможно ли реализовать подобное с помощью С++, если нет, то с помощью какого?
C++ Знак :: Натыкался несколько раз на код вида ::some_func(); Что это означает? Никогда раньше не видел чтобы какая та конструкция начиналась с двух двоеточий. подробнее

Показать сообщение отдельно
Dima1995
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 4

С++ OpenMP Код работает не совсем адекватно! - C++

28.11.2015, 11:53. Просмотров 276. Ответов 0
Метки (Все метки)

Здраствуйте, у меня така вот задачка: Напишите параллельную программу, которая заполняет массив из 100000 чисел случайными

числами из диапазона [-10000,10000] и находит минимальное и максимальное значение

чисел из массива. Заполнение массива числами и нахождения минимального и

максимального значений должны проводиться в параллельных секциях кода.
Код:
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
83
#include "stdafx.h"
 
 
#include <iostream>
#include <omp.h>
#include <ctime>
using namespace std;
 
double f(int x)
{
    return x*x;
}
 
int main()
{
    srand(unsigned(time(0)));
    int *a=new int[100000];
    #pragma omp parallel for num_threads(64)
        for(int i=0; i<100000; ++i)
        {
            a[i]=-10000+rand()%30000;
        }
    
    int max=a[0], min=a[0], NumThreads=64;
    int *maxa=new int[NumThreads], *mina=new int[NumThreads];
    #pragma omp parallel for num_threads(NumThreads) firstprivate(max) firstprivate(min) shared(maxa) shared(mina)
        for(int i=0; i<100000; ++i) // Гдето в етой области была допущена ошибка и иногда результат оказываетса неверным
        {
            if(a[i]>max) 
            {
                max=a[i];
                maxa[omp_get_thread_num()]=max;//
            }
            if(a[i]<min)            
            {
                min=a[i];
                mina[omp_get_thread_num()]=min;
            }
        }
    max=maxa[0];
    min=mina[0];
    //Поиск елементов
 
    for(int i=0; i<NumThreads; ++i)
    {
        if(maxa[i]>max) max=maxa[i];
        if(mina[i]<min) min=mina[i];
    }
    cout<<"Max: "<<max<<"\nMin: "<<min<<endl;
 
//   проверка нытей на адекватную работу
    max=a[0], min=a[0];
    for(int i=0; i<100000; ++i)
    {
        if(a[i]>max) max=a[i];
        if(a[i]<min) min=a[i];
    }
    cout<<"Max: "<<max<<"\nMin: "<<min<<endl;
    delete []a;
    delete []mina;
    delete []maxa;
    int n, ax, bx;
    double h, integr;
    ax=-5; bx=5;
    n=100;
    h=double(bx-ax)/n;
    integr=(f(ax)+f(bx))/2;
    #pragma omp parallel for num_threads(64) reduction(+:integr) 
    for(int i=ax; i<=bx-1; ++i)
    {
        integr+=f(i);
    }
    cout<<"Integral: "<<integr*h<<endl;
 
    double pi=0;
    #pragma omp parallel for num_threads(64) reduction(+:pi)
    for(int i=0; i<=100; ++i)
    {
        pi+=pow(-1.,i)/(2*i+1);
    }
cout<<"Pi: "<<pi*4<<endl;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru