<?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/inconsistent-results-from-mkl-dcscmv-and-mkl-dcsrmv/m-p/1052394#M21234</link>
    <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;

&lt;P&gt;I have only Composer XE 2013.5 (MKL 11.0.5) &amp;nbsp;installed, just try the code, it seems run fine. &amp;nbsp;It may be a bug in composer XE 2013.2 ( MKL 11.0.2) . &amp;nbsp;See&amp;nbsp;https://software.intel.com/en-us/articles/intel-mkl-110-bug-fixes&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Please upgrade the MKL version if possible ( the latest one : MKL 11.1. 3 ).&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;/P&gt;

&lt;P&gt;Ying&amp;nbsp;&lt;/P&gt;

&lt;PRE class="brush:;"&gt;$source /opt/intel/composer_xe_2013.5.192/mkl/bin/mklvars.sh intel64
$&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt; gcc dcsrmv.c -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lm -lpthread&lt;/SPAN&gt;&lt;/PRE&gt;

&lt;PRE class="brush:cpp;"&gt;$ ./a.out

=== Test 1: sols := M x - sols ===
(Mx - sols) using mkl_dcscmv (expected: [1 1 -1 0 0]^T)
sols[0] = 1.000000E+00.
sols[1] = 1.000000E+00.
sols[2] = -1.000000E+00.
sols[3] = 0.000000E+00.
sols[4] = 0.000000E+00.
(Mx - sols) using mkl_dcsrmv (expected: [1 1 -1 0 0]^T)
sols[0] = 1.000000E+00.
sols[1] = 1.000000E+00.
sols[2] = -1.000000E+00.
sols[3] = 0.000000E+00.
sols[4] = 0.000000E+00.

=== Test 2: sols := M x + 0 * sols ===
result 2.1: (Mx) using mkl_dcscmv (expected: [2 2 0 1 1]^T)
sols[0] = 2.000000E+00.
sols[1] = 2.000000E+00.
sols[2] = 0.000000E+00.
sols[3] = 1.000000E+00.
sols[4] = 1.000000E+00.
result 2.2: (Mx) using mkl_dcsrmv (expected: [2 2 0 1 1]^T)
sols[0] = 2.000000E+00.
sols[1] = 2.000000E+00.
sols[2] = 0.000000E+00.
sols[3] = 1.000000E+00.
sols[4] = 1.000000E+00.

=== Test 3: sols := M x + 1 * sols ===
result 3.1: (Mx + sol) using mkl_dcscmv (expected: [3 3 1 2 2]^T)
sols[0] = 3.000000E+00.
sols[1] = 3.000000E+00.
sols[2] = 1.000000E+00.
sols[3] = 2.000000E+00.
sols[4] = 2.000000E+00.
result: 3.2: (Mx + sol) using mkl_dcsrmv (expected: [3 3 1 2 2]^T)
sols[0] = 3.000000E+00.
sols[1] = 3.000000E+00.
sols[2] = 1.000000E+00.
sols[3] = 2.000000E+00.
sols[4] = 2.000000E+00.
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 01 Jul 2014 02:09:42 GMT</pubDate>
    <dc:creator>Ying_H_Intel</dc:creator>
    <dc:date>2014-07-01T02:09:42Z</dc:date>
    <item>
      <title>inconsistent results from mkl_dcscmv and mkl_dcsrmv</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/inconsistent-results-from-mkl-dcscmv-and-mkl-dcsrmv/m-p/1052393#M21233</link>
      <description>&lt;P style="font-size: 12px;"&gt;Hello,&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;I tried to calculate the (sparse) matrix-vector product using&amp;nbsp;mkl_dcscmv and&amp;nbsp;mkl_dcsrmv. However, sometimes they gave me different result. Here is the example I was using:&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;Let&amp;nbsp;&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;M : = [ 1 &amp;nbsp;1 &amp;nbsp;0 &amp;nbsp;0 ], x := [ 1 ], and &amp;nbsp;sols := [ 1 ] &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 1 &amp;nbsp;0 &amp;nbsp;1 &amp;nbsp;0 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ 1 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 1 ]&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 1 &amp;nbsp;0 -1 &amp;nbsp;0 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ 1 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 1 ]&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 0 &amp;nbsp;1 &amp;nbsp;0 &amp;nbsp;0 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ 1 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 1 ]&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[ 0 &amp;nbsp;0 &amp;nbsp;1 &amp;nbsp;0 ] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ 1 ].&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;I tried to calculate&lt;/P&gt;

&lt;OL&gt;
	&lt;LI style="font-size: 12px;"&gt;test 1: sols := M x - sols,&lt;/LI&gt;
	&lt;LI style="font-size: 12px;"&gt;test 2: sols := Mx, and&lt;/LI&gt;
	&lt;LI style="font-size: 12px;"&gt;test 3: sols := Mx + sols&lt;/LI&gt;
&lt;/OL&gt;

&lt;P style="font-size: 12px;"&gt;&lt;SPAN style="font-size: 12px; line-height: 14.399999618530273px;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; line-height: 14.399999618530273px;"&gt;by using either&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; line-height: 14.399999618530273px;"&gt;mkl_dcscmv or&amp;nbsp;mkl_dcsrmv. Here are the generated result:&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;=== Test 1: sols := M x - sols ===&lt;BR /&gt;
	(Mx - sols) using mkl_dcscmv (expected: [1 1 -1 0 0]^T)&lt;BR /&gt;
	sols[0] = 1.000000E+00.&lt;BR /&gt;
	sols[1] = 1.000000E+00.&lt;BR /&gt;
	sols[2] = -1.000000E+00.&lt;BR /&gt;
	sols[3] = 0.000000E+00.&lt;BR /&gt;
	sols[4] = 2.000000E+00.&lt;BR /&gt;
	(Mx - sols) using mkl_dcsrmv (expected: [1 1 -1 0 0]^T)&lt;BR /&gt;
	sols[0] = 1.000000E+00.&lt;BR /&gt;
	sols[1] = 1.000000E+00.&lt;BR /&gt;
	sols[2] = -1.000000E+00.&lt;BR /&gt;
	sols[3] = 0.000000E+00.&lt;BR /&gt;
	sols[4] = 0.000000E+00.&lt;/P&gt;

&lt;P&gt;=== Test 2: sols := M x + 0 * sols ===&lt;BR /&gt;
	result 2.1: (Mx) using mkl_dcscmv (expected: [2 2 0 1 1]^T)&lt;BR /&gt;
	sols[0] = 2.000000E+00.&lt;BR /&gt;
	sols[1] = 2.000000E+00.&lt;BR /&gt;
	sols[2] = 0.000000E+00.&lt;BR /&gt;
	sols[3] = 1.000000E+00.&lt;BR /&gt;
	sols[4] = 2.000000E+00.&lt;BR /&gt;
	result 2.2: (Mx) using mkl_dcsrmv (expected: [2 2 0 1 1]^T)&lt;BR /&gt;
	sols[0] = 2.000000E+00.&lt;BR /&gt;
	sols[1] = 2.000000E+00.&lt;BR /&gt;
	sols[2] = 0.000000E+00.&lt;BR /&gt;
	sols[3] = 1.000000E+00.&lt;BR /&gt;
	sols[4] = 1.000000E+00.&lt;/P&gt;

&lt;P&gt;=== Test 3: sols := M x + 1 * sols ===&lt;BR /&gt;
	result 3.1: (Mx + sol) using mkl_dcscmv (expected: [3 3 1 2 2]^T)&lt;BR /&gt;
	sols[0] = 3.000000E+00.&lt;BR /&gt;
	sols[1] = 3.000000E+00.&lt;BR /&gt;
	sols[2] = 1.000000E+00.&lt;BR /&gt;
	sols[3] = 2.000000E+00.&lt;BR /&gt;
	sols[4] = 2.000000E+00.&lt;BR /&gt;
	result: 3.2: (Mx + sol) using mkl_dcsrmv (expected: [3 3 1 2 2]^T)&lt;BR /&gt;
	sols[0] = 3.000000E+00.&lt;BR /&gt;
	sols[1] = 3.000000E+00.&lt;BR /&gt;
	sols[2] = 1.000000E+00.&lt;BR /&gt;
	sols[3] = 2.000000E+00.&lt;BR /&gt;
	sols[4] = 2.000000E+00.&lt;/P&gt;

&lt;P&gt;===============================&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;My computational environment:&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;OS: Red Hat Enterprise Linux Server release 6.4 (Santiago)&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;Compiler and linker: Intel Composer-XE version 2013.2.146&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;GNU libc version: 2.12&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;===============================&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;Following is the complete code I was using for the test:&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;//===================&lt;/P&gt;

&lt;P style="font-size: 12px;"&gt;&lt;SPAN style="font-family: Consolas, 'Lucida Console', Menlo, Monaco, 'DejaVu Sans Mono', monospace, sans-serif; font-size: 1em; line-height: 1.5;"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;mkl.h&amp;gt;

int main (void)
{
#define NUM_ROWS 5
#define NUM_COLS 4
#define NUM_ENTS 8
    
    MKL_INT num_rows = NUM_ROWS;
    MKL_INT num_cols = NUM_COLS;
    MKL_INT num_ents = NUM_ENTS;
    MKL_INT i;
    
    double minus_one = -1.0;
    double one = +1.0;
    double zero = 0.0;
    char   notran = 'N';
    char   matdescra[4] = {'G', 'L', 'N', 'C'}; 
    
    /* M : = [ 1  1  0  0 ] x := [ 1 ] sols := [ 1 ]  
     *       [ 1  0  1  0 ]      [ 1 ]         [ 1 ]
     *       [ 1  0 -1  0 ]      [ 1 ]         [ 1 ]
     *       [ 0  1  0  0 ]      [ 1 ]         [ 1 ]
     *       [ 0  0  1  0 ]                    [ 1 ]
     * 
     */
    MKL_INT    M_bgn[NUM_COLS + 1] = {0, 3, 5, 8, 8};
    MKL_INT    M_idx[NUM_ENTS]     = {0, 1, 2, 0, 3, 1,  2, 4};
    double     M_val[NUM_ENTS]     = {1, 1, 1, 1, 1, 1, -1, 1};
   
    MKL_INT    MT_bgn[NUM_ROWS + 1] = {0, 2, 4, 6, 7, 8};
    MKL_INT    MT_idx[NUM_ENTS]     = {0, 1, 0, 0, 0, 2,  1, 2};
    double     MT_val[NUM_ENTS]     = {1, 1, 1, 1, 1, -1, 1, 1};
    
    double     sols[NUM_ROWS];
    double     x[NUM_COLS];
    
    /* initialize the solution and x */
#define INIT_SOL                                \
    for (i = 0; i &amp;lt; num_rows; ++i)              \
    {                                           \
        sols&lt;I&gt; = 1.0;                          \
    }                                           \
    for (i = 0; i &amp;lt; num_cols; ++i)              \
    {                                           \
        x&lt;I&gt; = 1.0;                             \
    }
    
#define PRINT_SOL(MSG)                          \
    printf("%s\n", MSG);                        \
    for (i = 0; i &amp;lt; num_rows; ++i)              \
    {                                           \
        printf("sols[%d] = %E.\n", i, sols&lt;I&gt;); \
    }    
    
    /* test 1: compute sols := M x - sols
     *                       = [2 2 0 1 1]^T - [1 1 1 1 1]^T
     *                       = [1 1 -1 0 0]^T.
     */
    printf("\n=== Test 1: sols := M x - sols ===\n");
    INIT_SOL;
    /* test 1.1: using mkl_dcscmv */
    mkl_dcscmv(&amp;amp;notran, &amp;amp;num_rows, &amp;amp;num_cols, &amp;amp;one, matdescra,
        M_val, M_idx, M_bgn, M_bgn + 1, x, &amp;amp;minus_one, sols);     
    PRINT_SOL("(Mx - sols) using mkl_dcscmv (expected: [1 1 -1 0 0]^T)");
 
    INIT_SOL;    
    /* test 1.2: using mkl_dcsrmv */
    mkl_dcsrmv(&amp;amp;notran, &amp;amp;num_rows, &amp;amp;num_cols, &amp;amp;one, matdescra,
        MT_val, MT_idx, MT_bgn, MT_bgn + 1, x, &amp;amp;minus_one, sols);  
    PRINT_SOL("(Mx - sols) using mkl_dcsrmv (expected: [1 1 -1 0 0]^T)");
     
    /* test 2: compute sols := M x + 0 * sols
     *                       = [2 2 0 1 1]^T - 0 * [1 1 1 1 1]^T
     *                       = [2 2 0 1 1]^T.
     */
    printf("\n=== Test 2: sols := M x + 0 * sols ===\n");
    INIT_SOL;    
    /* test 2.1: using mkl_dcscmv */
    mkl_dcscmv(&amp;amp;notran, &amp;amp;num_rows, &amp;amp;num_cols, &amp;amp;one, matdescra, 
        M_val, M_idx, M_bgn, M_bgn + 1, x, &amp;amp;zero, sols);     
    PRINT_SOL("result 2.1: (Mx) using mkl_dcscmv (expected: [2 2 0 1 1]^T)");
    
    INIT_SOL;  
    /* test 2.2: using mkl_dcsrmv */
    mkl_dcsrmv(&amp;amp;notran, &amp;amp;num_rows, &amp;amp;num_cols, &amp;amp;one, matdescra,
        MT_val, MT_idx, MT_bgn, MT_bgn + 1, x, &amp;amp;zero, sols);  
    PRINT_SOL("result 2.2: (Mx) using mkl_dcsrmv (expected: [2 2 0 1 1]^T)");    
         
    /* test 3: compute sols := M x + 1 * sols
     *                       = [2 2 0 1 1]^T + 1 * [1 1 1 1 1]^T
     *                       = [3 3 1 2 2]^T.
     */ 
    printf("\n=== Test 3: sols := M x + 1 * sols ===\n");
    INIT_SOL;    
    /* test 3.1: using mkl_dcscmv */
    mkl_dcscmv(&amp;amp;notran, &amp;amp;num_rows, &amp;amp;num_cols, &amp;amp;one, matdescra,
        M_val, M_idx, M_bgn, M_bgn + 1, x, &amp;amp;one, sols);     
    PRINT_SOL("result 3.1: (Mx + sol) using mkl_dcscmv (expected: [3 3 1 2 2]^T)");
  
    INIT_SOL;  
    /* test 3.2: using mkl_dcsrmv */    
    mkl_dcsrmv(&amp;amp;notran, &amp;amp;num_rows, &amp;amp;num_cols, &amp;amp;one, matdescra,
        MT_val, MT_idx, MT_bgn, MT_bgn + 1, x, &amp;amp;one, sols);  
    PRINT_SOL("result: 3.2: (Mx + sol) using mkl_dcsrmv (expected: [3 3 1 2 2]^T)");    
 
    return 0;
}&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;

&lt;P&gt;//===================&lt;/P&gt;</description>
      <pubDate>Mon, 30 Jun 2014 19:15:10 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/inconsistent-results-from-mkl-dcscmv-and-mkl-dcsrmv/m-p/1052393#M21233</guid>
      <dc:creator>Kuo-ling_Huang</dc:creator>
      <dc:date>2014-06-30T19:15:10Z</dc:date>
    </item>
    <item>
      <title>Hello, </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/inconsistent-results-from-mkl-dcscmv-and-mkl-dcsrmv/m-p/1052394#M21234</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;

&lt;P&gt;I have only Composer XE 2013.5 (MKL 11.0.5) &amp;nbsp;installed, just try the code, it seems run fine. &amp;nbsp;It may be a bug in composer XE 2013.2 ( MKL 11.0.2) . &amp;nbsp;See&amp;nbsp;https://software.intel.com/en-us/articles/intel-mkl-110-bug-fixes&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Please upgrade the MKL version if possible ( the latest one : MKL 11.1. 3 ).&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;/P&gt;

&lt;P&gt;Ying&amp;nbsp;&lt;/P&gt;

&lt;PRE class="brush:;"&gt;$source /opt/intel/composer_xe_2013.5.192/mkl/bin/mklvars.sh intel64
$&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt; gcc dcsrmv.c -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lm -lpthread&lt;/SPAN&gt;&lt;/PRE&gt;

&lt;PRE class="brush:cpp;"&gt;$ ./a.out

=== Test 1: sols := M x - sols ===
(Mx - sols) using mkl_dcscmv (expected: [1 1 -1 0 0]^T)
sols[0] = 1.000000E+00.
sols[1] = 1.000000E+00.
sols[2] = -1.000000E+00.
sols[3] = 0.000000E+00.
sols[4] = 0.000000E+00.
(Mx - sols) using mkl_dcsrmv (expected: [1 1 -1 0 0]^T)
sols[0] = 1.000000E+00.
sols[1] = 1.000000E+00.
sols[2] = -1.000000E+00.
sols[3] = 0.000000E+00.
sols[4] = 0.000000E+00.

=== Test 2: sols := M x + 0 * sols ===
result 2.1: (Mx) using mkl_dcscmv (expected: [2 2 0 1 1]^T)
sols[0] = 2.000000E+00.
sols[1] = 2.000000E+00.
sols[2] = 0.000000E+00.
sols[3] = 1.000000E+00.
sols[4] = 1.000000E+00.
result 2.2: (Mx) using mkl_dcsrmv (expected: [2 2 0 1 1]^T)
sols[0] = 2.000000E+00.
sols[1] = 2.000000E+00.
sols[2] = 0.000000E+00.
sols[3] = 1.000000E+00.
sols[4] = 1.000000E+00.

=== Test 3: sols := M x + 1 * sols ===
result 3.1: (Mx + sol) using mkl_dcscmv (expected: [3 3 1 2 2]^T)
sols[0] = 3.000000E+00.
sols[1] = 3.000000E+00.
sols[2] = 1.000000E+00.
sols[3] = 2.000000E+00.
sols[4] = 2.000000E+00.
result: 3.2: (Mx + sol) using mkl_dcsrmv (expected: [3 3 1 2 2]^T)
sols[0] = 3.000000E+00.
sols[1] = 3.000000E+00.
sols[2] = 1.000000E+00.
sols[3] = 2.000000E+00.
sols[4] = 2.000000E+00.
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 01 Jul 2014 02:09:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/inconsistent-results-from-mkl-dcscmv-and-mkl-dcsrmv/m-p/1052394#M21234</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2014-07-01T02:09:42Z</dc:date>
    </item>
  </channel>
</rss>

