simd 出现Unaligned exception



  • 各位老师,我在做simd的时候有出现使用simd_set_floatv4可以,但simd_load会报出Unaligned exception的问题。
    例如

    __thread_local float a_slave[256*34] __attribute__((aligned(16)));
    athread_get(PE_MODE, &host_a[0], &a_slave[0], 256*34*sizeof(float), (void*)&get_reply, 0, 0, 0);
    while (get_reply != 1);
    
    floatv4 p_a;
    p_a = simd_set_floatv4(a_slave[index], a_slave[index+1],a_slave[index +2],a_slave[index+3]);
    

    是ok的。
    但是

    floatv4 p_a;
    simd_load(p_a, &a_slave[index]);
    

    floatv4 *p_a;
    p_a = (floatv4*)(&a_slave[index]);
    

    都会报出Unaligned exception。
    是什么原因呢? 是我对界属性设置写错了吗?



  • align可能没有用,最好打印一下&a_slave[index] ,是不是16字节对齐的



  • @parallel 您好,如果没有用的话,16字节对齐还可以用其他什么办法吗?



  • @Sam 自己做地址对齐,自己给指针附一个16字节对齐的地址


登录后回复