kendryte / kendryte-standalone-sdk

Standalone SDK for kendryte K210
https://kendryte.com
Apache License 2.0
440 stars 161 forks source link

core dump: misaligned load #111

Open zhouying12 opened 4 years ago

zhouying12 commented 4 years ago

当执行到do_nms_sort函数(参考20classes_yolo中的代码)的时候报以下错误:

a.index:209, b.class:19  b.index:0   a.probs[209][19]:0.000000   b.probs[0][19]:0.000000
end  qsort    boxes_number :210
core dump: misaligned load
Cause 0x0000000000000004, EPC 0x000000008000567a
reg[00](zero ) = 0x0000000000000000, reg[01](ra   ) = 0x0000000080005662
reg[02](sp   ) = 0x000000008045d9f0, reg[03](gp   ) = 0x0000000080426178
reg[04](tp   ) = 0x0000000080456ac0, reg[05](t0   ) = 0x0000000000000688
reg[06](t1   ) = 0x000000008000aa7a, reg[07](t2   ) = 0x89888787898a8a88
reg[08](s0/fp) = 0x0000000080424818, reg[09](s1   ) = 0x000000008045dc30
reg[10](a0   ) = 0x0000000080424f78, reg[11](a1   ) = 0x0000000000000004
reg[12](a2   ) = 0x000000008045dc24, reg[13](a3   ) = 0x000000008045dc20
reg[14](a4   ) = 0xffffffffffffffff, reg[15](a5   ) = 0x0000000000000004
reg[16](a6   ) = 0x00000000000000ff, reg[17](a7   ) = 0x0000000000000040
reg[18](s2   ) = 0x00000000000000d2, reg[19](s3   ) = 0x0000000000000014
reg[20](s4   ) = 0x000000008045e954, reg[21](s5   ) = 0x00000000804e5fe0
reg[22](s6   ) = 0x00000000804e0dc0, reg[23](s7   ) = 0x00000000000000d2
reg[24](s8   ) = 0x00000000000000d2, reg[25](s9   ) = 0x000000000000004c
reg[26](s10  ) = 0x00000000000000d2, reg[27](s11  ) = 0x000000008005d100
reg[28](t3   ) = 0x0000000000000003, reg[29](t4   ) = 0x0000000000000000
reg[30](t5   ) = 0x8184817f84878382, reg[31](t6   ) = 0x8283828487838083
freg[00](ft0 ) = 0x000000003f6a9e46(), freg[536870912]() = 0x000000008005e178()
freg[02](ft2 ) = 0x000000003e7885b3(), freg[-536870912]() = 0x000000008005e188()
freg[04](ft4 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e198()
freg[06](ft6 ) = 0xd199999900000000(), freg[1073741824]() = 0x000000008005e1a8()
freg[08](fs0 ) = 0x000000003e99999a(), freg[-1073741824]() = 0x000000008005e1d0()
freg[10](fa0 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e200()
freg[12](fa2 ) = 0x000000003f800000(), freg[00]() = 0x000000008005e228()
freg[14](fa4 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e238()
freg[16](fa6 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e248()
freg[18](fs2 ) = 0x0000000038682902(), freg[-2147483648]() = 0x000000008005e270()
freg[20](fs4 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e280()
freg[22](fs6 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e290()
freg[24](fs8 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e2a0()
freg[26](fs10) = 0x0000000000000000(), freg[00]() = 0x000000008005e2b0()
freg[28](ft8 ) = 0x0000000000000000(), freg[00]() = 0x000000008005e2d8()
freg[30](ft10) = 0x0000000000000000(), freg[00]() = 0x000000008005e2e8()
W (169979282863) SYSCALL: sys_exit called by core 0 with 0x539

SDK : kendryte-standalone-sdk-develop nncase : V-0.1

出错的代码:

    for(int k = 0; k < classes; ++k)
    {
        for(int i = 0; i < boxes_number; ++i)
            s[i].class = k;
        printf("start  qsort boxes_number\n");
        qsort(s, boxes_number, sizeof(sortable_box_t), nms_comparator);
        printf("end  qsort    ");
        printf("boxes_number :%d\n", boxes_number);
        for(uint32_t i = 0; i < boxes_number; ++i)
        {
            printf("%d  ", i);
            if(probs[s[i].index][k] == 0)
                continue;
            box_t a = boxes[s[i].index];
            for(int j = i + 1; j < boxes_number; ++j)
            {
                box_t b = boxes[s[j].index];
                if(box_iou(a, b) > nms_value)
                    probs[s[j].index][k] = 0;
            }
        }
markCwatson commented 2 years ago

@zhouying12 Did you solve this issue and identify the route cause? I have also been investigating several strange core faults like this. Translated to Chinese: 您是否解决了此问题并确定了路由原因? 我也一直在调查像这样的几个奇怪的核心故障。