关于athread加速线程库中的原子操作



  • 在进行athread并行加速时,能否在Fortran编译环境中使用原子操作?如果可以,请问该如何实现呢?



  • @Chanice Fortran调用c可以。
    C程序:

    void faal_(long *addr, long *recv_ptr) {
        long recv;
        __asm__ volatile("faal %0, 0(%1)" : "=r"(recv) : "r"(addr));
        *recv_ptr = recv;
    }
    

    Fortran程序(设a是一个主存变量):

    call faal(a, b)
    

    则a应当加1且b是a原来的值。



  • 我的a是从核里的变量,运行后显示这个了..而且我想让二者相加该如何实现

    The exact shot pc is : 4ff0410170
    SPE 0 exception !
    LDM access exception
    The exact shot pc is : 4ff0410170
    The exact shot pc is : 4ff0410170
    SPE 1 exception !
    LDM access exception
    The exact shot pc is : 4ff0410170
    The exact shot pc is : 4ff0410170
    SPE 2 exception !
    LDM access exception
    The exact shot pc is : 4ff0410170
    The exact shot pc is : 4ff0410170
    SPE 3 exception !
    LDM access exception
    The exact shot pc is : 4ff0410170
    The exact shot pc is : 4ff0410170
    


  • 原子操作只针对主核地址。
    从核的LDM又不共享,原子操作有什么用呢?
    二者相加是不能实现的。


登录后回复