Gromacs程序有些数组无法传递给从核



  • 我把从核代码放在外部库中,设主核中有一数组double *p,从核中有一数组double *slave_p,现在要将p中数据拷贝到slave_p。
    将主核中的数组double *p的首地址传给从核,通过从核发起athread_get完成数据的传输
    现在的问题是,gromacs中有些数组double *q:
    1.在主核中能以q[i]的形式来访问数据,也就是说这个指针指向的数组是有效的,可以访问的
    2.将q的首地址传给从核,从核athread_get后报以下错误,可能是从核没有办法通过q数组的首地址传输q的数据
    0_1538370009091_QQ图片20181001125525.png
    3.打印q在主核与从核中的首地址,发现首地址并没有传错
    0_1538370577943_QQ图片20181001130917.png
    4.自己申请了一个新的动态数组double *r,将q中的数据全部拷贝到r,把r传给从核,结果从核能从r中传输数据。
    请问这可能是什么原因造成的?



  • 遇到了同样的问题,望可以得到解答!
    (这个问题卡一整天了



  • @Tashkent 从核上打印过q数组吗?此外,错误信息放的详细一点,你截的图没办法判断问题



  • @popo 从核上打印不了q数组,只打印了q的首地址
    总之q数组就是传不了,哪怕只传1个double长度都会出现2中的错误



  • @tashkent 朋友试试bbs上的从核调试小工具啊。。。



  • @Tashkent

    static void cpe_printf(const char *fmt, ...){
      volatile long vprintf_addr = (long)vprintf;
      int (*vprintf_ptr)(const char *, va_list) = (void*)vprintf_addr;
      va_list vlist;
      va_start(vlist, fmt);
      vprintf_ptr(fmt, vlist);
      va_end(vlist);
    }
    
    

    ------------------------------------------来自于@段晓辉
    你试试这个打印函数



  • @popo 好的,我试试


登录后回复