<?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 Data initialize task on scalapack with C file in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Data-initialize-task-on-scalapack-with-C-file/m-p/1097816#M23671</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;

&lt;P&gt;i want to use some scalapacks' functions. but i confuse to set initial data form in scalapack, so i asked it here.&lt;/P&gt;

&lt;P&gt;i have understood the data layout like figure below, and made code, too.&lt;/P&gt;

&lt;P&gt;&lt;IMG width="908" height="707" style="width: 485px; float: left;" alt="" src="https://community.intel.com/file/549383/download" /&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;test code what i coded (pdgeqrf)&amp;nbsp;like below :&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;malloc.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;mpi.h&amp;gt;
#include &amp;lt;mkl_blacs.h&amp;gt;
#include &amp;lt;mkl_scalapack.h&amp;gt;
#include &amp;lt;mkl_lapacke.h&amp;gt;
#include &amp;lt;mkl_cblas.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;



int main(int&amp;nbsp;&amp;nbsp;&amp;nbsp; argc,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char **argv)
{
&amp;nbsp; int i,j;
&amp;nbsp; // test parameters (default)
&amp;nbsp; int m&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 4000;
&amp;nbsp; int n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 4000;
&amp;nbsp; int mb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 8; 
&amp;nbsp;int nb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 8;
&amp;nbsp; int nprows = 8;
&amp;nbsp;int npcols = 8; // temp values

&amp;nbsp;// parameter value change (optional)
&amp;nbsp; if(argc &amp;gt;=5){
&amp;nbsp;&amp;nbsp;&amp;nbsp; m=atoi(argv[1]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; n=atoi(argv[2]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; nprows=atoi(argv[3]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; npcols=atoi(argv[4]);
&amp;nbsp;&amp;nbsp;
&amp;nbsp; }

&amp;nbsp; // time and validity
&amp;nbsp; double startTime;
&amp;nbsp; double endTime;
&amp;nbsp; double gap;
&amp;nbsp; double flops;

&amp;nbsp;//QR
&amp;nbsp;double * A;
&amp;nbsp;double * tau;
&amp;nbsp;double * work;

&amp;nbsp; int mpirank, mpisize;
&amp;nbsp; MPI_Init(&amp;amp;argc, &amp;amp;argv);
&amp;nbsp; MPI_Comm_rank(MPI_COMM_WORLD, &amp;amp;mpirank);
&amp;nbsp; MPI_Comm_size(MPI_COMM_WORLD, &amp;amp;mpisize);

&amp;nbsp; int myid, numproc, ctxt, myrow, mycol;
&amp;nbsp; MKL_INT descA[9];
&amp;nbsp; MKL_INT zero = 0;
&amp;nbsp;MKL_INT one = 1;
&amp;nbsp;MKL_INT info = 0;

&amp;nbsp; Cblacs_pinfo(&amp;amp;myid, &amp;amp;numproc);
&amp;nbsp; if(numproc &amp;gt; 1 &amp;amp;&amp;amp; myid != 0){
&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_setup(&amp;amp;myid, &amp;amp;numproc);
&amp;nbsp; }
&amp;nbsp; Cblacs_get(-1, 0, &amp;amp;ctxt);
&amp;nbsp; Cblacs_gridinit(&amp;amp;ctxt, "R", nprows, npcols);
&amp;nbsp; blacs_gridinfo_(&amp;amp;ctxt, &amp;amp;nprows, &amp;amp;npcols, &amp;amp;myrow, &amp;amp;mycol);

&amp;nbsp; if(myrow == -1){
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
&amp;nbsp; }

&amp;nbsp;/*
&amp;nbsp; * temp value for fortran
&amp;nbsp; */
&amp;nbsp;char aform = 'N';
&amp;nbsp;char diag = 'N';
&amp;nbsp;MKL_INT lda = m;
&amp;nbsp;MKL_INT iarow = 0;
&amp;nbsp;MKL_INT iacol = 0;
&amp;nbsp;MKL_INT iseed = 10;
&amp;nbsp;MKL_INT iroff = 0;
&amp;nbsp;MKL_INT irnum = numroc_(&amp;amp;m, &amp;amp;mb, &amp;amp;myrow, &amp;amp;zero, &amp;amp;nprows);
&amp;nbsp;MKL_INT icoff = 0;
&amp;nbsp;MKL_INT icnum = numroc_(&amp;amp;n, &amp;amp;nb, &amp;amp;mycol, &amp;amp;zero, &amp;amp;npcols);
&amp;nbsp;MKL_INT lwork = -1; 

&amp;nbsp;//descinit(desc,&amp;nbsp; m,&amp;nbsp; n,&amp;nbsp; mb,&amp;nbsp; nb, irsrc, icsrc, ictxt, LLD, info)
&amp;nbsp; descinit_(descA, &amp;amp;m, &amp;amp;n, &amp;amp;mb, &amp;amp;nb, &amp;amp;zero, &amp;amp;zero, &amp;amp;ctxt, &amp;amp;icnum, &amp;amp;info);
&amp;nbsp;A = (double*)malloc(sizeof(double)*irnum*icnum);
&amp;nbsp;tau = (double*)malloc(sizeof(double)*(m*n/2)); //array size should &amp;gt;= LOCc(ja+min(m,n)-1)
&amp;nbsp;work = (double*)malloc(sizeof(double)*m*n); 

&amp;nbsp;//pdmatgen_(&amp;amp;ctxt, &amp;amp;aform, &amp;amp;diag, &amp;amp;m, &amp;amp;n, &amp;amp;mb, &amp;amp;nb, A, &amp;amp;m, &amp;amp;iarow, &amp;amp;iacol, &amp;amp;iseed, &amp;amp;iroff, &amp;amp;irnum, &amp;amp;icoff, &amp;amp;icnum, &amp;amp;myrow, &amp;amp;mycol, &amp;amp;nprows, &amp;amp;npcols);


&amp;nbsp;/* 
&amp;nbsp; *&amp;nbsp; generate matrix (by column major)
&amp;nbsp; *
&amp;nbsp; * matrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : A
&amp;nbsp; * size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : irnum * icnum
&amp;nbsp; * seed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 10
&amp;nbsp; */
&amp;nbsp; for(j = 0; j &amp;lt; irnum; ++j)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; icnum; ++i)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[i*irnum+j] = rand()%10;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }

&amp;nbsp; printf("QR valid test (MPI)\n");

&amp;nbsp;
&amp;nbsp;// pdgeqrf routine
&amp;nbsp;MPI_Barrier(MPI_COMM_WORLD);
&amp;nbsp; startTime = MPI_Wtime();
&amp;nbsp;pdgeqrf_(&amp;amp;m,&amp;amp;n,A,&amp;amp;one,&amp;amp;one,descA,tau,work,&amp;amp;lwork,&amp;amp;info);
&amp;nbsp; //info = dgeqrf(LAPACK_COL_MAJOR, m, n, A, m, tau, descA, mpirank); 
&amp;nbsp;MPI_Barrier(MPI_COMM_WORLD);
&amp;nbsp; endTime = MPI_Wtime();

&amp;nbsp; // flops
&amp;nbsp; gap = (double)( endTime - startTime );
&amp;nbsp; flops = (2.0 * (double)n * (double)n * (double)(m-n/3) ) * 1.0e-9 / gap;
&amp;nbsp; printf("info\t%d, dgemm time (sec)\t%f, Gflops\t%f \n", info, gap, flops);
&amp;nbsp; 
&amp;nbsp; Cblacs_gridexit(ctxt);
&amp;nbsp; Cblacs_exit(&amp;amp;zero);
&amp;nbsp; MPI_Finalize();
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; free(A);
&amp;nbsp; free(tau);
&amp;nbsp;free(work);
&amp;nbsp; return 0;
}
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;i have compiled my code like this :&lt;/P&gt;

&lt;PRE class="brush:bash;"&gt;&amp;nbsp;mpiicc scalapack_test2.c -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -mkl&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;i've comfirmed the result value 0 correctly, but there is some weird things especially speed things.&lt;/P&gt;

&lt;P&gt;in addition, i couldn't check this result is right or not. i'm not sure of&amp;nbsp; initializing data set value exactly.&lt;/P&gt;

&lt;P&gt;this is result texts what i confirmed.&lt;/P&gt;

&lt;PRE class="brush:bash;"&gt;//&amp;nbsp; form : ./a.out m n nprow npcol

[@localhost src]$ mpirun -n 4 ./a.out 6400 6400 2 2
QR valid test (MPI)
QR valid test (MPI)
QR valid test (MPI)
QR valid test (MPI)
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001011, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 345703.851960
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001003, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 348580.607742
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001141, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 306337.241154
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001143, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 305826.040084

[@localhost src]$ mpirun -n 1 ./a.out 6400 6400 1 1
QR valid test (MPI)
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000237, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1474979.915656
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;could you give me some advise what i miss understand or miss used? if you give me good example of this, i'm really thank for you.&lt;/P&gt;</description>
    <pubDate>Thu, 04 May 2017 08:07:18 GMT</pubDate>
    <dc:creator>Yeongha_L_</dc:creator>
    <dc:date>2017-05-04T08:07:18Z</dc:date>
    <item>
      <title>Data initialize task on scalapack with C file</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Data-initialize-task-on-scalapack-with-C-file/m-p/1097816#M23671</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;

&lt;P&gt;i want to use some scalapacks' functions. but i confuse to set initial data form in scalapack, so i asked it here.&lt;/P&gt;

&lt;P&gt;i have understood the data layout like figure below, and made code, too.&lt;/P&gt;

&lt;P&gt;&lt;IMG width="908" height="707" style="width: 485px; float: left;" alt="" src="https://community.intel.com/file/549383/download" /&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;test code what i coded (pdgeqrf)&amp;nbsp;like below :&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;malloc.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;mpi.h&amp;gt;
#include &amp;lt;mkl_blacs.h&amp;gt;
#include &amp;lt;mkl_scalapack.h&amp;gt;
#include &amp;lt;mkl_lapacke.h&amp;gt;
#include &amp;lt;mkl_cblas.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;



int main(int&amp;nbsp;&amp;nbsp;&amp;nbsp; argc,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char **argv)
{
&amp;nbsp; int i,j;
&amp;nbsp; // test parameters (default)
&amp;nbsp; int m&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 4000;
&amp;nbsp; int n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 4000;
&amp;nbsp; int mb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 8; 
&amp;nbsp;int nb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 8;
&amp;nbsp; int nprows = 8;
&amp;nbsp;int npcols = 8; // temp values

&amp;nbsp;// parameter value change (optional)
&amp;nbsp; if(argc &amp;gt;=5){
&amp;nbsp;&amp;nbsp;&amp;nbsp; m=atoi(argv[1]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; n=atoi(argv[2]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; nprows=atoi(argv[3]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; npcols=atoi(argv[4]);
&amp;nbsp;&amp;nbsp;
&amp;nbsp; }

&amp;nbsp; // time and validity
&amp;nbsp; double startTime;
&amp;nbsp; double endTime;
&amp;nbsp; double gap;
&amp;nbsp; double flops;

&amp;nbsp;//QR
&amp;nbsp;double * A;
&amp;nbsp;double * tau;
&amp;nbsp;double * work;

&amp;nbsp; int mpirank, mpisize;
&amp;nbsp; MPI_Init(&amp;amp;argc, &amp;amp;argv);
&amp;nbsp; MPI_Comm_rank(MPI_COMM_WORLD, &amp;amp;mpirank);
&amp;nbsp; MPI_Comm_size(MPI_COMM_WORLD, &amp;amp;mpisize);

&amp;nbsp; int myid, numproc, ctxt, myrow, mycol;
&amp;nbsp; MKL_INT descA[9];
&amp;nbsp; MKL_INT zero = 0;
&amp;nbsp;MKL_INT one = 1;
&amp;nbsp;MKL_INT info = 0;

&amp;nbsp; Cblacs_pinfo(&amp;amp;myid, &amp;amp;numproc);
&amp;nbsp; if(numproc &amp;gt; 1 &amp;amp;&amp;amp; myid != 0){
&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_setup(&amp;amp;myid, &amp;amp;numproc);
&amp;nbsp; }
&amp;nbsp; Cblacs_get(-1, 0, &amp;amp;ctxt);
&amp;nbsp; Cblacs_gridinit(&amp;amp;ctxt, "R", nprows, npcols);
&amp;nbsp; blacs_gridinfo_(&amp;amp;ctxt, &amp;amp;nprows, &amp;amp;npcols, &amp;amp;myrow, &amp;amp;mycol);

&amp;nbsp; if(myrow == -1){
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
&amp;nbsp; }

&amp;nbsp;/*
&amp;nbsp; * temp value for fortran
&amp;nbsp; */
&amp;nbsp;char aform = 'N';
&amp;nbsp;char diag = 'N';
&amp;nbsp;MKL_INT lda = m;
&amp;nbsp;MKL_INT iarow = 0;
&amp;nbsp;MKL_INT iacol = 0;
&amp;nbsp;MKL_INT iseed = 10;
&amp;nbsp;MKL_INT iroff = 0;
&amp;nbsp;MKL_INT irnum = numroc_(&amp;amp;m, &amp;amp;mb, &amp;amp;myrow, &amp;amp;zero, &amp;amp;nprows);
&amp;nbsp;MKL_INT icoff = 0;
&amp;nbsp;MKL_INT icnum = numroc_(&amp;amp;n, &amp;amp;nb, &amp;amp;mycol, &amp;amp;zero, &amp;amp;npcols);
&amp;nbsp;MKL_INT lwork = -1; 

&amp;nbsp;//descinit(desc,&amp;nbsp; m,&amp;nbsp; n,&amp;nbsp; mb,&amp;nbsp; nb, irsrc, icsrc, ictxt, LLD, info)
&amp;nbsp; descinit_(descA, &amp;amp;m, &amp;amp;n, &amp;amp;mb, &amp;amp;nb, &amp;amp;zero, &amp;amp;zero, &amp;amp;ctxt, &amp;amp;icnum, &amp;amp;info);
&amp;nbsp;A = (double*)malloc(sizeof(double)*irnum*icnum);
&amp;nbsp;tau = (double*)malloc(sizeof(double)*(m*n/2)); //array size should &amp;gt;= LOCc(ja+min(m,n)-1)
&amp;nbsp;work = (double*)malloc(sizeof(double)*m*n); 

&amp;nbsp;//pdmatgen_(&amp;amp;ctxt, &amp;amp;aform, &amp;amp;diag, &amp;amp;m, &amp;amp;n, &amp;amp;mb, &amp;amp;nb, A, &amp;amp;m, &amp;amp;iarow, &amp;amp;iacol, &amp;amp;iseed, &amp;amp;iroff, &amp;amp;irnum, &amp;amp;icoff, &amp;amp;icnum, &amp;amp;myrow, &amp;amp;mycol, &amp;amp;nprows, &amp;amp;npcols);


&amp;nbsp;/* 
&amp;nbsp; *&amp;nbsp; generate matrix (by column major)
&amp;nbsp; *
&amp;nbsp; * matrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : A
&amp;nbsp; * size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : irnum * icnum
&amp;nbsp; * seed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 10
&amp;nbsp; */
&amp;nbsp; for(j = 0; j &amp;lt; irnum; ++j)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; icnum; ++i)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[i*irnum+j] = rand()%10;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }

&amp;nbsp; printf("QR valid test (MPI)\n");

&amp;nbsp;
&amp;nbsp;// pdgeqrf routine
&amp;nbsp;MPI_Barrier(MPI_COMM_WORLD);
&amp;nbsp; startTime = MPI_Wtime();
&amp;nbsp;pdgeqrf_(&amp;amp;m,&amp;amp;n,A,&amp;amp;one,&amp;amp;one,descA,tau,work,&amp;amp;lwork,&amp;amp;info);
&amp;nbsp; //info = dgeqrf(LAPACK_COL_MAJOR, m, n, A, m, tau, descA, mpirank); 
&amp;nbsp;MPI_Barrier(MPI_COMM_WORLD);
&amp;nbsp; endTime = MPI_Wtime();

&amp;nbsp; // flops
&amp;nbsp; gap = (double)( endTime - startTime );
&amp;nbsp; flops = (2.0 * (double)n * (double)n * (double)(m-n/3) ) * 1.0e-9 / gap;
&amp;nbsp; printf("info\t%d, dgemm time (sec)\t%f, Gflops\t%f \n", info, gap, flops);
&amp;nbsp; 
&amp;nbsp; Cblacs_gridexit(ctxt);
&amp;nbsp; Cblacs_exit(&amp;amp;zero);
&amp;nbsp; MPI_Finalize();
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; free(A);
&amp;nbsp; free(tau);
&amp;nbsp;free(work);
&amp;nbsp; return 0;
}
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;i have compiled my code like this :&lt;/P&gt;

&lt;PRE class="brush:bash;"&gt;&amp;nbsp;mpiicc scalapack_test2.c -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -mkl&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;i've comfirmed the result value 0 correctly, but there is some weird things especially speed things.&lt;/P&gt;

&lt;P&gt;in addition, i couldn't check this result is right or not. i'm not sure of&amp;nbsp; initializing data set value exactly.&lt;/P&gt;

&lt;P&gt;this is result texts what i confirmed.&lt;/P&gt;

&lt;PRE class="brush:bash;"&gt;//&amp;nbsp; form : ./a.out m n nprow npcol

[@localhost src]$ mpirun -n 4 ./a.out 6400 6400 2 2
QR valid test (MPI)
QR valid test (MPI)
QR valid test (MPI)
QR valid test (MPI)
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001011, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 345703.851960
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001003, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 348580.607742
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001141, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 306337.241154
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001143, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 305826.040084

[@localhost src]$ mpirun -n 1 ./a.out 6400 6400 1 1
QR valid test (MPI)
info&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, dgemm time (sec)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000237, Gflops&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1474979.915656
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;could you give me some advise what i miss understand or miss used? if you give me good example of this, i'm really thank for you.&lt;/P&gt;</description>
      <pubDate>Thu, 04 May 2017 08:07:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Data-initialize-task-on-scalapack-with-C-file/m-p/1097816#M23671</guid>
      <dc:creator>Yeongha_L_</dc:creator>
      <dc:date>2017-05-04T08:07:18Z</dc:date>
    </item>
    <item>
      <title>Hello,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Data-initialize-task-on-scalapack-with-C-file/m-p/1097817#M23672</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;

&lt;P&gt;Sorry for miss the thread.&amp;nbsp; Yes,&amp;nbsp; your&amp;nbsp; assumption&amp;nbsp;about Scalapack array initialization is exact correct.&amp;nbsp; As&amp;nbsp;&amp;nbsp;&lt;A href="http://www.netlib.org/scalapack/"&gt;http://www.netlib.org/scalapack/&lt;/A&gt;&amp;nbsp; claim:&amp;nbsp;Scalapack uses &amp;nbsp; 2D block-ciclyc distribution of n*n matrix.&lt;/P&gt;

&lt;P&gt;As i understand, you have two questions here.&lt;/P&gt;

&lt;P&gt;1. about data layout.&amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;A. MKL actually provide scalapack&amp;nbsp;sample code under MKL install folder.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;for example. &amp;nbsp;&amp;lt;MKL install dir&amp;gt;/examples_cluster_c/pblas3_s_example.c&lt;/P&gt;

&lt;P&gt;* Product C=A*B is computed by means of p?gemm,&amp;nbsp; difference&amp;nbsp; B-inv_A*C&amp;nbsp; is&lt;BR /&gt;
	&amp;nbsp;* also computed by means of p?gemm (but with transa='T'). Norm of the dif-&lt;BR /&gt;
	&amp;nbsp;* ference and norms of matrices A and B are computed using p?lange.&lt;BR /&gt;
	&amp;nbsp;* Sheme of 2D block-ciclyc distribution of n*n matrix:&lt;BR /&gt;
	&amp;nbsp;*&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&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; (0,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; (0,1)&lt;BR /&gt;
	&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;&amp;nbsp; ___________&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |1&amp;nbsp; 1 |2&amp;nbsp; 2 |3&amp;nbsp; 3 |4&amp;nbsp; 4 |5 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |1&amp;nbsp; 1 |3&amp;nbsp; 3 |5 |&amp;nbsp;&amp;nbsp;&amp;nbsp; |2&amp;nbsp; 2 |4&amp;nbsp; 4 |&lt;BR /&gt;
	&amp;nbsp;* 0&amp;nbsp;&amp;nbsp; |1&amp;nbsp; 1 |2&amp;nbsp; 2 |3&amp;nbsp; 3 |4&amp;nbsp; 4 |5 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |1&amp;nbsp; 1 |3&amp;nbsp; 3 |5 |&amp;nbsp;&amp;nbsp;&amp;nbsp; |2&amp;nbsp; 2 |4&amp;nbsp; 4 |&lt;BR /&gt;
	&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; |_____|_____|&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |6&amp;nbsp; 6 |7&amp;nbsp; 7 |8&amp;nbsp; 8 |9&amp;nbsp; 9 |10|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |11 11|13 13|15|&amp;nbsp;&amp;nbsp;&amp;nbsp; |12 12|14 14|&lt;BR /&gt;
	&amp;nbsp;* 1&amp;nbsp;&amp;nbsp; |6&amp;nbsp; 6 |7&amp;nbsp; 7 |8&amp;nbsp; 8 |9&amp;nbsp; 9 |10|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |11 11|13 13|15|&amp;nbsp;&amp;nbsp;&amp;nbsp; |12 12|14 14|&lt;BR /&gt;
	&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; |_____|_____|&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |11 11|12 12|13 13|14 14|15| ---&amp;gt;&amp;nbsp; |21 21|23 23|25|&amp;nbsp;&amp;nbsp;&amp;nbsp; |22 22|24 24|&lt;BR /&gt;
	&amp;nbsp;* 0&amp;nbsp;&amp;nbsp; |11 11|12 12|13 13|14 14|15|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|__|&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|_____|_____|__|&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |16 16|17 17|18 18|19 19|20|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;* 1&amp;nbsp;&amp;nbsp; |16 16|17 17|18 18|19 19|20|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1,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; (1,1)&lt;BR /&gt;
	&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; ___________&lt;BR /&gt;
	&amp;nbsp;* 0&amp;nbsp;&amp;nbsp; |21 21|22 22|23 23|24 24|25|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |6&amp;nbsp; 6 |8&amp;nbsp; 8 |10|&amp;nbsp;&amp;nbsp;&amp;nbsp; |7&amp;nbsp; 7 |9&amp;nbsp; 9 |&lt;BR /&gt;
	&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|_____|_____|__|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |6&amp;nbsp; 6 |8&amp;nbsp; 8 |10|&amp;nbsp;&amp;nbsp;&amp;nbsp; |7&amp;nbsp; 7 |9&amp;nbsp; 9 |&lt;BR /&gt;
	&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|__|&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|&lt;BR /&gt;
	&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |16 16|18 18|20|&amp;nbsp;&amp;nbsp;&amp;nbsp; |17 17|19 19|&lt;BR /&gt;
	&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |16 16|18 18|20|&amp;nbsp;&amp;nbsp;&amp;nbsp; |17 17|19 19|&lt;BR /&gt;
	&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|__|&amp;nbsp;&amp;nbsp;&amp;nbsp; |_____|_____|&lt;BR /&gt;
	&amp;nbsp;*&lt;BR /&gt;
	&amp;nbsp;*========================================================================*/&lt;/P&gt;

&lt;P&gt;&amp;nbsp;B. I'm not sure if you did search on the forum.&amp;nbsp; there are some C sample code also.&lt;/P&gt;

&lt;P&gt;&lt;A href="https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/536962"&gt;https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/536962&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;&lt;A href="https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/558359"&gt;https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/558359&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;&lt;A href="https://software.intel.com/en-us/articles/using-cluster-mkl-pblasscalapack-fortran-routine-in-your-c-program/"&gt;https://software.intel.com/en-us/articles/using-cluster-mkl-pblasscalapack-fortran-routine-in-your-c-program/&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;etc.&lt;/P&gt;

&lt;P&gt;you may refer to them.&lt;/P&gt;

&lt;P&gt;2. Regarding the performance,&amp;nbsp;&amp;nbsp;&amp;nbsp; you mentioned&amp;nbsp;there is some weird things especially speed things&lt;/P&gt;

&lt;P&gt;Could you please tell the expected speed and &amp;nbsp;what&amp;nbsp;are your processors?&amp;nbsp; It may&amp;nbsp;depend on matrix size, test method etc.&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;/P&gt;

&lt;P&gt;Ying&lt;/P&gt;</description>
      <pubDate>Fri, 12 May 2017 02:37:15 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Data-initialize-task-on-scalapack-with-C-file/m-p/1097817#M23672</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2017-05-12T02:37:15Z</dc:date>
    </item>
  </channel>
</rss>

