- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello!
I am new to MKL and to C in general. Lets say that we have two matrices A, B of size (n,k). We would like for j =1 until k to subtrack the j column of A from B. In Matlab language the code is: for j=1:k, B(:,j)-A(:,j), end and in R language for(j=1 in k), { B[,j]-A[,j] }. I would like to ask if there is a routine to select the j column (or row) of a matrix? I searched but I had no luck.
Thank you very much.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi GF,
What is the reason of you change the matlab or R to C? and What is your problem size (matrix)?
You may have known, you can use R or matlab directly, and get MKL performance benifit at the same time, because MKL can be intergarted into R and Matlab, please see the article http://software.intel.com/en-us/articles/using-intel-mkl-with-r
So first, i may suggest you to use matlab or R directy.
Secondly, MKL mainly focus on the computation and the interfaces are mainly based on some kind of standard interface, like BLAS ( matrix, vector operation). So it is not flexiable like Matlab and R.
It hasn't single routines like data operations like extract columns from a Matrix. But these operations are embeded in the computation.
for example, If you have to convert the matlab code to C/MKL code. You may first convert them to C code, then call MKL function.
for example, X(:, t-j) - B(:, t-j) , as mecej4 mentioned to use daxpy.
double * Ypointer=&(X[0][t-j]);
double * Xpointer=&(B[0][t-j]);
IncX= number of columns of B
IncY = number of columns of A;
N= row of column of A;
cblas_daxpy ( N, -1.0, Xpointer, incX, Ypointer,incY);
Then same as for A(:, :, J) * Ypointer. If A can access by C pointer with regular pattern by (expressed by incX and lda)
Call cblas_dgemv (const CBLAS_ORDER order, const CBLAS_TRANSPOSE TransA, const MKL_INT
M, const MKL_INT N, const double alpha, const double *A, const MKL_INT lda, const
double *X, const MKL_INT incX, Ypointer, 1).
Last, if you are using Intel C Compiler, Array notication also is helpful to convert your matlab to C code.
Please See http://software.intel.com/en-us/articles/about-intel-cilk-plus-and-how-to-get-started.
You can write A[:] - refers the entire array in C code.
Best Regards,
Ying
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Why do you describe the operation in a seemingly more complicated way than just "A = A - B"? MKL contains BLAS routines for performing matrix-matrix and vector operations. In particular, look at ?axpy routines. For such a simple operation as subtraction, you may also consider using the features that the programming language itself provides, such as those provided by BOOST.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for your help. I am confused with this language. I have written a program in Matlab and I want to convert it to C language using the MKL.
The part of my code is the following
for t=1:T
c1=0; c2=0;
for j=1:p
c1=c1+A(:,:,j) * ( X(:,t-j)-B(:,t-j));
end
end
I haven't known to use the library well yet. Thanks again.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi GF,
What is the reason of you change the matlab or R to C? and What is your problem size (matrix)?
You may have known, you can use R or matlab directly, and get MKL performance benifit at the same time, because MKL can be intergarted into R and Matlab, please see the article http://software.intel.com/en-us/articles/using-intel-mkl-with-r
So first, i may suggest you to use matlab or R directy.
Secondly, MKL mainly focus on the computation and the interfaces are mainly based on some kind of standard interface, like BLAS ( matrix, vector operation). So it is not flexiable like Matlab and R.
It hasn't single routines like data operations like extract columns from a Matrix. But these operations are embeded in the computation.
for example, If you have to convert the matlab code to C/MKL code. You may first convert them to C code, then call MKL function.
for example, X(:, t-j) - B(:, t-j) , as mecej4 mentioned to use daxpy.
double * Ypointer=&(X[0][t-j]);
double * Xpointer=&(B[0][t-j]);
IncX= number of columns of B
IncY = number of columns of A;
N= row of column of A;
cblas_daxpy ( N, -1.0, Xpointer, incX, Ypointer,incY);
Then same as for A(:, :, J) * Ypointer. If A can access by C pointer with regular pattern by (expressed by incX and lda)
Call cblas_dgemv (const CBLAS_ORDER order, const CBLAS_TRANSPOSE TransA, const MKL_INT
M, const MKL_INT N, const double alpha, const double *A, const MKL_INT lda, const
double *X, const MKL_INT incX, Ypointer, 1).
Last, if you are using Intel C Compiler, Array notication also is helpful to convert your matlab to C code.
Please See http://software.intel.com/en-us/articles/about-intel-cilk-plus-and-how-to-get-started.
You can write A[:] - refers the entire array in C code.
Best Regards,
Ying
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page