Hello,

I write to you to report a problem I've been having when trying to use dolfin 
functions in parallel exectution. Note that this does not refer to computation 
using dolfin libraries but rather using the results in parallel. 

you'll find the error report below this lines and as an attachment as well.

thanks in advance for the help. 

Alvaro Diez

=======================================ERROR 
REPORT:=====================================================================


I'm trying to parallelize a program that uses dolfin libraries to solve Poisson 
and Laplace equations. I am using C++11 built-in multithreading class 
"thread.h".
My class Carrier contains:

                                class Carrier
                {
                        private:
                                [...]
                                        SMSDetector * _detector;
                                [...]
                }

where SMSDetector is:

                class SMSDetector
                {
                        private:
                                [...]
                                        Function _w_f_grad; // function to 
store the weighting field 
                                (vectorial)
                                        [...]
                        public:
                                        Function * get_w_f_grad();

                }

When the number of threads used for the simulation is bigger than one (i.e. 
parallel execution) the program crashes with segmentation fault. The program 
needs to evaluate, for each Carrier I create a method like:

                _detector->get_w_f_grad()->eval(wrap_w_field, wrap_x);

                where the arguments for eval were defined as:

                Array<double> wrap_x(2, _x.data());
                Array<double> wrap_w_field(2, _w_field.data());


The error persists even when mutexes are implemented to avoid race conditions 
produced when several Carriers try to access the eval().  
The error message I get (only the first time I run it after rebooting the 
machine) is: 

                terminate called after throwing an instance of 
'std::runtime_error' what():

                *** 
                
-------------------------------------------------------------------------
                *** DOLFIN encountered an error. If you are not able to resolve 
this issue
                *** using the information listed below, you can ask for help at
                ***
                ***     fenics@fenicsproject.org
                ***
                *** Remember to include the error message listed below and, if 
possible,
                *** include a *minimal* running example to reproduce the error.
                ***
                *** 
                
-------------------------------------------------------------------------
                *** Error:   Unable to compute collisions with bounding box 
tree.
                *** Reason:  Bounding box tree has not been built. You need to 
call tree.build().
                *** Where:   This error was encountered inside 
BoundingBoxTree.cpp.
                *** Process: unknown
                ***
                *** DOLFIN version: 1.5.0
                *** Git changeset:  unknown
                *** 
                
-------------------------------------------------------------------------

                [pcssd30:03650] *** Process received signal ***
                [pcssd30:03650] Signal: Aborted (6)
                [pcssd30:03650] Signal code:  (-6)
                [pcssd30:03650] [ 0] [0xb7735410]
                [pcssd30:03650] [ 1] [0xb7735428]
                [pcssd30:03650] [ 2] 
/lib/i386-linux-gnu/libc.so.6(gsignal+0x47) [0xb57bf607]
                [pcssd30:03650] [ 3] /lib/i386-linux-gnu/libc.so.6(abort+0x143) 
[0xb57c2a33]
                [pcssd30:03650] [ 4] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x155)
 [0xb59cfd45]
                [pcssd30:03650] [ 5] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x70a33) [0xb59cda33]
                [pcssd30:03650] [ 6] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x70aad) [0xb59cdaad]
                [pcssd30:03650] [ 7] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x9cc6d) [0xb59f9c6d]
                [pcssd30:03650] [ 8] 
/lib/i386-linux-gnu/libpthread.so.0(+0x6f70) [0xb5570f70]
                [pcssd30:03650] [ 9] /lib/i386-linux-gnu/libc.so.6(clone+0x5e) 
[0xb587cbee]
                [pcssd30:03650] *** End of error message ***

                Aborted (core dumped)

        When using a debugger (gdb), the error message reads:

        "Program received signal SIGSEGV, Segmentation fault. 0xb7d90bd4 in 
dolfin::MeshTopology::dim() const () from 
/usr/lib/i386-linux-gnu/libdolfin.so.1.5"

        For more details on how the code works, the full program source-code is 
available on Github-> https://github.com/AlGepe/TRACS/ an the problematic part 
seems to be from line 87 of Carrier.cpp to the end of that method, most likely 
in lines 120 - 125 of that file.
Hello,

I'm trying to parallelize a program that uses dolfin libraries to solve Poisson 
and Laplace equations. I am using C++11 built-in multithreading class 
"thread.h".

                My class Carrier contains:

                                class Carrier
                {
                        private:
                                [...]
                                        SMSDetector * _detector;
                                [...]
                }

where SMSDetector is:

                class SMSDetector
                {
                        private:
                                [...]
                                        Function _w_f_grad; // function to 
store the weighting field 
                                (vectorial)
                                        [...]
                        public:
                                        Function * get_w_f_grad();

                }

When the number of threads used for the simulation is bigger than one (i.e. 
parallel execution) the program crashes with segmentation fault. The program 
needs to evaluate, for each Carrier I create a method like:

                _detector->get_w_f_grad()->eval(wrap_w_field, wrap_x);

                where the arguments for eval were defined as:

                Array<double> wrap_x(2, _x.data());
                Array<double> wrap_w_field(2, _w_field.data());


The error persists even when mutexes are implemented to avoid race conditions 
produced when several Carriers try to access the eval().  
The error message I get (only the first time I run it after rebooting the 
machine) is: 

                terminate called after throwing an instance of 
'std::runtime_error' what():

                *** 
                
-------------------------------------------------------------------------
                *** DOLFIN encountered an error. If you are not able to resolve 
this issue
                *** using the information listed below, you can ask for help at
                ***
                ***     fenics@fenicsproject.org
                ***
                *** Remember to include the error message listed below and, if 
possible,
                *** include a *minimal* running example to reproduce the error.
                ***
                *** 
                
-------------------------------------------------------------------------
                *** Error:   Unable to compute collisions with bounding box 
tree.
                *** Reason:  Bounding box tree has not been built. You need to 
call tree.build().
                *** Where:   This error was encountered inside 
BoundingBoxTree.cpp.
                *** Process: unknown
                ***
                *** DOLFIN version: 1.5.0
                *** Git changeset:  unknown
                *** 
                
-------------------------------------------------------------------------

                [pcssd30:03650] *** Process received signal ***
                [pcssd30:03650] Signal: Aborted (6)
                [pcssd30:03650] Signal code:  (-6)
                [pcssd30:03650] [ 0] [0xb7735410]
                [pcssd30:03650] [ 1] [0xb7735428]
                [pcssd30:03650] [ 2] 
/lib/i386-linux-gnu/libc.so.6(gsignal+0x47) [0xb57bf607]
                [pcssd30:03650] [ 3] /lib/i386-linux-gnu/libc.so.6(abort+0x143) 
[0xb57c2a33]
                [pcssd30:03650] [ 4] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x155)
 [0xb59cfd45]
                [pcssd30:03650] [ 5] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x70a33) [0xb59cda33]
                [pcssd30:03650] [ 6] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x70aad) [0xb59cdaad]
                [pcssd30:03650] [ 7] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x9cc6d) [0xb59f9c6d]
                [pcssd30:03650] [ 8] 
/lib/i386-linux-gnu/libpthread.so.0(+0x6f70) [0xb5570f70]
                [pcssd30:03650] [ 9] /lib/i386-linux-gnu/libc.so.6(clone+0x5e) 
[0xb587cbee]
                [pcssd30:03650] *** End of error message ***

                Aborted (core dumped)

        When using a debugger (gdb), the error message reads:

        "Program received signal SIGSEGV, Segmentation fault. 0xb7d90bd4 in 
dolfin::MeshTopology::dim() const () from 
/usr/lib/i386-linux-gnu/libdolfin.so.1.5"

        For more details on how the code works, the full program source-code is 
available on Github-> https://github.com/AlGepe/TRACS/ an the problematic part 
seems to be from line 87 of Carrier.cpp to the end of that method, most likely 
in lines 120 - 125 of that file.
_______________________________________________
fenics mailing list
fenics@fenicsproject.org
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to