Boost logo

Ublas :

From: Peter Schmitteckert (peter_at_[hidden])
Date: 2007-09-25 02:54:15


Tan, Sarah (FID) wrote:
> Hi
> I am wondering whether anyone has experience with the stability issue
> when compiling ublas with Intel C++ Compiler for Windows (ICC 9.1).

I'm neither using Windows and OpenMP, however I'm using ublas in a
Posix threads environment, and it works well.

> std::vector< ublas::matrix<double> > outputVec;
> for (unsigned i = 0; i < 4; ++i)

As a remark, if you plan to use larger dimensions, and/or
dynamic insertion to std::vector I wouldn't store the matrices
in the container. If STL reorders/resizes it will copy the matrices
(at least the descriptive data). I always store pointers to dynamically
created matrices.

> #pragma omp barrier
> for (unsigned i = 0; i < 4; ++i)
> output += outputVec[i];

It is not clear for me, whether this part is in parallel mode.
If this loop gets parallelized it can't work ( or it works only accidently),
as two OpenMP thread my increment a matrix element at the same time, so some
additions can get lost.

I'm not using OpenMP, but I assume that parallelization won't stop at the
barrier, it's just a synchronisation point. Please post a working
example as suggested by Gunter (including closing brackets)

You may try to check something like

  for (unsigned i = 0; i < 4; ++i)
#pragma omp barrier
        output += outputVec[i];

or whatever seriell pragma is available in OpenMP ( I don't know the syntax).

Best regards,

Dr. Peter Schmitteckert                                 Center for Functional Nanostructures
Institut für Theorie der Kondensierten Materie          Karlsruhe Institute of Technology
Universität Karlsruhe
Wolfgang-Gaede Str. 1
D-76128 Karlsruhe