<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Hello, in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160494#M27889</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;Have a look at mkl_sparse_?_syrkd, https://software.intel.com/en-us/mkl-developer-reference-c-mkl-sparse-syrkd.&amp;nbsp;Isn't&amp;nbsp;it what you're looking for?&lt;/P&gt;&lt;P&gt;Best,&lt;BR /&gt;Kirill&lt;/P&gt;</description>
    <pubDate>Mon, 13 Apr 2020 19:00:23 GMT</pubDate>
    <dc:creator>Kirill_V_Intel</dc:creator>
    <dc:date>2020-04-13T19:00:23Z</dc:date>
    <item>
      <title>Sparse Matrix Matrix Multiplication</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160493#M27888</link>
      <description>&lt;P&gt;I have a matrix A I want to perform the following operation in MKL,&lt;/P&gt;&lt;P&gt;C = A&lt;L&gt;*A&lt;SUP&gt;T&lt;/SUP&gt;&amp;nbsp;&lt;/L&gt;&lt;/P&gt;&lt;P&gt;Where A is a sparse matrix and A&lt;L&gt; is the row l from h of A. I am currently computing The A&lt;SUP&gt;T&lt;/SUP&gt;&amp;nbsp;and then multiplying it using &lt;STRONG&gt;spmmd.&amp;nbsp;&lt;/STRONG&gt;Note that C is a dense matrix. But this approach wastes memory because I need to compute A&lt;SUP&gt;T&amp;nbsp;&lt;/SUP&gt;separately.&amp;nbsp; Is there any specific function in MKL that I can use for this?&amp;nbsp;&lt;/L&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Apr 2020 01:44:33 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160493#M27888</guid>
      <dc:creator>Ferdous__S_M</dc:creator>
      <dc:date>2020-04-13T01:44:33Z</dc:date>
    </item>
    <item>
      <title>Hello,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160494#M27889</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;Have a look at mkl_sparse_?_syrkd, https://software.intel.com/en-us/mkl-developer-reference-c-mkl-sparse-syrkd.&amp;nbsp;Isn't&amp;nbsp;it what you're looking for?&lt;/P&gt;&lt;P&gt;Best,&lt;BR /&gt;Kirill&lt;/P&gt;</description>
      <pubDate>Mon, 13 Apr 2020 19:00:23 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160494#M27889</guid>
      <dc:creator>Kirill_V_Intel</dc:creator>
      <dc:date>2020-04-13T19:00:23Z</dc:date>
    </item>
    <item>
      <title>Thanks. Not exactly. syrkd</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160495#M27890</link>
      <description>&lt;P&gt;Thanks. Not exactly. syrkd computes A*A&lt;SUP&gt;T&lt;/SUP&gt;. But I do not want to compute it. What I need is a subset of the rows of A times the transpose of A. I do not see how I can use syrkd for achieving this.&lt;/P&gt;</description>
      <pubDate>Mon, 13 Apr 2020 19:58:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160495#M27890</guid>
      <dc:creator>Ferdous__S_M</dc:creator>
      <dc:date>2020-04-13T19:58:44Z</dc:date>
    </item>
    <item>
      <title>I see, I didn't notice it. So</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160496#M27891</link>
      <description>&lt;P&gt;I see, I didn't notice it. So, I guess then that h is relatively small, right? (if it was comparable with the size of the matrix you could use syrk and then throw away the part which is not needed).&lt;/P&gt;&lt;P&gt;If h&amp;nbsp;is very small,&amp;nbsp;you might consider conveting&amp;nbsp;A(1:h,:) and the resulting matrix to a dense format, and make use of mkl_sparse_?_mm (and use an extra transposition of the result). Say, if A(1:h,:) = B (dense), you can write A(1:h,:)*A^T = B * A^T = (A&amp;nbsp;* B^T)^T, so you can transpose B while converting A(1:h,:) to the&amp;nbsp;dense format, compute the result using mm and then transpose the (skinny, dense) matrix product to get the final result (in the dense format).&lt;/P&gt;&lt;P&gt;You can also try to play around with CSR/CSC formats and transposition to avoid transposing the matrix A at the cost of transposing the other objects (similar to what I describe above)&amp;nbsp;but I am not sure it will bring you a lot of benefits.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Also, if you tell us more about your use case and why it happens to be something important ~ critical for performance, we can add it to the list of feature requests.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best,&lt;BR /&gt;Kirill&lt;/P&gt;</description>
      <pubDate>Tue, 14 Apr 2020 05:55:25 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Sparse-Matrix-Matrix-Multiplication/m-p/1160496#M27891</guid>
      <dc:creator>Kirill_V_Intel</dc:creator>
      <dc:date>2020-04-14T05:55:25Z</dc:date>
    </item>
  </channel>
</rss>

