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

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

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

Показать сообщение отдельно
Dasha_K
3 / 3 / 0
Регистрация: 21.12.2009
Сообщений: 81
26.04.2012, 06:57     Вычисление интеграла с применением OpenMP
Всем доброе утро.
Написала программу вычисления интеграла с применением 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru