KarlViennaCL: Sparse Matrix-Matrix Multiplication

|   |
|   |  |   |   |   |   |   |
| ViennaCL: Sparse Matrix-Matrix MultiplicationDescription  |
|  |
| View on www.iue.tuwien.ac.at | Preview by Yahoo |
|  |
|   |

Do you have any example in ViennaCL that actually does this? Can you please 
point this out? I was rethinking my strategy and was wondering if I formulate 
my Dense matrix multiplication as a sparse matrix multiplication and,a.) Use 
The modified Strassen algorithm to reduce the workload Strassen's Matrix 
Multiplication Relabeled

|   |
|   |  |   |   |   |   |   |
| Strassen's Matrix Multiplication RelabeledStrassen's Matrix Multiplication 
Relabeled Sarah M. Loos David S. Wise Computer Science Department     Computer 
Science Department Indiana University Indiana U... |
|  |
| View on src.acm.org | Preview by Yahoo |
|  |
|   |

b.) Use the sparse vs sparse matrix multiplication routine (of course with a 
sufficiently large base size) - With my GPU I can reduce the size to at least 
8192 x 8192
 Thanks and Regards
Sumit
      From: Karl Rupp <r...@iue.tuwien.ac.at>
 To: Sumit Kumar <dost_4_e...@yahoo.com> 
Cc: "viennacl-devel@lists.sourceforge.net" 
<viennacl-devel@lists.sourceforge.net> 
 Sent: Tuesday, July 28, 2015 4:01 PM
 Subject: Re: [ViennaCL-devel] ViennaCL reductions
   
Hi,

 > That worked. So, the final question I have would be as follows:
> viennacl::copy(vcl_C, eigen_mat);
> is a valid statement
> However, if I want to copy vcl_C to some particular region of a host
> matrix, then, do I have to first create a temporary host matrix and then
> copy that host matrix into a larger matrix or is there anything direct?
> Something like this:
> viennacl::copy(vcl_C, prod.block(0, j, source.rows(), bTemp.cols()));
>
> Otherwise the only way I can think of is this:
> RMMatrix_Float temp(rows,cols);
> viennacl::copy(vcl_C, temp);
> RMMatrix_Float biggerMatrix.block(0,j,rows,cols) = temp

you can either use temporaries, or create an Eigen::Map<> from your 
Eigen matrix for wrapping your existing matrix accordingly:
http://eigen.tuxfamily.org/dox/classEigen_1_1Map.html

Best regards,
Karli


> ------------------------------------------------------------------------
> *From:* Karl Rupp <r...@iue.tuwien.ac.at>
> *To:* Sumit Kumar <dost_4_e...@yahoo.com>
> *Cc:* "viennacl-devel@lists.sourceforge.net"
> <viennacl-devel@lists.sourceforge.net>
> *Sent:* Tuesday, July 28, 2015 2:06 AM
> *Subject:* Re: [ViennaCL-devel] ViennaCL reductions
>
> Hi,
>
>  > That's why I explicitly stated in my previous mail "Optional" :) I am
>  > one of those folks who likes the coziness of compile time decisions and
>  > (if possible) would like to make it available in VCL. However, I am not
>  > sure if doing this is possible via the current API structure of VCL. I
>  > will look into this as I first need to understand the intricacies of
>  > OpenCL.
>  >
>  > BTW, a previous question of mine was unanswered (or I may have
>  > overlooked). Are there any equivalent functions in VCL to do the
> following:
>  > a.) Two matrices, when transferred to the GPU should undergo
>  > element_wise multiplication ?
>  > b.) A unary operation on a matrix that has been transferred to the GPU?
>
> a.) and b.) sound a lot like you are looking for element_*-functions
> http://viennacl.sourceforge.net/doc/manual-operations.html#manual-operations-blas1,
> <http://viennacl.sourceforge.net/doc/manual-operations.html#manual-operations-blas1,>
> which work for vectors and matrices alike.
>
> Best regards,
> Karli
>
>
>
>  > ------------------------------------------------------------------------
>  > *From:* Karl Rupp <r...@iue.tuwien.ac.at <mailto:r...@iue.tuwien.ac.at>>
>  > *To:* Sumit Kumar <dost_4_e...@yahoo.com <mailto:dost_4_e...@yahoo.com>>
>  > *Cc:* "viennacl-devel@lists.sourceforge.net
> <mailto:viennacl-devel@lists.sourceforge.net>"
>  > <viennacl-devel@lists.sourceforge.net
> <mailto:viennacl-devel@lists.sourceforge.net>>
>  > *Sent:* Monday, July 27, 2015 9:13 PM
>  > *Subject:* Re: [ViennaCL-devel] ViennaCL reductions
>  >
>  > Hi Sumit,
>  >
>  >  > Agreed, the names can be returned in any order. As you are using CMake
>  >  > would it be possible to:
>  >  > a.) Write a small helper script using CMake that lists what
> devices the
>  >  > user has on his/her machine that are OpenCL compliant?
>  >
>  > Exactly this is provided by running viennacl-info:
>  >    $> mkdir build && cd build
>  >    $> cmake ..
>  >    $> make viennacl-info
>  >    $> examples/tutorial/viennacl-info
>  >
>  >
>  >  > b.) Make VCL select the appropriate device so that these issues of
>  >  > context selection etc can be avoided?
>  >
>  > In most cases the first OpenCL device returned is the most appropriate
>  > device for running the computations. If you know of any better strategy
>  > for picking the default device, please let us know and we are happy to
>  > adopt it. :-)
>  >
>  >
>  >  > c.) Of course, this would be purely optional and only available if the
>  >  > user wants to pre-select the device before writing any VCL code!
>  >
>  > How is that different from what is possible now? What is the value of
>  > making a runtime-decision (current ViennaCL code) a compile-time
>  > decision (CMake)?
>  >
>  > Imagine you are building a big application with GUI and other bells and
>  > whistles. In such a scenario you would like the user to select the
>  > compute device through a dialog at runtime rather than asking the user
>  > to recompile the whole application just to change the default device.
>  > Our current mindset is to incrementally move away from compile time
>  > decisions in cases where they are not needed.
>  >
>  > Best regards,
>  > Karli
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >  >
> ------------------------------------------------------------------------
>  >  > *From:* Karl Rupp <r...@iue.tuwien.ac.at
> <mailto:r...@iue.tuwien.ac.at> <mailto:r...@iue.tuwien.ac.at
> <mailto:r...@iue.tuwien.ac.at>>>
>  >  > *To:* Sumit Kumar <dost_4_e...@yahoo.com
> <mailto:dost_4_e...@yahoo.com> <mailto:dost_4_e...@yahoo.com
> <mailto:dost_4_e...@yahoo.com>>>
>  >  > *Cc:* "viennacl-devel@lists.sourceforge.net
> <mailto:viennacl-devel@lists.sourceforge.net>
>  > <mailto:viennacl-devel@lists.sourceforge.net
> <mailto:viennacl-devel@lists.sourceforge.net>>"


>  >  > <viennacl-devel@lists.sourceforge.net
> <mailto:viennacl-devel@lists.sourceforge.net>
>  > <mailto:viennacl-devel@lists.sourceforge.net
> <mailto:viennacl-devel@lists.sourceforge.net>>>
>
>
>
>  >  > *Sent:* Monday, July 27, 2015 7:03 PM
>  >  > *Subject:* Re: [ViennaCL-devel] ViennaCL reductions
>  >  >
>  >  > Hi Sumit,
>  >  >
>  >  >  > Thanks for the update. I will check it out. As for the second one,
>  >  >  > indeed thats what I ended up doing:
>  >  >  >
>  >  >  >    // Get some context information for OpenCL compatible GPU
> devices
>  >  >  >    viennacl::ocl::platform pf;
>  >  >  >    std::vector<viennacl::ocl::device> devices =
>  >  >  > pf.devices(CL_DEVICE_TYPE_GPU);
>  >  >  >    // If no GPU devices are found, we select the CPU device
>  >  >  >    if (devices.size() > 0)
>  >  >  >    {
>  >  >  >      // Now, often we may have an integrated GPU with the CPU. We
>  > would
>  >  >  >      // like to avoid using that GPU. Instead, we search for a
>  > discrete
>  >  >  >      // GPU.
>  >  >  >      viennacl::ocl::setup_context(0, devices[1]);
>  >  >  >    }
>  >  >  >    else
>  >  >  >    {
>  >  >  >      devices = pf.devices(CL_DEVICE_TYPE_CPU);
>  >  >  >      viennacl::ocl::setup_context(0, devices[0]);
>  >  >  >    }
>  >  >
>  >  > Keep in mind that devices may be returned in arbitrary order. I've
>  >  > already seen cases where the discrete GPU is returned as the first
>  >  > device. (Unfortunately I don't know of a robust and general way of
>  >  > dealing with such cases).
>  >  >
>  >  >
>  >  >  > Here is my kludge. Is there any "real" example of data
>  > partitioning and
>  >  >  > using multiple GPU's?
>  >  >
>  >  > No. PCI-Express latencies narrow down to sweet spot of real
> performance
>  >  > gains for most algorithms in ViennaCL a lot. Only algorithms relying
>  >  > heavily on matrix-matrix multiplications are likely to show good
> benefit
>  >  > from multiple GPUs. As a consequence, we are currently keeping our
> focus
>  >  > on single GPUs. There is some multi-GPU support through ViennaCL as a
>  >  > plugin for PETSc available, but that focuses on iterative solvers and
>  >  > does not cover any eigenvalue routines yet.
>  >  >
>  >  >
>  >  >
>  >  >
>  >  > Best regards,
>  >  > Karli
>  >  >
>  >  >
>  >  >
>  >
>  >
>  >
>
>
>



  
------------------------------------------------------------------------------
_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel

Reply via email to