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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу для вывода таблицы умножения на экран http://www.cyberforum.ru/cpp/thread1594840.html
Простите меня за мою наглость, но я вот вообще не знаю как писать программу до main. Помогите пожалуйста Написать программу для вывода таблицы умножения на экран. Программа должна содержать две функции. Первая функция, вычисляющая произведение двух чисел располагается до функции main(). Вторая, функция печати результата, располагается после функции main().
C++ Вывести кратчайшее расстояние до границы фигуры Должно выводится кротчайшее расстояние, если в фигуре или на границе, либо "-1" #include <iostream> #include <math.h> using namespace std; int main() { float x,y,R,r1,r2; cin >>x>>y; if (x>0 && y>0 && x<=10 && y<=10) {r1=(10-y<10-x)? 10-y:10-x; http://www.cyberforum.ru/cpp/thread1593876.html
Чтение чисел из файла и сортировка C++
Привет, ребята. Такое задание есть - нужно в С++ написать код, который будет читать числа из текстового файла и затем сортировать их. Кто может, пожалуйста помогите, буду очень благодарен. Вот код, для чтения чисел из текстового файла, а дальше не знаю как его продолжить, чтобы эти 10 чисел сортировать #include <fstream> #include <iostream> #include <iomanip> using std::cout; using...
C++ Предложить эффективный алгоритм умножения числа на дробь в длинной арифметике
Нам дано длинное натуральное число, представленное в виде динамического массива: 1) разряды числа записываются от старшего к младшему; 2) нули до первого значащего элемента не изменяют число (т.е. массивы 52957172582 и 00052957172582 представляют одно и то же число). Также нам даны числитель и *знаменатель несократимой обыкновенной дроби. Задача: предложить эффективный алгоритм...
C++ Программа,выводящая список запущенных процессов в порядке присвоенного им ID (по убыванию) http://www.cyberforum.ru/cpp/thread1592917.html
Нужна программа с++, выводящая список запущенных процессов в порядке присвоенного им ID (по убыванию)
C++ Программирование Winlogon (создание своего варианта входа в windows) Добрый вечер, такое вопрос: как создать свой вариант входа в систему windows, т.е. свой winlogon вход будет осуществляться по RFID карте, хочу написать приложение, которое при входе в систему считывает карту, подключается к БД (будет сервер авторизации в локальной сети), получает разрешение на запуск системы. Искал про userinit.exe, winlogon.exe, не могу понять, как своему приложению... подробнее

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

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

28.11.2015, 11:53. Просмотров 264. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru