Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Possible Bug in oneMKL 2025.3

JörgZeiner
Начинающий
193Просмотр.

Hi,

I have found a possible bug in oneMKL version 2025.3 using VS 2026. Please let me know, if you need any further information.

 

Version:

Intel(R) oneAPI Math Kernel Library Version 2025.3-Product Build 20251007 for Intel(R) 64 architecture applications

 

Building for x64 on Windows, MKL_ILP64 is _not_ defined.

 

The test (see code below) gives:

1D real create -> status=0, msg=Intel oneMKL DFTI SUCCESS: No error
1D real commit -> status=0, msg=Intel oneMKL DFTI SUCCESS: No error
2D complex create -> status=0, msg=Intel oneMKL DFTI SUCCESS: No error
2D complex commit -> status=9, msg=Intel oneMKL DFTI ERROR: Transforms with number of points N of a non-unit stride dimension exceeding 2^(27-p) - 1 for N a power-of-two, or 2^(23-p) - 1 for N not a power-of-two, are currently not supported, where p=0 for single precision and p=1 for double precision
2D real create -> status=0, msg=Intel oneMKL DFTI SUCCESS: No error
2D real commit -> status=3, msg=Intel oneMKL DFTI ERROR: Inconsistent configuration parameters

 

Code:

static void DebugOut(const char* text)
{
    OutputDebugStringA(text);
}

static void DebugStatus(const char* name, MKL_LONG status)
{
    char buffer[1024];
    _snprintf_s(
        buffer,
        sizeof(buffer),
        _TRUNCATE,
        "%s -> status=%ld, msg=%s\n",
        name,
        status,
        DftiErrorMessage(status));

    OutputDebugStringA(buffer);
}

static void TestDftiMinimal()
{
    MKL_LONG status = 0;
    DFTI_DESCRIPTOR_HANDLE h = nullptr;

    {
        status = DftiCreateDescriptor(&h, DFTI_SINGLE, DFTI_REAL, 1, (MKL_LONG)16);
        DebugStatus("1D real create", status);
        if (status == DFTI_NO_ERROR)
        {
            status = DftiCommitDescriptor(h);
            DebugStatus("1D real commit", status);
            DftiFreeDescriptor(&h);
        }
    }

    {
        MKL_LONG dims[2] = { 16, 16 };
        status = DftiCreateDescriptor(&h, DFTI_SINGLE, DFTI_COMPLEX, 2, dims);
        DebugStatus("2D complex create", status);
        if (status == DFTI_NO_ERROR)
        {
            status = DftiCommitDescriptor(h);
            DebugStatus("2D complex commit", status);
            DftiFreeDescriptor(&h);
        }
    }

    {
        MKL_LONG dims[2] = { 16, 16 };
        status = DftiCreateDescriptor(&h, DFTI_SINGLE, DFTI_REAL, 2, dims);
        DebugStatus("2D real create", status);
        if (status == DFTI_NO_ERROR)
        {
            status = DftiCommitDescriptor(h);
            DebugStatus("2D real commit", status);
            DftiFreeDescriptor(&h);
        }
    }
}

 

0 баллов
1 Решение
Fengrui
Модератор
140Просмотр.

Hi,

 

Thanks for posting in the forum!

For the 2D complex case, I didn't manage to reproduce it. Could you show more details how it was built? 

For the 2D real case, strides need to be set explicitly. After setting both strides, the code runs with no error.

 

Best,

Fengrui

Просмотреть решение в исходном сообщении

2 Ответы
Fengrui
Модератор
141Просмотр.

Hi,

 

Thanks for posting in the forum!

For the 2D complex case, I didn't manage to reproduce it. Could you show more details how it was built? 

For the 2D real case, strides need to be set explicitly. After setting both strides, the code runs with no error.

 

Best,

Fengrui

JörgZeiner
Начинающий
122Просмотр.

Thanks Fengrui,

 

I solved the problem. I had mkl_intel_ilp64.lib instead of mkl_intel_lp64.lib in AdditionalDependencies.

 

Regards,

Jörg

Ответить