【问题标题】:Sparse matrix vector multiplication using MKL DIA routine使用 MKL DIA 例程的稀疏矩阵向量乘法
【发布时间】:2014-10-08 07:22:03
【问题描述】:

我正在使用 MKL 库使用对角格式执行稀疏矩阵向量乘法,当我使用 MKL mkl_sdiagemv 函数时,我收到“MKL 错误:参数 4 在进入 MKL_SDIAGEMV 时不正确。 " 错误。

【问题讨论】:

标签: c sparse-matrix intel-mkl diagonal


【解决方案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]); 

}

【讨论】:

  • 谢谢,但我已经想出了如何更正我的代码。
  • @The Hiary:不客气(:(我不会得到我的赏金:))。我的代码有几个小问题,我稍后会调整它
  • 不,一切都很好,只是删除了不相关的 printf。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多