Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22009

Linking Intel MKL under cygwin

$
0
0

I have to use intel mkl in some optimazation problems, thus test the following standard code with cygwin under Win7 64bit make sure I have set it up correctly:

    #define min(x,y) (((x) < (y)) ? (x) : (y))    #include <stdio.h>    #include <stdlib.h>    #include "mkl.h"    int main()    {        double *A, *B, *C;        int m, n, k, i, j;        double alpha, beta;        printf ("\n This example computes real matrix C=alpha*A*B+beta*C using \n"" Intel(R) MKL function dgemm, where A, B, and  C are matrices and \n"" alpha and beta are double precision scalars\n\n");        m = 2000, k = 200, n = 1000;        printf (" Initializing data for matrix multiplication C=A*B for matrix \n"" A(%ix%i) and matrix B(%ix%i)\n\n", m, k, k, n);        alpha = 1.0; beta = 0.0;        printf (" Allocating memory for matrices aligned on 64-byte boundary for better \n"" performance \n\n");        A = (double *)mkl_malloc( m*k*sizeof( double ), 64 );        B = (double *)mkl_malloc( k*n*sizeof( double ), 64 );        C = (double *)mkl_malloc( m*n*sizeof( double ), 64 );        if (A == NULL || B == NULL || C == NULL) {          printf( "\n ERROR: Can't allocate memory for matrices. Aborting... \n\n");          mkl_free(A);          mkl_free(B);          mkl_free(C);          return 1;        }        printf (" Intializing matrix data \n\n");        for (i = 0; i < (m*k); i++) {            A[i] = (double)(i+1);        }        for (i = 0; i < (k*n); i++) {            B[i] = (double)(-i-1);        }        for (i = 0; i < (m*n); i++) {            C[i] = 0.0;        }        printf (" Computing matrix product using Intel(R) MKL dgemm function via CBLAS interface \n\n");        cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,                     m, n, k, alpha, A, k, B, n, beta, C, n);        printf ("\n Computations completed.\n\n");        printf (" Top left corner of matrix A: \n");        for (i=0; i<min(m,6); i++) {          for (j=0; j<min(k,6); j++) {            printf ("%12.0f", A[j+i*k]);          }          printf ("\n");        }        printf ("\n Top left corner of matrix B: \n");        for (i=0; i<min(k,6); i++) {          for (j=0; j<min(n,6); j++) {            printf ("%12.0f", B[j+i*n]);          }          printf ("\n");        }        printf ("\n Top left corner of matrix C: \n");        for (i=0; i<min(m,6); i++) {          for (j=0; j<min(n,6); j++) {            printf ("%12.5G", C[j+i*n]);          }          printf ("\n");        }        printf ("\n Deallocating memory \n\n");        mkl_free(A);        mkl_free(B);        mkl_free(C);        printf (" Example completed. \n\n");        return 0;    }

for compiling, I have to Link MKL library at first as the step 3 of documentation indicates:https://software.intel.com/en-us/articles/intel-math-kernel-library-intel-mkl-2018-getting-started

say, Under Windows we have set:

> ..\compilers_and_libraries_2018\windows\mkl\bin\mklvars.bat" ia32>  cl.exe mkl_lab_solution.c  mkl_intel_c.lib mkl_core.lib mkl_intel_thread.lib libiomp5md.lib

or under Linux:

1) if with gcc   $source  /opt/intel/compilers_and_libraries_2018/linux/mkl/bin/mklvars.sh ia32    $gcc -m32 mkl_lab_solution.c -lmkl_intel -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

but I get stuck at the first command line, that is, when I

gcc -o temp temp.c -mkl

it shows up unrecognized command line option '-mkl'.

I know it means I don't set the environment right at first command line,but have no idea right now after googling and try compiler under Intel Parallel Studio XE 2018 .


Viewing all articles
Browse latest Browse all 22009

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>