Hi Karl,

sounds great!
No reason to hurry :-)

Best regards
Andreas


> 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