Intel® Array Building Blocks (Archived)

PDE Stencil and efficiency of the treament of boundary conditions.


Solving PDE, the stencil possibility in arbb is useful. My question is about the vectorization/parallelization of the boundary conditions where the stencil doesn't apply.

For example i use the stencil in that way :

// first the stencil

// ********************

ARBB and classes

Hi In order to parallelize function in class member i'd like to use this kind of structure : class toto { public : toto() {}; void valuate(arbb::f64 & ret) { ret =0. ; }; void values( arbb::dense & ret ) { arbb::map(toto::valuate)(ret); } void paral_call( arbb::dense & ret) { arbb::call(toto::values)(ret); } } Why is it impossible. Of course no problem if used outside class. Is there a workaround to achieve the parallelization Thank you

Manipulating row, columns of dense<f32,2>

Hi I am using dense vector and i try to fill row or columns without _for nest in order to get parallelization: For exemple is it possible to fill a row or column with a given value : dense a; a(0, all) = val ; // all for all elements of row 0 If yes is it possible for a section : a(0,[1:3])= val ; // This possibility is available in all C++ libraries i use (eigen, blitz++). Thank you very much

Excessively long error messages

I recently started utilize ArBB in a computer vision project. The performance improvement is amazing. However, there is an annoying issue that I would like to see a way to address. When doing arbb::call or arbb::map, if there is a minor error in the argument, it would produce error messages of a mile length (I am using gcc 4.6.0), such as
gauss.cpp:198:4: error: no matching function for call to call() gauss.cpp:198:4: note: candidates are: /opt/intel/arbb/ note: arbb_2::closure arbb_2::call(void (*)())

Big kernel with internal error

Hi I developped a kernel with ARBB for solving Partial Differentiel Equation in 2D with stencil. Everything is fine with the emulator (ARBB_EMULATE=1)though being very slow comparing with a pure C++ version. Without the emulator, even withARBB_OPT_LEVL=O0, the code runs a long time ending with a Low level optimization (LLO) got the exceptions: ILLEGAL_MEM_OP: Access the illegal memory address => Accessing not mapped address [0x50] at IP[0x7fd6736ffad5]. Failed! terminate called after throwing an instance of 'arbb_2::internal_error'

Invalid scope 'function' to arbb_end_loop: invalid control pairs

Hi I still have another example where i get an error due to the boolean data in the code below : // pay off class to valuate option
class PayOffSimple2 { public : arbb::f64 strike ; arbb::boolean bVendeur; PayOffSimple2() : strike(0.),bVendeur(true){} PayOffSimple2( arbb::f64 strike_, arbb::boolean bVendeur_):strike(strike_),bVendeur(bVendeur_){} arbb::f64 operator()( const arbb::f64 & x) const { _if (bVendeur) { return arbb::max(arbb::exp(x)-strike,0.); } _end_if; return -arbb::max(arbb::exp(x)-strike,0.); } }; // arbb wrapper

another issue on what(): zero types captured

Hi On simple another example i still get a "what(): zero types captured" although an arrb data is a member. // using bool so that the capture will recall the function behavior
class PayOffSimple1 { private : arbb::f64 strike ; bool bVendeur; public : PayOffSimple1() : strike(0.),bVendeur(true){} PayOffSimple1( arbb::f64 strike_, bool bVendeur_):strike(strike_),bVendeur(bVendeur_){} arbb::f64 operator()( const arbb::f64 & x) const { if (bVendeur) { return arbb::max(arbb::exp(x)-strike,0.); } return -arbb::max(arbb::exp(x)-strike,0.); } };

Passing class to arbb code

Hi Trying to have large arbb function, i face a problem with executing function captured by arbb. Here is the small exemple i took : // a small class
class PayOffSoSimple { public : PayOffSoSimple() {} PayOffSoSimple( const PayOffSoSimple & pay) {} arbb::f64 operator()() const { return 1.; } }; // a first caller with payoff function instanciated inside the caller void caller_( const arbb::usize & N) { PayOffSoSimple pay; arbb::dense Sol(N); _for (arbb::usize i= 0 , i < N , ++i) { Sol[i] = pay(); } _end_for; }

Iscriversi a Intel® Array Building Blocks (Archived)