Форум программистов, компьютерный форум, киберфорум
Наши страницы

Вычисление интеграла с применением OpenMP - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Изменить файлы http://www.cyberforum.ru/cpp-beginners/thread558955.html
Доброе утро, для начала суть задания: Сформировать список l, включив в него по одному разу элементы, которые входят в один из списков l1 или l2. Но не входят в другой. У меня есть цельная...
C++ Массив структур из массивов. Доброго всем утра! Сразу извиняюсь за, скорее всего, не рациональное решение проблемы но: 1) требуется создать массив, состоящий из структур, в которых некоторые типы - массивы. 2) требуется... http://www.cyberforum.ru/cpp-beginners/thread558943.html
Массив: посчитать сколько раз в двумерном массиве встречается 0. C++
Задача1. Дан массив размерность 4х4 найти сумму элементов его главной диагонали. Задача2. Дан массив размерностью 4х4. посчитать сколько раз в нём встречается 0.
Вывести все простые числа от M до N включительно C++
Вывести все простые числа от M до N включительно. Ввод В первой строке находятся разделённые пробелом M и N. Вывод Вывести числа в порядке возрастания, по одному в строке. Если между M и N...
C++ Как пишутся оконные приложения? http://www.cyberforum.ru/cpp-beginners/thread558894.html
Всем доброй ночи:) Друзья, решил вот создать первое оконное приложение, зашел значит в проэкт.. интуитивно прописал пару строк.. но ничего не появилось( просто окошко пустое( помогите.. хоть пару...
C++ Создание каталога через консольное приложение Написать программу которая-бы в консольном режиме Windows создавала новый каталог. Заранее спасибо подробнее

Показать сообщение отдельно
Dasha_K
3 / 3 / 0
Регистрация: 21.12.2009
Сообщений: 81

Вычисление интеграла с применением OpenMP - C++

26.04.2012, 06:57. Просмотров 2042. Ответов 10
Метки (Все метки)

Всем доброе утро.
Написала программу вычисления интеграла с применением OpenMP, но она выдаёт ошибку, ошибку выдаёт при запуске консоли, я не понимаю почему????
Ошибка такого содержания, типа: "Запуск программы невозможен, т. к. на компьютере отсутствует библиотека vcompd.dll. Попробуйте переустановить программу"
И ещё не могу присвоить количество потоков для распараллеливания..... Что делать??? Может кто подскажет????
Вот собственно сам код:

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
84
85
86
87
88
89
// Dasha_integral.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <math.h>
#include <omp.h>
#include <stdlib.h>
#include <locale.h>
#include <clocale>
#include <iostream>
#include <stdio.h>
 
 
 
//Количество интервалов, на которые разбиваем область интегрирования
const int n = 10;
//подинтегральная функция
double f(double x)
{
    return ((1/(2*tan(0.7*x)))/((log(x+1.48))/2));
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    //включаем поддержку русского языка
    setlocale(LC_CTYPE,"RUSSIAN");
 
    //объявление переменных для определения затраченного времени на вычисления
    double st_time, end_time, tick, tick1;
    tick = omp_get_wtick();
 
    //диапазон интегрирования
    double a = 0.2, b = 0.5, h;
 
    //отключение выбора потока нитей
    omp_set_dynamic(false);
 
    //задание числа используемых нитей
    omp_set_num_threads(9);
 
    //определение типа переменных блока
int nTheads, theadNum;
#pragma omp parallel  private(nTheads, theadNum)
{
    nTheads = omp_get_num_threads(); //функция для определения количества нитей в текущей параллельной области
    theadNum = omp_get_thread_num(); //функция для определения номера нити в текущей параллельной области
    //вывод на экран номера и количество ичпользуемых нитей
    printf("OpenMP поток №%d из %d потоков \n", theadNum, nTheads);
}
 
//переменная для хранения суммы, значения аргумента
double sum = 0.0, x;
int i;
 
//сохраняем начальное время вычисления
st_time = omp_get_wtime();
 
#pragma omp parallel for default(shared)\
                         private (i) schedule(static,10)\
                         reduction (+:sum)
 
for (i = 0; i<n; i++)
{
    h = (b-a)/n;
    x = a + i*h;
    sum += f(x);
}
 
//сохраняем время окончания вычислений
end_time = omp_get_wtime();
tick1 = end_time - st_time;
 
//выводим сообщение об окончании работы потоками
#pragma omp parallel private(theadNum)
{
    theadNum = omp_get_thread_num();
    printf("Поток №%d окончил вычисление... \n", theadNum);
}
 
//вычисление итогового результата и печать его на экран
sum = sum/n;
printf("Результат равен %f (Ошибка вычисления: %f)\n", sum, 1.0-sum);
 
//выводим время, затраченное на вычисление интеграла
printf("Время затраченное на вычисление %f\n", tick1);
std::system ("pause");
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru