PowerQuad corrupts memory

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

PowerQuad corrupts memory

Jump to solution
1,262 Views
Peter19
Contributor II

I am running example frdmmcxn947_powerquad_cmsis and extended size a bit.

Now memory gets corrupted around the locals so it looks to me like powerquad writes outside the expected memory.

 

 

 

static void arm_mat_add_q31Example(void)
{
    uint32_t srcRows, srcColumns; /* Temporary variables */
    arm_status status;
    arm_matrix_instance_q31 addMatrixA31;
    arm_matrix_instance_q31 addMatrixB31;
    arm_matrix_instance_q31 addMatrixR;
    #define MATRIX_SIZE 32
    q31_t A31[MATRIX_SIZE]       = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32};
    q31_t B31[MATRIX_SIZE]       = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320};
    q31_t addResult[MATRIX_SIZE] = {0};
    q31_t addRef[MATRIX_SIZE]    = {11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132, 143, 154, 165, 176, 187, 198, 209, 220, 231, 242, 253, 264, 275, 286, 297, 308, 319, 330, 341, 352};
    uint16_t rows = MATRIX_SIZE;
    uint16_t cols = 1;

    /* Initialise Matrix Instance addMatrixM1 with numRows, numCols and data array(M1) */
    srcRows    = rows;
    srcColumns = cols;
    arm_mat_init_q31(&addMatrixA31, srcRows, srcColumns, A31);

    /* Initialise Matrix Instance addMatrixM1 with numRows, numCols and data array(M1) */
    srcRows    = rows;
    srcColumns = cols;
    arm_mat_init_q31(&addMatrixB31, srcRows, srcColumns, B31);

    /* Initialise Matrix Instance addMatrixM1 with numRows, numCols and data array(M1) */
    srcRows    = rows;
    srcColumns = cols;
    arm_mat_init_q31(&addMatrixR, srcRows, srcColumns, addResult);

    status = arm_mat_add_q31(&addMatrixA31, &addMatrixB31, &addMatrixR);
    EXAMPLE_ASSERT_TRUE(status == ARM_MATH_SUCCESS);

    for (uint32_t i = 0; i < MATRIX_SIZE; i++)
    {
        EXAMPLE_ASSERT_TRUE(addRef[i] == addMatrixR.pData[i]);
    }
}

 

 

 

 

Labels (3)
0 Kudos
Reply
1 Solution
1,236 Views
Celeste_Liu
NXP Employee
NXP Employee

Hello @Peter19 ,

Thanks for your post. The reason is that there are restrictions on the dimensions of the power_quad matrix operations. It only supports a maximum size of 16 * 16, and setting the row to 32 is not reasonable. You can find the detailed information in the Reference Manual. See the figure below.

Celeste_Liu_0-1736332255025.png

Hope it can help you.

BRs,

Celeste

--------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the "ACCEPT AS SOLUTION" button. Thank you!
--------------------------------------------------------------------------------------------------------

View solution in original post

0 Kudos
Reply
3 Replies
1,237 Views
Celeste_Liu
NXP Employee
NXP Employee

Hello @Peter19 ,

Thanks for your post. The reason is that there are restrictions on the dimensions of the power_quad matrix operations. It only supports a maximum size of 16 * 16, and setting the row to 32 is not reasonable. You can find the detailed information in the Reference Manual. See the figure below.

Celeste_Liu_0-1736332255025.png

Hope it can help you.

BRs,

Celeste

--------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the "ACCEPT AS SOLUTION" button. Thank you!
--------------------------------------------------------------------------------------------------------

0 Kudos
Reply
1,225 Views
Peter19
Contributor II
Hello @Celeste_Liu
It is not obvious to me that 32x1 is not supported since it is much smaller than 16x16...
Regards
/Peter
0 Kudos
Reply
1,202 Views
Celeste_Liu
NXP Employee
NXP Employee

Hello @Peter19 ,

What I mean is that neither a single dimension of the matrix, be it the row or the column, can exceed 16. If you change 32x1 to 16x2, it will work. Similarly, I've tested the maximum size of 16x16 and there was no problem.

BRs,

Celeste

0 Kudos
Reply