Hi Andreas,

- good news:
I made good progress on introducing a generic context. For code lines 
such as
  viennacl::vector<T> x = y + z;
the vector x is created in the correct context (i.e. deduced from y, z). 
This resolves most of the issues with temporaries.

- bad news:
I haven't found enough time for applying the same scheme to matrices 
yet. As the infrastructure is mostly ready, this shouldn't take too long 
and be completed during tomorrow. Stay tuned :-)

Best regards,
Karli



On 07/21/2013 09:59 AM, Andreas IHU wrote:
> Hi again,
>
> here's another problem which just occured to me while working with the latest 
> developer version from GitHub.
>
> I have a program which has to iteratively solve a number of independent 
> equation systems.
> The actual number of systems may vary between 1 and 10.
> Because they are totally independent from each other, we assign each system a 
> number of OpenMP threads allowing them to be solved in parallel at the same 
> time.
>
> Now I tried to integrate ViennaCL into that scheme and used the 
> multithreaded.cpp example as a guide.
> The main difference is that I use OpenMP threads instead of Boost ones.
>
> My approach is to first create as many different OpenCL contexts as equation 
> systems do exist and split the existing OpenCL devices over them.
> If just one device exists, its gonna be used by all contexts, which shouldn't 
> be a problem.
> Then I call
>
>    viennacl::ocl::switch_context()
>
> for every equation system and allocate all the required VCL vectors and 
> matrices required just afterwards.
> This makes sure they are assigned and allocated for the context they actually 
> belong to.
> This all still takes place in serial mode and doesn't bring me in trouble :-)
>
> The actual problems begin, when the solver routine of our programm is called 
> in parallel mode.
>
> 1.) It fills a preallocated STL matrix with the current coefficients and 
> updates the RHS vector.
>      These are gonna be copied to their VCL counterparts using
>          viennacl::copy(stlmat,vclmat);
>      What happens exactly during this call is that
>
>      viennacl::copy()->
>        viennacl::detail::copy_impl()->
>          gpu_matrix.set()->
>            viennacl::backend::memory_create()             (in 
> compressed_matrix.hpp at row 519ff)
>
>      allocates 3 new buffers which should be created for the context they 
> belong to.
>      This could be achieved by calling
>           viennacl::ocl::switch_context()
>      before the copy takes place.
>      Unfortunately this isn't an option because I would have to use a OMP 
> Critical region to make sure that the parallel calls to switch_context() & 
> copy() do not overlap each other leading to race conditions.
>      So what I need is an oportunity to specify a context in which the copy() 
> takes place without having to change the actual context.
>
> 2.) The same problem happens afterwards when calling the actual 
> Preconditioner and solve() routines.
>      They too allocate memory for the currently active context.
>
> I built a temporary workaround by putting the whole sequence into a OpenMP 
> Critical region which prevents context errors in ViennaCL,
> but makes it impossible to solve the equation systems in parallel.
>
> Any suggestions on that?
> Kind regards
> Andreas Rost
>
>
>
>
> ------------------------------------------------------------------------------
> See everything from the browser to the database with AppDynamics
> Get end-to-end visibility with application monitoring from AppDynamics
> Isolate bottlenecks and diagnose root cause in seconds.
> Start your free trial of AppDynamics Pro today!
> http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
> _______________________________________________
> ViennaCL-devel mailing list
> ViennaCL-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/viennacl-devel
>


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel

Reply via email to