- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
I can find a lot of examples use the syntax like Cblacs_get(...), Cblacs_pinfo(...), but I can not find the c-type declaration in the "mkl_cblacs.h".
Is it legal to use this kind of c-wrapper function in mkl?
Link kopiert
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hi Ye,
I am afraid there's no function call Cblas_get in MKL, but you could use BLACS_GET which in defined in mkl_blacs.h. They have same functionality. Could you please tell me where you find function called "Cblas_get" ? I know some opensource library, for instance, ACOUSTO redefined scalapack functions which contains Cblas_get, but it is not intel MKL function.
If you would like to use BLACS_GET, please learn more from following link:
https://software.intel.com/en-us/node/522196
Best regards,
Fiona
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Fiona Z. (Intel) wrote:
Hi Ye,
I am afraid there's no function call Cblas_get in MKL, but you could use BLACS_GET which in defined in mkl_blacs.h. They have same functionality. Could you please tell me where you find function called "Cblas_get" ? I know some opensource library, for instance, ACOUSTO redefined scalapack functions which contains Cblas_get, but it is not intel MKL function.
If you would like to use BLACS_GET, please learn more from following link:
https://software.intel.com/en-us/node/522196Best regards,
Fiona
I saw an example on intel's form:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "mpi.h"
#define AA(i,j) AA[(i)*M+(j)]
int main(int argc, char **argv) {
int i, j, k;
/************ MPI ***************************/
int myrank_mpi, nprocs_mpi;
MPI_Init( &argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank_mpi);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs_mpi);
/************ BLACS ***************************/
int ictxt, nprow, npcol, myrow, mycol,nb;
int info,itemp;
int ZERO=0,ONE=1;
nprow = 2; npcol = 2; nb =2;
Cblacs_pinfo( &myrank_mpi, &nprocs_mpi ) ;
Cblacs_get( -1, 0, &ictxt );
Cblacs_gridinit( &ictxt, "Row", nprow, npcol );
Cblacs_gridinfo( ictxt, &nprow, &npcol, &myrow, &mycol );
int M=5;
double *AA = (double*) malloc(M*M*sizeof(double));
for(i=0;i<M;i++ )
for(j=0;j<M;j++)
AA[i*M+j]=(2*i+3*j+1);
double *X = (double*) malloc(M*sizeof(double));
X[0]=1;X[1]=1;X[2]=0;X[3]=0;X[4]=1;
int descA[9],descx[9],descy[9];
int mA = numroc_( &M, &nb, &myrow, &ZERO, &nprow );
int nA = numroc_( &M, &nb, &mycol, &ZERO, &npcol );
int nx = numroc_( &M, &nb, &myrow, &ZERO, &nprow );
int my = numroc_( &M, &nb, &myrow, &ZERO, &nprow );
descinit_(descA, &M, &M, &nb, &nb, &ZERO, &ZERO, &ictxt, &mA, &info);
descinit_(descx, &M, &ONE, &nb, &ONE, &ZERO, &ZERO, &ictxt, &nx, &info);
descinit_(descy, &M, &ONE, &nb, &ONE, &ZERO, &ZERO, &ictxt, &my, &info);
double *x = (double*) malloc(nx*sizeof(double));
double *y = (double*) calloc(my,sizeof(double));
double *A = (double*) malloc(mA*nA*sizeof(double));
int sat,sut;
for(i=0;i<mA;i++)
for(j=0;j<nA;j++){
sat= (myrow*nb)+i+(i/nb)*nb;
sut= (mycol*nb)+j+(j/nb)*nb;
A[j*mA+i]=AA(sat,sut);
}
for(i=0;i<nx;i++){
sut= (myrow*nb)+i+(i/nb)*nb;
x=X[sut];
}
double alpha = 1.0; double beta = 0.0;
pdgemv_("N",&M,&M,&alpha,A,&ONE,&ONE,descA,x,&ONE,&ONE,descx,&ONE,&beta,y,&ONE,&ONE,descy,&ONE);
Cblacs_barrier(ictxt,"A");
for(i=0;i<my;i++)
printf("rank=%d %.2f \n", myrank_mpi,y);
Cblacs_gridexit( 0 );
MPI_Finalize();
return 0;
}
It seems to use the Cblacs_....version of the blacs library. Can you explain it more?
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Hi Ye,
He might use some other library or redefined functions by self. If you could not make sure, you could compile this program, the system will notice undefined reference to "Cblacs_get", "Cblacs_pinfo"...
And there's no function called "pdgemv_" in MKL, the name should be "pdgemv" which is defined in mkl_pblas.h. Please use functions defined in MKL library. Thank you.
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Fiona Z. (Intel) wrote:
Hi Ye,
He might use some other library or redefined functions by self. If you could not make sure, you could compile this program, the system will notice undefined reference to "Cblacs_get", "Cblacs_pinfo"...
And there's no function called "pdgemv_" in MKL, the name should be "pdgemv" which is defined in mkl_pblas.h. Please use functions defined in MKL library. Thank you.
It's clear!
I will just follow the mkl manual.
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Fiona Z. (Intel) wrote:
Hi Ye,
He might use some other library or redefined functions by self. If you could not make sure, you could compile this program, the system will notice undefined reference to "Cblacs_get", "Cblacs_pinfo"...
And there's no function called "pdgemv_" in MKL, the name should be "pdgemv" which is defined in mkl_pblas.h. Please use functions defined in MKL library. Thank you.
It's clear!
I will just follow the mkl manual.
- RSS-Feed abonnieren
- Thema als neu kennzeichnen
- Thema als gelesen kennzeichnen
- Diesen Thema für aktuellen Benutzer floaten
- Lesezeichen
- Abonnieren
- Drucker-Anzeigeseite