From: Alex C. <ach...@gm...> - 2012-08-02 01:13:14
|
I think that's a good way to go, except that I think the SSE and OpenMP BLAS implementations shouldn't be separate. I'm a little bit intimidated because all the OpenCL code would have to be translated to CPU code in order for a CPU backend to have full functionality. This might not be done anytime soon. Also, do you think my sse blas and tred2 will be included in the next release? When is the next release? Alex PS: reply cc'ed to viennacl-devel On Wed, Aug 1, 2012 at 3:38 AM, Karl Rupp <ru...@iu...> wrote: > Hi Alex, > > I've spent some more thoughts on how to separate the linear algebra > backends suitably. Currently, some OpenCL statements are mixed into the > vector<> and matrix<> classes, while the operations are clearly separated > via calls to externally defined functions (e.g. prod_impl()), cf. > vector_operations.hpp and matrix_operations.hpp. > > To simplify your development efforts I could continue this separation and > also move initialization routines to separate header files. In the best > case, all that is necessary for a CPU-only fallback is to have e.g. in > vector.hpp something like > > #ifdef VIENNACL_NO_OPENCL > #include "viennacl/linalg/vector-**operations-cpu.hpp" > #else > #include "viennacl/linalg/vector-**operations-opencl.hpp" > #endif > > Going one step further, we could even separate the convenience types from > the BLAS backend and support something like > > #if defined VIENNACL_USE_SSE_BLAS > #include "viennacl/linalg/vector-**operations-sse.hpp" > #elif defined VIENNACL_USE_OPENCL_BLAS > #include "viennacl/linalg/vector-**operations-opencl.hpp" > #elif defined VIENNACL_USE_OPENMP_BLAS > #include "viennacl/linalg/vector-**operations-openmp.hpp" > ... > #else > #include "viennacl/linalg/vector-**operations-fallback.hpp" > #endif > > We probably won't have the development resources for supporting a whole > zoo of different backends, yet I like the idea of a clean separation. What > do you think? > > Best regards, > Karli > > PS: cc'ed to viennacl-devel > > > > > On 07/29/2012 06:49 AM, Alex Christensen wrote: > >> I made tred2 not copy memory, and it works with ublas matrices. My goal >> is to make a backend so that defining VIENNACL_NO_OPENCL makes existing >> code work without a gpu (or even linking to an OpenCL library). I'll >> let you know if I run into any problems. Hopefully the existing QR code >> will work with that. >> >> Since the LU routines don't do partial pivoting, should I include my cpu >> LU function with partial pivoting? Should I include my cholesky >> function also, maybe as a separate header? The only cholesky function I >> have found in ViennaCL is in spai. >> >> Alex >> >> > |