Intel® oneAPI Threading Building Blocks
Ask questions and share information about adding parallelism to your applications when using this threading library.

private problem with blocked_range2d

arthurgr
Beginner
582 Views
Hello,
I am new to TBB, my first attempts with parallel_for and parallel_scan have worked better than I could hope.
But now I try with a blocked_range2d and I cannot compile even the simplest code.

This compiles :

class FVoid1d {
public:
FVoid1d(){}
void operator () (const tbb::blocked_range<:SIZE_T>& r) const {}
};
tbb::parallel_for (tbb::blocked_range<:SIZE_T>(0,2,1),
FVoid1d());
This doesn't :

class FVoid2d {
public:
FVoid2d(){}
void operator () (const tbb::blocked_range2d<:SIZE_T>& r) const {}
};
tbb::parallel_for (tbb::blocked_range2d<:SIZE_T>(0,2,1,0,2,1),
FVoid2d());
Of course with this :
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
#include "tbb/blocked_range2d.h"
I must have missed something but I can not see what.
I am under Mac OS 10.6.7 (Intel Core 2 Duo), I tried with GCC 4.0 and 4.2
TBB 3.0 Update 7
log:

tbb/blocked_range.h:113:0 tbb/blocked_range.h:113: error: 'static Value tbb::blocked_range::do_split(tbb::blocked_range&) [with Value = long unsigned int]' is private

tbb/blocked_range.h:108:0 tbb/blocked_range.h:108: error: 'long unsigned int tbb::blocked_range::my_begin' is private

...

Thanks,

AG

0 Kudos
3 Replies
smasherprog
Beginner
582 Views
You probably forgot a semi colon or curly brace somewhere in the code. You will have to most more of the code because it is difficult to tell what is happenening with those few lines.
0 Kudos
arthurgr
Beginner
582 Views
Hello, thanks for the answer.
I found the problem is elsewhere. If I define the body of operator() inside the class or not :
This code was earlier in a header, I put all together to locate the problem :
This works :
#include "tbb/blocked_range.h"
#include "tbb/parallel_for.h"
class FFoo {
public:
FFoo () {}
void operator () (const tbb::blocked_range<:SIZE_T> &r);
};
#include "tbb/blocked_range2d.h"
void FFoo::operator () (const tbb::blocked_range<:SIZE_T> &r) {
std::size_t b = r.begin();
std::size_t e = r.end();
b; e;
}
This doesn't :
#include "tbb/blocked_range.h"
#include "tbb/parallel_for.h"
class FFoo {
public:
FFoo () {}
void operator () (const tbb::blocked_range<:SIZE_T> &r){
std::size_t b = r.begin();
std::size_t e = r.end();
b; e;
}
};
#include "tbb/blocked_range2d.h"
AG.
0 Kudos
RafSchietekat
Valued Contributor III
582 Views
Order all #include statements before any code (especially in the second example), choose the files that are being referenced in that code (instead of mixing up blocked_range and blocked_range2d), and declare the operators const (put "const" after the closing parenthesis for the parameter and before the semicolon or opening brace, see the Reference manual; the range reference can also be non-const, although I don't see why this should be allowed, and it's safe to add the const as you did). Does that work (I don't see how the first example possibly could work as-is)?
0 Kudos
Reply