我在MKL函数vsldCorrExec中出错,为什么?

时间:2016-09-08 05:30:20

标签: c++ correlation intel-mkl

我想获得数组h[16]={16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,},但我收到错误:

Debug Assert

如果我在代码中删除status = vslCorrSetStart(task, h_start);,它将正常工作,并且数组h[16]={0,0,0,0,0,16,15,14,0,12,11,10,0,8,7,6}

我该怎么办?

#include <assert.h>
#include <mkl.h>
#include <iostream>
using namespace std;  

void main()
{
   //input 
   const double f[16] = { 1 , 2 , 3 , 4,
                          5 , 6 , 7 , 8,
                          9 , 10, 11, 12,
                          13, 14, 15, 16,};
   //kernel
   const double g[9] = { 0, 0, 0,
                         0, 1, 0,
                         0, 0, 0 };
   //out
   double h[16] = { 0 };

   VSLCorrTaskPtr task;

   MKL_INT f_shape[2] = { 4, 4 };
   MKL_INT g_shape[2] = { 3, 3 };

   MKL_INT h_shape[2] = { 4, 4 };
   MKL_INT h_start[2] = { 1, 1 };

   MKL_INT f_stride[2] = { f_shape[1], 1 };
   MKL_INT g_stride[2] = { g_shape[1], 1 };
   MKL_INT h_stride[2] = { h_shape[1], 1 };

   int status;

   status = vsldCorrNewTask(&task, VSL_CORR_MODE_DIRECT, 2, f_shape, g_shape, h_shape);
   assert(status == VSL_STATUS_OK);

   status = vslCorrSetStart(task, h_start);
   assert(status == VSL_STATUS_OK);

   //always get wrong,return -2303 I can't find the problem
   status = vsldCorrExec(task, f, f_stride, g, g_stride, h, h_stride);
   assert(status == VSL_STATUS_OK);

   status = vslCorrDeleteTask(&task);
   assert(status == VSL_STATUS_OK);

   //print the result 
   for (int r = 0; r < 4; r++)
   {
      cout << r << "(out): ";
      for (int c = 0; c < 4; c++)
      {
         cout << h[r * 4 + c] << " ";
      }
      cout << endl;
    }
}

0 个答案:

没有答案