Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 25
1

Число пи intel TBB

03.12.2015, 10:51. Просмотров 498. Ответов 3
Метки нет (Все метки)

доброго времени
не могу понять как исправить ошибки

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
90
91
92
#include <iomanip>
#include <iostream>
#include <limits>
#include <time.h>
#include "tbb/tick_count.h"
#include "tbb/task_scheduler_init.h"
#include <tbb/parallel_reduce.h>
#include "tbb/blocked_range.h"
#include "tbb/parallel_for.h"
using namespace tbb;
using namespace std; 
 
 
class DotProductCalc
{
    double h , s;
    int n;
public:
    void operator()(const blocked_range<int>& r) const
    {
        int begin = r.begin();
        int end = r.end();
    //  h = 1.0/n;
    //  s = 0.0;
        for (int i = begin; i != end; i++)
                s += sqrt(1.0-((i * h)*(i * h))) + sqrt(1.0-(((i+1) * h)*((i+1) * h))); // Ошибка 2
        s *= 2.0 * h;   // сдесь тоже Ошибка 2
    }
    DotProductCalc(double *pstep, double *pspi, int pkol): ph(pstep), ps(pspi), pn(pkol)//Ошибка  4
    {}
};
 
 
void ParallelResultCalculation(double* pstep, double* pspi,  int pkol)
{
    parallel_for(blocked_range<int>(0, n, s),DotProductCalc(pstep, pspi, pkol));//Ошибка  7
}
 
 
 
double f(double x){
return sqrt(1.0-x*x);
}
 
double Pi(int n, double s){
    int i;
    double x, h = 0.0;  
    h = 1.0/n;
    for (i = 0; i < n; i++) 
            s += f(i * h) + f((i+1) * h);
    s *= 2.0 * h;   
    return s;
}
int main (){
 
    int i, n = 10000000;
    double pi, s = 0.0;
    double Duration;
 
    tick_count Start, Finish;
 
    pi = atan(1.0) * 4.0;//точное значение пи
    printf("tochnoe znachenie Pi %f\n", atan(1.0) * 4.0);   
 
    Start = tick_count::now();  
    s=Pi(n, s); //вызов функции для подсчета пи    
    Finish = tick_count::now(); 
    Duration = (Finish - Start).seconds();
    printf("posledovatelnoe znachenie Pi %f\n",  s);    
    printf("Vremya posledovatelnogo vichisleniya: %f\n", Duration);
 
    
 
    h = 1.0/n;
    s = 0.0;
 
    Start = tick_count::now();
    ParallelResultCalculation(pMatrix, pVector, pResult, Size, 1);
    //Finish = GetTime();
    Finish = tick_count::now();
    //Duration = Finish - Start;
    Duration = (Finish - Start).seconds();
    // Printing the result vector
    //printf("\n Result Vector: \n");
    //PrintVector(pResult, Size);
    // Printing the time spent by matrix-vector multiplication
    printf("\n Time of execution: %f\n", Duration);
 
 
        
    return (0);
}
Ошибка 2 error C2166: левостороннее значение указывает на объект-константу c:\tbb40_20110809oss\examples\test_all\fibonacci\Fibonacci.c pp 26 fibonacci

Ошибка 4 error C2614: DotProductCalc: недопустимая инициализация члена: 'pn' не является базовым классом или членом c:\tbb40_20110809oss\examples\test_all\fibonacci\Fibonacci.c pp 30 fibonacci

Ошибка 7 error C2065: n: необъявленный идентификатор c:\tbb40_20110809oss\examples\test_all\fibonacci\Fibonacci.c pp 36 fibonacci
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2015, 10:51
Ответы с готовыми решениями:

Intel tbb, вычисление числа Пи
доброго времени, продолжаю изучать intel tbb программа считает число пи выдает много ошибок ,...

Ищу литературу по Intel tbb
скачал библиотеки с сайта, не могу подключить и запустить какой нибудь пример, хотя и примеры то...

Скалярное произведение векторов и Intel TBB
Добрый день. Требуется распараллелить программу вычисления скалярного произведения векторов с...

Не могу заставить работать библиотеку Intel TBB
Все пути прописал по официальному гайду, но при компиляции стандартного...

3
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
03.12.2015, 11:05 2
ildariys, operator() константный, при этом в нем меняется s. Некорректно. В классе нет никаких ph, ps, pn.
n нет в параметрах функции ParallelResultCalculation
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 25
03.12.2015, 13:28  [ТС] 3
переделал
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
90
91
92
93
94
95
96
97
98
99
#include <iomanip>
#include <iostream>
#include <limits>
#include <time.h>
#include "tbb/tick_count.h"
#include "tbb/task_scheduler_init.h"
#include <tbb/parallel_reduce.h>
#include "tbb/blocked_range.h"
#include "tbb/parallel_for.h"
using namespace tbb;
using namespace std; 
 
 
class DotProductCalc
{
    double h , s;
    int n ;
public:
    void operator()(const blocked_range<int>& r)// const
    {
        //int begin = r.begin();
        int end = r.end();  
        int num_n;
        h = 1.0/n;
        s = 0.0;
        for (int i = 0; i != end; i++)
                s += sqrt(1.0-((i * h)*(i * h))) + sqrt(1.0-(((i+1) * h)*((i+1) * h))); // Ошибка   2
        s *= 2.0 * h;   // сдесь тоже Ошибка    2
    } 
    void join(DotProductCalc &p)   { 
        s += p.s;  
    }   
    DotProductCalc(DotProductCalc &p, tbb::split){
        s=0.0;
        //num_n=p.num_n;
        n=p.n;
    }
     DotProductCalc(int n){
        s=0.0;
        //num_n = n;
        h = 1.0/n;
    }
};
 
 
 
 
 
 
double f(double x){
return sqrt(1.0-x*x);
}
 
double Pi(int n, double s){
    int i;
    double x, h = 0.0;  
    h = 1.0/n;
    for (i = 0; i < n; i++) 
            s += f(i * h) + f((i+1) * h);
    s *= 2.0 * h;   
    return s;
}
int main (){
 
    int i, n = 10000000;
    double pi, s = 0.0;
    double Duration;
 
    tick_count Start, Finish;
 
    pi = atan(1.0) * 4.0;//точное значение пи
    printf("tochnoe znachenie Pi %f\n", atan(1.0) * 4.0);   
 
    Start = tick_count::now();  
    s=Pi(n, s); //вызов функции для подсчета пи 
    Finish = tick_count::now(); 
    Duration = (Finish - Start).seconds();
    printf("posledovatelnoe znachenie Pi %f\n",  s);    
    printf("Vremya posledovatelnogo vichisleniya: %f\n", Duration);
 
    // Инициализация библиотеки Intel TBB   
    tbb::task_scheduler_init init;  
    Start = tick_count::now();
   // DotProductCalc s(n);
    parallel_reduce(blocked_range<long>(0, n, 1),DotProductCalc(s));  
    //Finish = GetTime();
    Finish = tick_count::now();
    //Duration = Finish - Start;
    Duration = (Finish - Start).seconds();
    // Printing the result vector
    //printf("\n Result Vector: \n");
    //PrintVector(pResult, Size);
    // Printing the time spent by matrix-vector multiplication
    printf("\n Time of execution: %f\n", Duration);
 
 
        
    return (0);
}
теперь такая ошибка
Ошибка 2 error C2664: void DotProductCalc::operator ()(const tbb::blocked_range<Value> &): невозможно преобразовать параметр 1 из 'tbb::blocked_range<Value>' в 'const tbb::blocked_range<Value> &' C:\tbb40_20110809oss\include\tbb\parallel_reduce.h 152 fibonacci
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
03.12.2015, 14:54 4
ildariys, Создается blocked_range<long> ожидается blocked_range<int>.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2015, 14:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Intel TBB and VS 2015
Зарегистрировался здесь:...

БД *.TBB
день добрый, никто не подскажет что это за БД с таким расширением, и через что с ними работать,...

Совместимость Delphi с процессорами типа Intel® Atom™ Z3735F, Intel® Celeron® N2840, Intel® Pentium® N3540
Всем привет, сейчас передо мной стоит вопрос выбора ноутбука, ноутбук нужен для учебы, в целом не...

библиотека TBB )
В общем, вопрос :как установить библиотеку TBB? У меня Microsoft Visual C++ 2010. И библиотека...

.tbb the bat
скажите пожалуйста как изменить формат, не нашел не одну нормальную программу? я вообще хочу их на...

TBB перемножение матриц
доброго времени. пытаюсь переделать умножение векторов на премножение матриц, выдает ошибку ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.