Я получаю ошибку в функции MKL vsldCorrExec, почему?

Я хочу получить массив 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector