2014-10-08 68 views
2

我正在使用MKL庫執行使用對角線格式的稀疏矩陣向量乘法,當我使用MKL mkl_sdiagemv函數時,我得到一個「MKL錯誤:參數4在進入MKL_SDIAGEMV時不正確。「 」錯誤。使用MKL DIA例程的稀疏矩陣向量乘法

+0

鏈接到文檔https://software.intel.com/en-us/node/468542 – 2014-10-13 06:14:33

回答

1

請參閱下面的一個基本示例,說明使用幾個MKL稀疏矩陣向量產品例程。

enter code #include <stdio.h> 
#include "mkl_spblas.h" 
#include "mkl_types.h" 

#define NJOB 6 
#define NZMAX 8 
#define INFO 0 
#define NNZ 8 
#define N 4 
#define M 4 

#define NMETHODS 3 

int main() 
{ 
double Acoo[NZMAX] = {5.0, 8.0, 9.0, 2.0, 3.0, 6.0, 1.0, 4.0}; 
int AJ[NZMAX] ; 
int AI[M+1]; 
int ir[NZMAX] = {1, 1, 2, 2, 3, 3, 4, 4}; 
int jc[NZMAX] = {1, 2, 1, 2, 3, 4, 3, 4}; 
double Acsr[NZMAX] ; 
int n=N, info=INFO, nnz = NNZ; 

int i, j; 
int job[NJOB]={2,1,1,0,NZMAX,0}; 
int job1[NJOB]={0,1,1,0,0,10}; 

double Adia[N][N]; 
int ndiag = N; 
int idiag = N; 
int distance[N]; 

double *Acsr_rem=NULL; 
int *AJ_rem=NULL; 
int *AI_rem=NULL; 

double v[N]={1.0,1.0,1.0,1.0}; 
double answer[NMETHODS][N]; 
int lval; 
char transa = 'N'; 

mkl_dcsrcoo (job, &n, Acsr, AJ, AI, &nnz, Acoo, ir, jc, &info); 
mkl_dcsrdia (job1, &n, Acsr, AJ, AI, *Adia, &ndiag, distance, &idiag, Acsr_rem, AJ_rem, AI_rem, &info); 
mkl_ddiagemv (&transa, &n, *Adia, &ndiag, distance, &ndiag, v, answer[0]); 
mkl_dcoogemv(&transa, &n, Acoo, ir, jc, &nnz, v, answer[1]); 
mkl_dcsrgemv(&transa, &n, Acsr, AI, AJ, v, answer[2]); 

} 
+0

謝謝,但我已經想通了如何糾正我的代碼。 – 2014-10-14 15:50:57

+0

@ The Hiary:不客氣(:(我不會得到我的賞金:))。我的代碼有幾個小問題,我稍後再調整它 – Kostya 2014-10-14 17:26:14

+0

不,一切都很好,只是刪除了不相關的printf。 – Kostya 2014-10-14 18:17:45