From: Charles D. <cde...@gm...> - 2016-05-10 13:40:56
|
Excellent, thank you for explaining that. One followup thing, I am trying a trivial function to test this: int findContext(int x){ viennacl::context ctx(viennacl::ocl::get_context(static_cast<long>(x))) return x } but I keep getting a compiler error: >error: variable ‘viennacl::context ctx’ has initializer but incomplete type Did I miss something? Thanks, Charles On Mon, May 9, 2016 at 4:09 PM, Karl Rupp <ru...@iu...> wrote: > Hi Charles, > > setContext() is not thread-safe, so if mclapply() is executing in > parallel, there will be a race. MPI works across processes, so globals are > not shared (and hence setContext() has no problems). > > If you want to run multithreaded, you should manage the contexts > explicitly. That is, pass a viennacl::context object to the respective > constructors of viennacl::vector, viennacl::matrix, etc. You can find > examples here: > > https://github.com/viennacl/viennacl-dev/blob/master/examples/tutorial/multithreaded.cpp > > https://github.com/viennacl/viennacl-dev/blob/master/examples/tutorial/multithreaded_cg.cpp > > Best regards, > Karli > > > > > On 05/09/2016 10:32 PM, Charles Determan wrote: > >> I am trying to use multiple GPU's in parallel using ViennaCL through my >> gpuR package. In essence the context is selected at the R level (one >> context per device already initialized). Then a matrix is created on >> that device. The code looks like this: >> >> create_matrix <- function(id){ >> # sets context >> setContext(id) >> # create matrix >> mat <- vclMatrix(rnorm(16), nrow=4, ncol=4) >> return(mat) >> } >> >> # a fork over context 1 and 2 >> out <- mclapply(1:2, function(x) create_matrix(x)) >> >> Yet, strangely this just hangs. It doesn't return anything. Perhaps I >> am missing something in how OpenCL contexts are handed in parallel? I >> ask as I recall that PETSC had some multi GPU functionality with MPI. >> The above makes sense to me without MPI but again I may be missing >> something. >> >> The actual copying happens in this file at line 36 >> (https://github.com/cdeterman/gpuR/blob/develop/src/dynVCLMat.cpp) just >> after "starting to copy". It seems almost like it a problem with the >> class objects (defined in >> >> https://github.com/cdeterman/gpuR/blob/develop/inst/include/gpuR/dynVCLMat.hpp >> ). >> >> Any insight would be appreciated. >> >> Regards, >> Charles >> >> >> >> ------------------------------------------------------------------------------ >> Mobile security can be enabling, not merely restricting. Employees who >> bring their own devices (BYOD) to work are irked by the imposition of MDM >> restrictions. Mobile Device Manager Plus allows you to control only the >> apps on BYO-devices by containerizing them, leaving personal data >> untouched! >> https://ad.doubleclick.net/ddm/clk/304595813;131938128;j >> >> >> >> _______________________________________________ >> ViennaCL-devel mailing list >> Vie...@li... >> https://lists.sourceforge.net/lists/listinfo/viennacl-devel >> >> > |